目录
- 1. 简介
- 2. 事务操作
- 3. 四大特性
- 4. 并发事务问题
- 5. 脏读
- 6. 不可重复读
- 7. 幻读
- 事务隔离级别
- 参考链接
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;
事务隔离级别
画!表示无法解决
参考链接
无。。。