读已提交和可重复读的区别 命令行测试
可重复读:两个事务进行数据操作他们是互不干扰的 ,事务先A进行数据查询,事务B进行一次事务修改并进行数据提交,事务A再进行一次查询,数据是不改变的。
读已提交:两个事务进行数据操作,事务先A进行数据查询,事务B进行一次事务修改并进行数据提交,事务A再进行一次查询,数据是B修改后的数据。
// 涉及到的几个命令
mysql -uroot -p123456
use mydemo
select @@global.transaction_isolation,@@transaction_isolation; (查看全局/会话隔离级别)
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;(设置隔离级别为 可重复读)
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;(设置隔离级别为 读已提交)
SHOW VARIABLES LIKE 'autocommit'; (查看是否自动提交)
set @@autocommit=0; (设置手动提交)
START transaction ; (开启事务)
commit; (事务提交)
1.登陆数据库查看数据
2.查看全局/会话隔离级别(mysql默认就是可重复读,不用做修改)
3.查看是否是自动提交,并设置为手动提交 设置autocommit为on;(ON、OFF、1、0)都可以
-- -- 开启另外一个窗口 做上述相同操作 ----
正式开始测试 可重复读
事务先A进行数据查询,事务B进行一次数据修改,事务A再次查询数据 数据不变,事务B进行数据提交,事务A再进行一次查询,数据是不改变的。
1 .两个窗口都开启事务
2.窗口A进行一次数据查询
3.窗口B做一个数据的删除,并查询一个数据(这里查询的数据是删除成功的,因为在同一个事务)
4.窗口A再次查询数据 (数据是不变的)
5. 窗口B提交事务
6. 窗口A再次查询 (数据还是不变的)
7. 窗口A提交
8.窗口A提交之后再次查询 数据是B修改后的
正式开始测试 读已提交
事务先A进行数据查询,事务B进行一次事务修改,事务A再次查询数据 数据不变,事务B进行数据提交,事务A再进行一次查询,数据是改变的。
1.事务A和事务B都要要做的操作
2.事务A查询数据
3.事务B进行一次数据删除 并查询数据
4. 事务A再次查询数据 数据跟第一次相比不变
5 .事务B提交数据
6.事务A再次查询数据 发现事务B删除的数据不在了