day2

事务

是一组原子性的SQL查询,如果数据库引擎能够对数据库应用该组查询的全部语句,那么就执行该组查询,如果其中有一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会被执行。
事务内的语句,要么全部执行成功,要么全部执行失败。

ACID

1.原子性(atomicity)

一个事务必须被视为不可分割的最小工作单元,整个事务的所有操作,要么全部执行成功,要么全部回滚,对于一个事务来说,不可能只执行其中的一部分。

2.一致性(consistency)

数据库总是从一个一致性的状态到另一个一致性的状态,当操作发生意外情况时,因为事务没有提交,所以事务中所有的操作也不会保存到数据库中。

3.隔离性(isolation)

一个事务在做最终提交时,对其他事务是不可见的。

4.持久性(durability)

一旦事务提交,则对数据库所有的修改都会永久保存待数据库中,即使系统崩溃,修改的数据也不会丢失。

隔离性中隔离级别
1.未提交读 (READ UNCOMMITTED)

此级别中,即时事务未提交,对其他事务也都是可见的。会出现脏读的情况。实际应用中很少使用。

2.提交读(READ COMMITED)

大多数数据库的默认级别(MySQL不是)一个事务开始到提交之前,所有操作对其他事务都是不可见的,
这个级别也叫作不可重复读。两次执行一样的查询,结果可能会不一样。

3.可重复读(REPEATABLE READ)

MySQL的默认事务隔离级别。
保证了一个事务多次读取同样的记录结果是一样的。但是会出现幻读的情况,当某个事务在读取某个范围内的记录是,其他事务又在这个范围插入了新的记录,之前的事务再次读取该范围的记录时,会出现幻行。

4.可串行化(SERIALIZABLE)

强制事务串行执行,解决了幻读的问题。但是他是在每一行数据上加锁,会导致超时,锁争用的情况。所以实际很少使用。

隔离级别 -----------脏读可能性-----------不可重复读可能性-----------幻读可能性-----------加锁读
未提交读>>>>>>>>>>YES>>>>>>>>>>YES>>>>>>>>>>>>>>>>>>YES>>>>>>>>>>NO
提交读>>>>>>>>>>>>NO>>>>>>>>>>NO>>>>>>>>>>>>>>>>>>>YES>>>>>>>>>>NO
可重复读>>>>>>>>>>NO>>>>>>>>>>YES>>>>>>>>>>>>>>>>>>YES>>>>>>>>>>NO
可串行化>>>>>>>>>>NO>>>>>>>>>>YES>>>>>>>>>>>>>>>>>>YES>>>>>>>>>>YES

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容