数据库四

1、事务的四大特性

1、原子性

所谓原子性就是指操作的不可分割性,比如转账过程中一方加钱另一方减钱,这两个操作必须同时失败或者同时成功,这样才能
说转账具有原子性。

2、一致性

事务的一致性主要指数据的一致性,即数据的正确。如果是数字的改变,必须出入一致,比如消费时候,商家收款要和买家付款
相同,钱或者数字不能凭空产生凭空消失,其总量保持不变。表中与其它表关联的字段必须要有对应数据,比如成绩表中有tid
指向学生表的id,但成绩表某几行的tid在学生表找不到对应id,那么这几行成绩数据使得数据不一致。

在数据库操作中,最重要的是保持数据的一致性。

3、隔离性

隔离性就是指不同事务之间对它们共同操作的数据的共享程度。数据库的隔离一般分为四个等级,接下来将单独分析隔离等级。

4、持久性

所谓的持久性,就是指数据的改变(增删改)生效,并在物理存储(磁盘空间)上固定下来。

2、四个隔离等级

1、读未提交

所谓读未提交,就是指多个事务在执行过程中,对同一数据的操作相互实时可见。比如事务1和事务2都要对用户的积分进行操
作,初始积分为100,事务1先读取到该数据,并增加10分,此时事务1尚未提交,事务2也开始执行,读取到此时积分为110

2、读已提交

读已提交指一个事务只能读取到其它事务提交后的数据,对于事务中数据的变化是无法获取的,这样就避免了第一等级产生的脏
读问题。

3、不可重复读

在这一等级下,一个事务在未提交之前读取同一个数据,只能得到一个结果,即使这个数据实际上已经发生了变化,在事务中依
然会读取原来的数据,这样就防止了可重复读。但是当另一个事务对数据进行了新增操作后,这个事务还是能够读到新增的数
据,这就是产生了所谓的幻读。

4、序列化读

这个隔离等级是最高的,在一个事务进行的过程中,所有其它事务都不允许操作,这样可以防止幻读的产生。

对于这四个隔离等级,一般推荐使用2、3两个级别,4级虽然最安全,但是对系统资源消耗太高且效率低,如果遇到需要对事务进行最高隔离的情况,一般利用3等级隔离和java的锁配合达到数据安全的效果。

3、数据库的可编程性

1、存储过程

-- 默认为输入参数,输出参数前需加out
create procedure 存储过程名(输入参数/输出参数)
begin
--sql逻辑--
end

-- 调用存储过程
call 存储过程名(输入参数/@输出参数)

存储过程可以代替某些service层,里面可以写复杂逻辑。

2、视图

-- 创建一个视图
create view 视图名
as
查询语句

-- 视图只能做查询用
select * from 视图名

视图可以理解为一张虚拟的表只能做查询用,每次调用它就相当于先执行里面的查询语句,将结果表展示出来或者进行联表查询的操作。对于视图,在java中也可以用实体类列表进行接收,需要根据视图的字段建立对应的实体类。

3、自定义函数

-- 默认为输入参数,输出参数前需加out
create function 函数名(输入参数/输出参数)
begin
--sql逻辑--
end

-- 使用方法与聚合函数相同,例如
select 函数名(参数) from table

自定义函数是系统函数的补充,一般用于读取和计算,不用做非查询操作。

4、触发器

-- 一般是两个表的联动,例如联动删除
create trigger 触发器名 after/before delete
on 表1 for each row
begin
 delete 表2 where old.关联字段=关联字段
end

-- 触发器满足条件自动执行

不建议直接用触发器做数据库之间表的联动,因为触发瞬间产生的阻塞太大,并且不利于以后分布式的改造。

你可能感兴趣的:(数据库四)