数据库四大特性以及事务的隔离级别

四大特性

1.原子性

指事务的操作要么全部成功,要么全部失败回滚

2.一致性

指事务执行前后都必须处于一致的状态,中间的操作过程对用户不可见。
如比如张三取100给李四,数据库操作为张三先减100,然后李四的钱加100。当用户看到的是这两个过程是一起执行不可分离的。

3.隔离性

多用户可以同时访问同一个库同一个表,且不同用户的事务不会互相干扰。

4.持久性

一个事务一旦被提交,那么数据库的数据就永久的改变了。即使发生故障时事务也依然不会丢失。

事务的隔离级别

首先先理解三个概念:
1.脏读:事务a读取了事务b更新的数据,然后b回滚数据导致a读取到的数据实际上并不存在于数据库中,a读取到了脏数据。
2.不可重复读:事务a多次读取某个数据时,事务b在中途中修改了数据的值,导致a多次读取数据的结果不一致。
3.幻读:事务a先查询到数据不存在后,进行插入操作,这时事务b先行插入了数据,导致事务a插入操作失败。事务a在插入前已经查询过数据明确显示不存在了,当插入时却又提示数据已存在,就像出现了bug一样。(可以通过加共享锁解决)

隔离级别分为了4个,越来越高排序
级别越高,越能保证数据的完整性和一致性,同时性能也会越低

1.read-uncommitted(读未提交)

事务还没提交时,其他事务就可以读取到数据。
会出现脏读、不可重读、幻读等现象。

2.read-committed(已提交读)

事务在提交之后才能读取到数据
会锁住相应的行,会出现不可重复读、幻读

3.repeatable-read(可重复读)

在以提交读的基础上解决不可重复读。
但仍然存在幻读现象。是mysql的默认级别。
没有索引时,更新数据会锁定整个表。存在索引包括主键索引,会使用next-key锁。

4.serializable(串行化)

解决了所有问题,但是操作时会锁住整个表,所以使用率极低。

本人小白学习记录用,欢迎留言互相学习交流。2018年12月28日

参考文献

MySQL的四种事务隔离级别
MySQL事务一致性理解

猜你喜欢

转载自blog.csdn.net/weixin_37974649/article/details/85321891