开始事务:start transaction; 开启另一个mysql 连接并执行查询 在session1 的事务中更新数据并查询 update user set password=2 where username=1; 在session2 中执行查询 session 1 提交事务 session 2中再次查询,可以看到数据已经改变
注commit 为提交事务,rollback 为回滚日志。
set session transaction isolation level 隔离级别
未提交读(read-uncommitted) 在一个事务中,可以读到其他事务未提交的数据。但是,当其他事务回滚并未真正的修改数据时,读到的数据和真实的数据不一致,这种现像也叫做脏读。
读已提交 (read-commited) 在一次事务中,只能读到其他事务已经提交的数据。事务a 读取数据记录A,事务b 对数据记录A中的某条数据进行了修改并提交数据,此时事务a 用相同条件查询时获得的是有记录A 不同的记录B ,这种现像也叫做不可重复读。
可重复读(repetable-read) mysql 的默认事务隔离级别,即在一次事务中,反复读取到的数据是一样的, 并一直不会发生变化,避免了脏读、不可重复读现象,但是它还是无法解决幻读问题。对幻读的解释:例如事务 T1 对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务 T2 又对这个表中插入了一行数据项为“1”的数据,并且提交给数据库。而操作事务 T1 的用户如果再查看刚刚修改的数据,会发现数据怎么还是 1?其实这行是从事务 T2 中添加的,就好像产生幻觉一样,这就是发生了幻读。
可串行化serializable 强制事务串行执行,避免了前面所说的幻读现像