事务的四大特性和隔离级别

一、事务四大特性:

1.原子性:在一个事务中的多次增删改,只要存在一次失败,则全部失败;成功即全部成功。

2.一致性:与原子性相关联,数据库修改前后,数据要保持一致;如A和B各有500元,A向B转账100,事务结束后应保证两者总和为1000保持和转账之前一致;

3.隔离性:事务之间不应该相互影响,涉及事务的隔离级别,事务A中的操作不应该影响事务B的结果;

4.永久性:数据库执行commit之后,数据应该再磁盘中永久存在(在磁盘没损坏前提下),即使数据库系统宕机无法使用,也应该保证数据的永久化;

二、事务的隔离级别:

在此之前需要先知道隔离级别是为了做什么而存在的,事务的隔离级别是为了解决数据库的三个问题,分别是:

1.脏读:事务A查询时查到了事务B还未提交的内容;如事务B将张三的分数由77改为88,但是还没有提交,此时事务A查询张三的分数,结果是88;

2.不可重复读:事务A执行两次查询,第一次查询张三分数为77,此时事务B更改张三分数为88并提交,事务A在第二次查询时结果为88,两次查询结果不一致;

3.幻读事务A想修改表中所有数据时,事务B在表中新增了一条数据,导致事务A修改后还有一条没有修改的数据;如今天老板开心说给所有员工的饭卡里每人充100,在事务A执行修改过程中,此时刚好有个新同事入职,部门表就会多一条数据,事务A执行完发现新同事的饭卡并没有多100;

了解了这三个问题,现在说一下事务的四个隔离级别:

1.读未提交(Read uncommitted):最低的隔离级别,事务A可以读取到事务B未提交的数据,未提交的都可以读到那么一定会存在不可重复读和幻读;

2.读已提交(Read committed):事务A只能读取已提交的数据,存在不可重复读和幻读;

3.可重复读(Repeatable read):事务A中无论多少次查询,查询某一条数据的信息都是一致的,但是存在幻读;

4.串行化(Serializable):将所有事务进行排队执行,一个一个来,效率低。

在使用事务时可以自定义隔离级别,也可以使用数据库默认的隔离级别,Oracle默认隔离级别是读已提交(Read committed),MySQL默认隔离级别是可重复读(Repeatable read);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值