青青子衿,悠悠我心
纵我不往,子宁不嗣音
—— 24.3.9
事务:
事务简介
事务操作
事务四大特性
并发事务问题
事务隔离级别
一、事务简介
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作,这些操作要么同时成功,要么同时失败
案例:
银行的存取款问题
MySQL的事务是自动提交的,也就是说,当执行一条DML语句时,MySQL会立即隐式的提交事务
二、事务操作
案例:
转账操作(张三给李四转账1000元)
— 1.查询张三账户余额
select * from account where name = '张三';
— 2.将张三账户余额-1000
update account set money = money - 1000 where name = '张三';
— 3.将李四账户余额+1000
update account set money = money + 1000 where name = '李四';
当2,3两语句之间存在异常时,最终sql语句的结果就会出错
①修改事务提交方式为手动提交:
查看/设置事务提交方式
1:自动提交 0:手动提交
select @@autocommit; set @@autocommit = 0; #——设置为手动提交
提交事务
commit;
回滚事务
rollback;
set @@autocommit 手动提交
开启事务的提交方式
手动提交:
显示的开启事务
start transaction 或 begin;
提交事务
commit;
回滚事务
rollback;
三、事务四大特性(ACID)
原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败
一致性:事务完成时,必须使所有的数据都保持一致状态。
隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
四、并发事务问题
问题 描述
脏读:一个事务读取到另一个事务没有提交的数据
不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读
幻读: 一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了幻影
五、事务隔离级别
读未提交
读已提交(Oracle默认)
可重复读(MySQL默认)
串行化
—— 查看事务隔离级别
select @@transaction_isolation;
—— 设置事务隔离级别
set [session|global] transation isolation level [read uncommitted | read commited | repeatable read | serializable];
注意:事务隔离级别越高,数据越安全,但是性能越低
总结
1.事务简介
事务是一组操作的集合,这组操作,要么全部成功执行,要么全部执行失败
2.事务操作
start transaction ——开启事务
commit/rollback ——提交/回滚事务
3.事务四大特性
原子性,一致性,隔离性,持久性
4.并发事务问题
脏读、不可重复读、幻读
5.事务隔离级别
读未提交、读已提交(Oracle默认)、可重复读(MySQL默认)、串行化