目录
1. 简介
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
 默认的MySQL的事务是自动提交的,当执行一条DML语句,MySQL会立即隐式的提交事务
2. 事务操作
- 查看/设置事务提交方式
SELECT @@autocommit;
SET @@autocommit = 0; - 提交事务
COMMIT; - 回滚事务
ROLLBACK; 
select * from commodity;
select @@autocommit;
-- 手动提交
set @@autocommit = 0;
-- 涨价
-- 1. 查询鼠标的价格
select price from commodity where name = '鼠标';
-- 2. 修改
update commodity set price = price + 100 where name = '鼠标';
update commodity set price = price + 100 where name = 'U盘';
commit;
-- 回滚事务
rollback;
 
- 开始事务
START TRANSACTION 或 BEFIN; - 提交事务
COMMIT; - 回滚事务
ROLLBACK; 
3. 四大特性
- 原子性:事务是不可分割的最小操作单元
 - 一致性:事务完成时,必须使所有的数据都保持一致状态
 - 隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
 - 持久性:事务一旦回滚或提交,对数据库中的数据的改变是永久的
 
4. 并发事务问题
脏读:一个事务读到另外一个事务还没有提交的数据
 不可重复读:一个事务先后读取一条记录,但两次读取的数据不同,称之为不可重复读
 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。
5. 脏读
设置事务隔离级别
 set session transaction isolation leel read uncommitted;
 
 开启事务
 start transaction;
 
 修改aaa的money(尚未提交),然而事务A却变化了
 
 回滚后,跟着变化
 
 修改事务的隔离级别,同时开启事务
 set session transaction isolation level read committed;
 
 不再改变,可以解决脏读!!!
 
6. 不可重复读
不提交之前进行读取,提交后进行读取
 同一个事务,结果却不一样!!!
 
 
 把隔离级别再升一级
 set session transaction isolation level repeatable read;
 这个时候就不会出现不可重复读!!!
7. 幻读

 
 这里存在了,报错!!!
 设置隔离级别
 set session transaction isolation level serializable;
事务隔离级别
画!表示无法解决
 
参考链接
无。。。










