数据库基础学习笔记2

来源:互联网 发布:mac os x leopard 编辑:程序博客网 时间:2024/06/06 18:54

事务四个基本特征或 ACID 特性

事务是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。
一个转账必须 A账号扣钱成功,B账号加钱成功,才算正真的转账成功。

事务必须满足四大特征:原子性,一致性,隔离性,持久性/持续性

原子性:表示事务内操作不可分割。要么都成功、要么都是失败.
一致性:要么都成功、要么都是失败.后面的失败了要对前面的操作进行回滚。
隔离性:一个事务开始后,不能受其他事务干扰。
持久性/持续性:表示事务开始了,就不能终止。

mysql数据库的默认的最大连接数:100

为什么需要最大连接数?特定服务器上面的数据库只能支持一定数目同时连接,这时候我们一般都会设置最大连接数(最多同时服务多少连接)。在数据库安装时都会有一个默认的最大连接数为100
在实际开发中,我们都需要到数据库配置文件my.ini修改最大连接数。
这里写图片描述

mySql和Oracle的分页

为什么需要分页?在很多数据时,不可能完全显示数据。进行分段显示。
Mysql是使用关键字limit来进行分页的 limit offset,size 表示从多少索引取多少位。
Oracle的分页是使用了三层嵌套查询。

mysql:    String sql =     "select * from students order by id limit " + pageSize*(pageNumber-1) + "," + pageSize;
oracle:    String sql =      "select * from " +       (select *,rownum rid from (select * from students order by postime desc) where rid<=" + pagesize*pagenumber + ") as t" +      "where t>" + pageSize*(pageNumber-1);

数据库的触发器的使用场景

触发器,需要有触发条件,当条件满足以后做什么操作。
触发器用处还是很多的,比如校内网、开心网、Facebook,你发一个日志,自动通知好友,其实就是在增加日志时做一个后触发,再向通知表中写入条目。因为触发器效率高。而UCH没有用触发器,效率和数据处理能力都很低。
每插入一个帖子,都希望将版面表中的最后发帖时间,帖子总数字段进行同步更新,用触发器做效率就很高。

create table board1(id int primary key auto_increment,name varchar(50),articleCount int);create table article1(id int primary key auto_increment,title varchar(50),bid int references board1(id));delimiter |#把分割符;改成|create trigger insertArticle_Trigger after insert on article1 for each row begin    -> update board1 set articleCount=articleCount+1 where id= NEW.bid;    -> end;    -> |delimiter ;insert into board1 value (null,'test',0);insert into article1 value(null,'test',1);

数据库的存储过程的使用场景

数据库存储过程具有如下优点:

  1. 存储过程只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以大大提高数据库执行速度。
  2. 通常,复杂的业务逻辑需要多条 SQL 语句。这些语句要分别地从客户机发送到服务器,当客户机和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会大大减少,降低了网络负载。
  3. 存储过程创建一次便可以重复使用,从而可以减少数据库开发人员的工作量。
  4. 安全性高,存储过程可以屏蔽对底层数据库对象的直接访问,使用 EXECUTE 权限调用存储过程,无需拥有访问底层数据库对象的显式权限。

正是由于存储过程的上述优点,目前常用的数据库都支持存储过程,例如 IBM DB2,Microsoft SQL Server,Oracle,Access 等,开源数据库系统 MySQL 也在 5.0 的时候实现了对存储过程的支持。
定义存储过程:

create procedure insert_Student (_name varchar(50),_age int ,out _id int)begin    insert into student value(null,_name,_age);    select max(stuId) into _id from student;end;call insert_Student('wfz',23,@id);select @id;