读未提交:一个事务的隔离级别为‘读未提交’,它可以读取其他事务未提交的数据
读已提交:一个事务的隔离级别为‘读已提交’,它只可以读其他事务已提交的数据
可重复读:一个事务的隔离级别为‘可重复读’,不关心其他事务的操作,整个事务内读取的数据一致。
1 row in set, 1 warning (0.00 sec)
mysql> select @@tx_isolation;
1 row in set, 1 warning (0.00 sec)
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from account;
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from account;
mysql> insert into account (id, name) values(5, 'ee');
Query OK, 1 row affected (0.00 sec)
mysql> select * from account;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from account;
mysql> insert into account (id, name) values(5, 'ee');
ERROR 1062 (23000): Duplicate entry '5' for key 'PRIMARY'
事务1没有查询到 (5, 'ee')这条,但在插入的时候,报错:重复
可串型化:一个事务的隔离级别为‘可串型化’,对自己关心的数据加上锁,别的事务在操作这些数据的时候会等待,直到‘可串型化’事务提交。
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from account;
mysql> select * from account;
mysql> insert into account (id, name) values(6, 'ff');
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
mysql> update account set age=10 where name='aa';
‘可串型化’事务,对自己关心的数据加锁,不允许修改
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from book;
21 rows in set (0.00 sec)
mysql> update book set card = 3 where bookid = 23;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from book;
21 rows in set (0.00 sec)
mysql> select * from book;
21 rows in set (0.00 sec)
mysql> update book set card = 2 where bookid =10;
Query OK, 1 row affected (0.09 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update book set card = 2 where bookid =23;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
原文地址https://blog.csdn.net/wjb214149306/article/details/82431042