mysql的事务,隔离级别和锁
Posted 两脚任从行处来,一灵常与气相随。有时四大熏熏醉,借问青天我是
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的事务,隔离级别和锁相关的知识,希望对你有一定的参考价值。
事务就是一组一起成功或一起失败的sql语句。事务还应该具备,原子性,一致性,隔离性和持久性。
一、事务的基本要素 (ACID)
1、原子性:事务开始后,所有的操作,要么全部成功,要么全部失败,不可能处于中间状态,事务是一个不可分割的整体,就像原子一样。
2、一致性:事务开始前和结束后,数据库的完整性约束没有破坏,A向B转账,A扣了钱,但B却没到账。
3、隔离性:同时发生的事务(并发事务)不应该导致数据库处于不一致的状态中,每个事务都独立执行,不影响其他事务的存在。
4、持久性:事务对数据库的更改都会保存在磁盘上,不会丢失。
二、事务的并发问题
1、脏读:事务A读取了事务B未提交的写入数据,读取到的数据就称为脏数据
2、不可重复读:事务A多次读取同一数据,但在读取过程中,事务B对数据做了修改,并提交了。导致多次读取同一数据,结果不一样。
3、幻读:事务A对表中所有数据行进行了修改,比如设置status = 1,但同时,事务B往该表插入了一行新数据status = 0,对于操作事务A的用户而言,表中还有一条记录没被修改,就像发生幻觉一样。
三、事务隔离性的四个级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
读取未提交 read uncommitted |
√ |
√ |
√ |
读已提交 read committed |
× |
√ |
√ |
可重复读取 repeatable read |
× |
× |
√ |
序列化 serializable |
× |
× |
× |
以上是关于mysql的事务,隔离级别和锁的主要内容,如果未能解决你的问题,请参考以下文章