什么是事务
多条sql语句,要么全部成功,要么全部失败。MySQL的事务是在存储引擎层实现。 MySQL的事务有ACID
A 原子性(atomicity):一个事务必须被视为一个不可分割的单元。
C 一致性(consistency):数据库是从一种状态切换到另一种状态。
I 隔离性(isolation):事务在提交之前,对于其他事务不可见。
D 持久性(durablity):一旦事务提交,所修改的将永久保存到数据库。
总结事务命令
事务开始: start transaction
事务开始: begin
事务提交: commit
回 滚: rollback
查看自动提交模式是自动还是手动
on开 off关闭
开启就是 set autocommit=1;
事务有4种隔离级别 事务在提交之前对其他事务可不可见
1. read unaommitted(未提交读)
2. read committed(已提交读)
3. Repeatable read(可重复读)
4. seaializable(可串行化)
show variables like '%iso%'; //查看隔离级别
select @@tx_isolation;//查看隔离级别
准备两个终端
首先改成
set session tx_isolation='read-uncommitted';(未提交读)
换个终端查看,这里看到了事务中修改没有提交对其他事务也是可见的,俗称脏读
回到第一个终端rollback回滚一下。
set session tx_isolation='read-committed';(已提交读)
两个终端都设置
插入一条数据
换一个终端查看
提交一下commit;
总结:从上面的例子可以看出,提交读没有了未提交读的问题,但是我们可以看到客户端A的一个事务 中执行了两次同样的SELECT语句,,得到不同的结果,因此已提交读又被称为不可重复读。同样的筛选 条件可能得到不同的结果。
set session tx_isolation ='repeatable-read';(可重复读)
set session tx_isolation='serializable';(可串行化)