您的位置:首页 > 数据库 > MySQL

MySql事务详解

2019-04-23 18:28 393 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_26364669/article/details/89478404

因为实际中一个数据库是很多个用户操作的,所以就有了事务这么个东西。一个或者多个数据库操作构成了一个事务。事务的属性有ACID

A(原子性)

每个事务都是一个不可分割的单元,事务中的一个部分没完成,事务就不会成功。

C(一致性)

若是从系统中删除一个员工,那么所有与该员工相关的包括工资等都要被删除。MySql中一致性由日志来保证,事务处理中间发生错误,MySql需要恢复如初,日志为数据恢复提供了跟踪记录。一致性保证了数据从不返回一个未处理完的事务。

I(隔离性)

事务之间是不发生关系的。绝对隔离性,任意时刻只有一个用户访问数据库,不现实。使用页锁和行锁,隔离不同事务。

D(持久性)

通过日志实现,rdb文件记录所有操作,保证了即使系统突然宕机也可以很好的记录下宕机前的操作。

关于并发访问数据库的问题

丢失更新: 多个事务选择同一行更新,每个事务不知道其他事务存在,最后的更新就是每个事务都重写其他事务所作的更新,可能造成书库丢失
脏读:一个事务读取到别的事务还没提交的更新数据,这就是脏数据
不可重复读:一个事务多次访问同一行读取到不一样的数据成为不可重复读。
幻读:一个事务对某行插入删除,另一个事务在读取这一行。

每一个事务都有隔离级,这样保证了数据库的一致性。数据库提供了四种隔离级:

序列化(SERIALIZABLE)
可重复度(REPEATABLE READ)
提交读(READ COMMITED)
未提交读(READ UNCOMMITED)

序列化提供了最大限度的隔离,用户之间一个接一个顺序执行当前事务

可重复读中,同一个事务中的同一条select结果总是相同的,即你不能在一个事务中看到别的事务的操作,MySql默认这个

提交读 处于这一级的事务可以看奥其他事务的操作,即这一级别同一个事务中的同条select结果可能不同
未提交读 这是最小限度的隔离。可能会有幻读和不可重复读

隔离级别越高,性能越低

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: