事务
事务的四大特性ACID
原子性(Atomicity):要不一起成功,要不一起失败;
一致性(Consistency):即事务内部的数据是从一个状态到另一个状态,其变化是一致的,满足业务需求的;
隔离性(Isolation):即多个事务互不干扰;
持久性(Durability):即事务一旦执行,它的变化是永久的,不会因为计算机普通的断电而丢失;
全局设置开启自动提交事务:
set global autocommit=on;
set global autocommit=1;
全局设置关闭自动提交事务:
set global autocommit=off;
set global autocommit=0;
临时开启事务:
start transaction;
commit 提交;rollback 回滚;
并发问题
脏读:读到了还没有提交commit的数据。
不可重复读:在事务处理过程中,你在事务中两次读取到你没有修改的数据,但是结果不一致。针对一行数据。
幻读:在事务处理过程中,你在事务中两次读取到你没有增删的数据,但是数量不一致。针对一列数据。
事务的隔离级别
针对事务的三种并发问题,我们的事务有用于处理的四种隔离级别。
从上往下,逐渐严格;
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | × | × | × |
读已提交 | √ | × | × |
可重复读 | √ | √ | × |
串行化 | √ | √ | √ |
隔离级别的查询
show variables; 是查询mysql全部环境变量的语法。
查询当前会话的隔离级别
select @@transaction_isolation;
查询全局的隔离级别
select @@global.transaction_isolation;
其中的@@表示后面的内容是个系统级变量;@符开头的是自定义变量。
设置隔离级别
修改当前会话的隔离级别:
set transation isolation level 对应级别的英文单词。
修改全局的隔离级别:
set global transation isolation level 对应级别的英文单词。