事务带来的问题以及数据库的隔离级别
事务带来的问题:
脏写:指的是同一行数据,一个事务对该行的更新操作覆盖了其他事务对改行数据的更新操作。(本质是写冲突)
脏读:一个事务读取了另外一个事务未提交的数据,就会导致读取的数据是脏数据。
不可重复读:同一个事务,相同的查询语句,不同时刻读取的结果不一致。
幻读:一个事务两次读取一个范围内的数据记录,读取的范围结果不同。
不可重复读和幻读的区别:
1.不可重复读的重点在于更新和删除操作,幻读的重点在于插入操作。
2.解决方式不同,使用锁机制解决的时候,因为不可重复读可以对范围数据加锁而使得无法对范围数据进行更新和删除操作,但是无法解决插入操作。
3.由2可知,不可重复读可由行锁避免,幻读不可以。
幻读要么使用串行化解决,要么使用乐观锁 MVCC机制(多版本并发控制),主要是使用了快照读和当前读。
事务隔离级别 脏读 不可重复读 幻读
读未提交 可能 可能 可能
读已提交 不可能 可能 可能
可重复读 不可能 不可能 可能
串行化 不可能 不可能 不可能
设置隔离级别
mysql可以使用命令行 transaction-isolation 选项 or 在my.cnf or 在my.ini中设置连接默认的隔离级别。
transaction-isolation = {READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE}
也可以使用SET TRANSACTION来改变单个or所有连接的事务级别
例如:
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE}
查询事务隔离级别
-- 查看全局的事务隔离级别
SELECT @@global.tx_isolation;
-- 查看当前会话的事务隔离级别
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧