0
MySQL InnoDB에 대한 질문이 있습니다. 예 : 트랜잭션을 시작하는 스레드 A가 있습니다.MySQL 잠금에 대해 혼란 스럽습니다
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> update user set name = "Jim" where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
그런 다음 스레드 A를 그대로 두십시오. 스레드 A는 해당 행에 'X'잠금을 넣어 때문에,
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
그것은 의미가 있습니다 :이 작업을 수행하는 다른 스레드 B 시작 :
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> update user set name = "Tom" where id = 1;
을 그리고 나는 오류가 발생했습니다.
그리고 나는이 작업을 수행하는 스레드 B를 사용 :
mysql> start transaction;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from user where id = 1;
+----+------+
| id | name |
+----+------+
| 1 | wlq3 |
+----+------+
1 row in set (0.00 sec)
가 여기에 내가 혼란 스러워요. 마찬가지로 나는 스레드 A가 그 행에 'X'자물쇠를 넣었다 고 말했다. 스레드 B가이 행을 읽을 수있는 이유. 필자의 견해로는 독서 데이터에는 공유 잠금이 필요하지만 독점 잠금은 이미 해당 데이터에 있습니다. 아무도 저를 도울 수 있습니까, 고마워요!
그런데 스레드 A의 격리 수준은 반복 가능한 읽기이며 스레드 B는 커밋 된 읽기입니다.