// 事务操作
// 查看/设置事务提交方式,查看当前是否是自动提交
// @@autocommit状态为1为自动提交状态,为0则没有打开自动提交
select @@autocommit;
set @@autocommit = 0;
// 提交事务
commit;
// 回滚事务
rollback;
// 不需要手动开启关闭自动提交
// 开启事务
// start transaction 或 begin;
// 事务的四大特性(ACID)
// 原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
// 一致性:事务完成时,必须使所有的数据都保持一直状态。
// 隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
// 持久性:事务一旦提交或回滚,他对数据库中数据的改变就是永久的。
// 并发事务问题
// 所以需要一个类似与锁的方法隔离各个事务的执行操作
// 脏读:一个事务读到了另外一个事务还没有提交的数据。
// 不可重复读:一个记录先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
// 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在。
// 事务隔离级别,对应问题是否可能出现
// 表格从上到下,安全性越来越高,执行效率越来越低
// 隔离级别 脏读 不可重复读 幻读
// read uncommitted √ √ √
// read committed × √ √
// repeatable read(默认) × × √
// serializable × × ×
// 查看事务隔离级别
// select @@transation_isolation
// 设置事务隔离级别
// session只针对当前客户端窗口有效,global针对所有客户端窗口有效
//
// set [session | global] transaction isolation level {read uncommitted | read committed | repeatable read | serializable};