Mysql事务
事务的四大特性
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
原子性:
一个事务必须被视为一个不可分割的最小工作单元,
整个事务中的所有操作要么全部提交成功,要么全部失败回滚,
对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性
一致性:
数据库总是从一个一致性的状态转换到另一个一致性的状态。
(在前面的例子中,一致性确保了,即使在转账过程中系统崩溃,
支票账户中也不会损失200美元,因为事务最终没有提交,
所以事务中所做的修改也不会保存到数据库中。)
隔离性:
通常来说,一个事务所做的修改操作在提交事务之前,对于其他事务来说是不可见的。
(在前面的例子中,当执行完第三条语句、第四条语句还未开始时,
此时有另外的一个账户汇总程序开始运行,则其看到支票帐户的余额并没有被减去200美元。)
持久性:
一旦事务提交,则其所做的修改会永久保存到数据库。
Mysql隔离级别
一个事务数据进行修改,对于其他事务是否是可见的。在一个事务中,能不能看到别人修改的数据
- Serializable(串行化)
- Repeatable read(可重复读)
- Read committed (读已经提交)
- Read uncommitted(读未提交)
Serializable(串行化):
事务串行化顺序执行 ,可避免脏读,不可重复读,
这是最高的隔离级别,但是效率低,它通过强制事务排序,使之不可能相互冲突,
从而解决幻读问题
Repeatable read(可重复读):
别人改数据的事务已经提交,我的事务中也不去读到,除非我提交事务才会读到
Read committed (读已经提交):
别人改数据的事务已经提交,我在我的事务中才能读到 ,可避免脏读的发生
Read uncommitted(读未提交):
最低级别,任何情况都无法保证,就是一个事务读取到其他事务未提交的数据,是级别最低的隔离机制 ,别人改数据的事务尚未提交,我在我的事务中也能读到。
脏读:
是指在一个事务处理过程里读取了另外一个未提交的事务数据
幻读:
多次查询显示的结果不一样
Mysql默认的隔离级别是 Repeatable read(可重复读)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:Mysql事务
本文作者:伟生
发布时间:2019-10-29, 19:23:10
最后更新:2019-10-29, 19:56:22
原始链接:http://yoursite.com/2019/10/29/db_02_mysql_05/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。