默认隔离级别是“可重复读”。MySQL的重复读“交易异常行为MySQL的交易
根据另一个计算器问题( Difference between read commit and repeatable read) “可重复读是一个更高的隔离级别,即除了提交读级别的保障,同时也保证了所有数据的读取不能改变,如果事务读取同样的数据,它会找到之前读取的数据,保持不变,并可供读取。“
这里是我的测试数据库;
mysql> select * from people;
+------+---------+
| name | howmany |
+------+---------+
| alex | 100 |
| bob | 100 |
+------+---------+
slow.sql
START TRANSACTION;
SELECT @new_val := howmany FROM people WHERE name = 'alex';
SELECT SLEEP(10);
SET @new_val = @new_val - 5;
UPDATE people SET howmany = @new_val WHERE name = 'alex';
COMMIT;
fast.sql
START TRANSACTION;
SELECT @new_val := howmany FROM people WHERE name = 'alex';
-- SELECT SLEEP(10);
SET @new_val = @new_val - 5;
UPDATE people SET howmany = @new_val WHERE name = 'alex';
COMMIT;
如果我运行slow.sql,并返回之前,我跑fast.sql多次。 fast.sql将打印95,90,85 ....
我认为可重复读取隔离级别应使fast.sql无法运行或误解'可重复读取'。
我从Ubuntu的16.10运行MySQL 5.7。
非常感谢。