课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
事务是程序员在学习MySQL数据库开发的时候需要重点掌握的一个编程知识点,而本文我们就通过案例分析来简单了解一下,MySQL数据库事务常见问题。
一、事务的隔离级别
事务的隔离性可分为四种(性能从低到高):(系统默认是REPEATABLEREAD)
READUNCOMMITTED(读取未提交)
官方:如果有多个事务,那么任意事务都可以看见其他事务的未提交数据。
READCOMMITTED(读取已提交)
理解:自己操作的时候别人提交会影响我的数据。
官方:只能读取到其他事务已经提交的数据。
【事务A对表查询,事务B对表操作,事务A再查询表数据是不变的,但B提交后,A再次查询的数据就是B改变后的数据】
REPEATABLEREAD(可被重复读)
理解:事务间相互独立,只有完成了(提交)自己的部分才能看到别人的操作。
官方:如果有多个连接都开启了事务,那么事务之间不能共享数据记录,否则只能共享已提交的记录。
【事务A对表查询,事务B对表操作后提交,事务A在未提交前,A查到的表数据不变,一旦A提交后再次查询得到的表数据是B更改完的】
SERIALIZABLE(串行化)
官方:所有的事务都会按照固定顺序执行,执行完一个事务后再继续执行下一个事务的写入操作。
(前一个事务未commit,下一个事务将会等待)
二、事务带来的问题
1.脏读
解释:一个事务读取到另外一个事务还未提交的数据
例子:【小明赖账】小明买东西给了钱,商家发了货,小明回滚。
2.不可重复读
解释:在读取同一个表的数据时,可能会发生前后不一致的情况
例子:【小明算账】小张在算A表平均值,小刘又正在改动A表,小张后算出来的是小刘改动后的表的平均值。
3.幻读
解释:一个事务提交的数据,不能被其他事务读取到
例子:【小明建q号】小明在a地创建x账号,恰好小刘在小明前几秒创建了x账号,此时小明创建不了x账号,因为已经存在了,但小明查表显示却无x账号。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。