Mysql事务实战
事务
pre
mysql8.0查看事务隔离级别的语句
SELECT @@transaction_isolation;
创建表
CREATE TABLE hero (
number INT,
name VARCHAR(100),
country varchar(100),
PRIMARY KEY (number)
) Engine=InnoDB CHARSET=utf8;
插入数据
INSERT INTO hero VALUES(1, '刘备', '蜀');
脏读
- 开启两个窗口,分别设置隔离级别
set session transaction_isolation='READ-UNCOMMITTED';
- 在第二个窗口中输入
BEGIN;
UPDATE hero SET name='关羽' WHERE number =1;
- 在第一个窗口中输入
BEGIN;
SELECT * FROM hero WHERE number=1;
不可重复读
- 设置事务隔离级别
两个终端都设置
set session transaction_isolation='READ-COMMITTED';
- 终端1
BEGIN;
SELECT * FROM hero;
- 终端2
BEGIN;
UPDATE hero SET name='关羽' WHERE number=1;
COMMIT;
- 终端1
SELECT * FROM hero;
幻读
前排提醒,mysql的REPEATABLE-READ隔离级别已经解决了幻读问题,因此不能设置隔离级别为REPEATABLE-READ。
- 终端1
BEGIN;
SELECT * FROM hero;
- 终端2
BEGIN;
INSERT INTO hero(number, name , country) VALUES(2, '关羽', '蜀');
COMMIT;
- 终端1
SELECT * FROM hero;