本文共 1206 字,大约阅读时间需要 4 分钟。
事务是数据库操作的基本单位,是管理数据库一系列操作的逻辑单元。MySQL中的事务以InnoDB存储引擎为代表,能够处理复杂高并发的数据操作。
事务在MySQL中具有以下特性:
原子性(Atomic)
要么全部执行,要么全部不执行,确保操作的完整性。一致性(Consistency)
保持数据库的正确状态,从一个正确状态变为另一个正确状态。隔离性(Isolation)
在事务提交前,不允许其他事务读取或修改数据。持久性(Durability)
事务提交后,结果永久保存在数据库中。MySQL支持四种事务隔离级别:
Read Uncommitted
未提交读,可能读到未提交的数据。Read Committed
已提交读,称为不可重复读,两次读取数据可能不一致。Repeatable Read
可重复读,确保在同一事务中,数据一致性。Serializable
串行化,读写锁定整张表,性能低,常用于特殊场景。默认隔离级别为Repeatable Read。
不可重复读
同一事务中,数据可能因修改而改变。幻读
同一事务中,查询结果因新增或删除而变化。并发事务可能引发:
更新丢失
多个事务修改同一数据,可能覆盖其他事务的更新。脏读
修改未提交前,其他事务读取脏数据。不可重复读
数据读取结果因修改而改变。幻读
查询结果因新增或删除而变化。加锁
读取前加锁,阻止数据修改。MVCC
多版本并发控制,通过快照提供一致性读取。InnoDB通过记录版本号,确保事务读取一致性数据。
SELECT
检查记录版本号,确保早于当前事务版本。INSERT
插入新记录,保存当前版本号。DELETE
记录删除版本号。UPDATE
新记录保存当前版本号,旧记录标记删除。基于存储引擎,InnoDB通过MVCC解决不可重复读问题,加上间隙锁解决幻读。
配置文件修改
在my.cnf中设置transaction-isolation = REPEATABLE-READ。会话设置
使用set session transaction isolation level修改隔离级别。默认为Repeatable Read。
默认自动提交,set autocommit=0手动开启事务。
手动提交,未提交数据其他连接不可见。
使用begin、rollback、commit控制事务。
加入作者群,与大佬交流,获取最新面试经验。添加"xiangcode",发送暗号"6000"加入!
转载地址:http://swbfk.baihongyu.com/