事务提交引出的概念: 可能会有多个用户链接mysql用同一张表,当c1提交commit后,其他会话(其他链接)如c2 可以看到commit提交后变化的数据
隔离级别
知道以下几个概念:
-- 脏读(dirty read) 当一个事务读取另外一个事务未提交的改变时,产生脏读(把另外一个事务的隔离级别设置成未提交)
-- 设置成 未提交 的那个隔离级别的事务会看到另外一个事务未提交时的改变产生脏读
-- 不可重复读(nonrepeatable read):同一查询在同一事务中多次进行,由其他提交事务所在的修改或者-- 删除,每次返回不同的结果集此时发生 不可重复读
-- 幻读 (phanton read) 同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时产生幻读(提交)
-- 脏写: 一个事务修改了另外一个未提交事务修改过的数据,那就意味着发生了脏写
演示第一种读未提交(脏读,不可重复读,幻读都会出现,)
(左边的客户端是默认【可重复读】,右边设置为未提交)
脏读:
- 脏读(dirty read) 当一个事务读取另外一个事务未提交的改变时,产生脏读(把另外一个事务的隔离级别设置成未提交)
设置成 未提交 的那个隔离级别的事务会看到另外一个事务未提交时的改变产生脏读
不可重复读,幻读:(左边默认【可重复读级别】终端 修改,添加提交之后,右边【未提交隔离级别】,产生不可重复读,和幻读)
解析:
不可重复读(nonrepeatable read):同一查询在同一事务中多次进行,由其他提交事务所在的修改或者
删除,每次返回不同的结果集此时发生 不可重复读 (提交)-- 幻读 (phanton read) 同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时产生幻读(提交)
简言之左边的提交事务的操作,影响了右边的事务,(可右边的事务什么都没做,也没提交,右边的操作本身不能受其他用户的影响)
第二种演示读已提交
(脏读未出现)
产生不可重复读和幻读(此时上面添加500id的记录也出现了)
第三种也就是数据库默认的可重复读
- 可重复读 REPEATABLE-READ 左边原始 可重复读(原始的)修改(dml语句)之后,未/提交,右边可重复读(Read committed)效果都看不到(脏读,不可重复读,幻读不会出现)
第四种可串行化,脏读,不可重复读,幻读不会出现,并且还加锁阻塞操作
学习笔记记录,方便以后温习.