本篇文章主要介绍了"事务隔离级别 mysql隔离级别",主要涉及到事务隔离级别方面的内容,对于MySql感兴趣的同学可以参考一下:
原文链接
MySQL InnoDB事务的隔离级别有四级,默认是“可重复读”(REPEATABLE READ)。未提交读(READ UNCOMMITTED)。另...
mysql> show create table actor\G;
*************************** 1. row ***************************
Table: actor
Create Table: CREATE TABLE `actor` (
`actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `first_name` varchar(45) NOT NULL, `last_name` varchar(45) NOT NULL, `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`actor_id`), KEY `idx_actor_last_name` (`last_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> select @@global.tx_isolation, @@tx_isolation;
+-----------------------+-----------------+| @@global.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+| REPEATABLE-READ | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)
试验一:
t Session A Session B
|
| STARTTRANSACTION;STARTTRANSACTION;
|
| select * from actor;
| empty set
| insertinto actor
| select * from sakila.actor limit 1;
|
| select * from actor;
| empty set
| COMMIT;
|
| select * from actor;
| empty set
|
| insertinto actor select * from sakila.actor limit 1;
| ERROR 1062 (23000):
| Duplicate entry '1' for key 'PRIMARY'
v (shit, 刚刚明明告诉我没有这条记录的)
如此就出现了幻读,以为表里没有数据,其实数据已经存在了,傻乎乎的提交后,才发现数据冲突了。
试验二: