|
一、事务简介
事务是一组操作集合,是一个不可分割的工作单位。
事务会把所有操作作为一个整体一起向系统提交或是撤销操作,即这些操作要么同时成功,要么同时失败。
开启事务——提交事务
开启事务——抛异常——回滚事务——提交事务
MySQL默认事务自动提交
二、事务操作
1.方式一
查看/设置事务提交方式
0是手动提交,1是自动提交
select @@autocommit;
set @@autocommit=0;提交事务
(修改为手动提交后,需要输入提交事务的代码才能执行成功)
commit;回滚事务
(执行出错后,不要提交事务,要回滚事务)
rollback;2.方式二
开启事务
(此时不用修改提交方式)
start transaction 或 begin;提交事务
commit;回归事务
rollback;三、事物四大特性
原子性atomicity:事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性consistency:事务完成时,必须是所有的数据都保持一致的状态。
隔离性isolation:数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行。
持久性durability:事务一旦提交或回滚,它对数据中的数据的改变是永久的。
四、并发事务问题
脏读:一个事务读到另一个事务还没有提交的数据。
不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
幻读:一个事务照条件查询数据时,没有对应的数据行,但在插入数据时,又发现这行数据已经存在,好像出现了幻影。
五、事务隔离级别
(解决并发事务的问题)
read uncommitted 读 未提交(性能最高,数据安全最差)
read committed 读 已提交:针对脏读
repeatable read(默认) 可 重复读:针对脏读,不可重复读
serializable 序列化(隔离级别最高,性能最差):针对脏读,不可重复读,幻读
查看事务隔离级别
select @@transaction_isolation;设置事务隔离级别
set [session|global] transaction isolation level {read uncommited | read commited |repeatable read |serializable}session是针对当前对话窗口有效,global是针对所有对话窗口有效 |
|