事务是一组操作集合,他是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
开启事务:START TRANSACTION 或 BEGIN;(作用于增、删、改)
回滚:ROLLBACK;
提交事务:COMMIT;
事务四大特性(ACID)
原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性(Consistency):事务完成时,必须使所有数据都保持一致状态。
隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性(Durability):事务一旦提交或回滚,他对数据库中的改变就是永远的
上述就是事务的四大特性,简称ACID
并发事务问题
脏读:一个事务读取到另外一个事务还没有提交的数据。
不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同。
幻读:一个事务按照查询条件查询数据时,没有对应数据行,但是在插入数据时,又发现这行数据已经存在,好像出现“幻影”。
事务隔离级别
查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;设置事务隔离级别
# 设置隔离级别 SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED |READ COMMITTED | REPEATABLE READ | SERIALIZABLE } # 打开两个会话,事务隔离级别设置为 READ UNCOMMITTED(读未提交) SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; # 查看当前会话的事务隔离级别 SELECT @@TRANSACTION_ISOLATION; # 设置全局事务隔离级别 SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; # 查看全局事务隔离级别 SELECT @@GLOBAL.TRANSACTION_ISOLATION;注:事务隔离级别越高,性能越低,数据越安全。
MYSQL支持4种事务隔离级别,默认的隔离级别为可重复读
READ UNCOMMITTED(读未提交)
允许读取未提交的数据,可能会遇到脏读。
READ COMMITTED (读已提交)
只能读取到已经提交的数据,可以避免脏读,但可能会出现不可重复读的问题。
REPEATABLE READ(可重复读)(默认级别)
保证在同一个事务中,多次读取同一数据的结果是一致的,可以避免不可重复读的问题,但可能会出现幻读。
SERIALIZABLE (可串行化)
最高的隔离级别,完全避免脏读、不可重复读和幻读,但性能较低。
原创
事务介绍
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法