Какой тип блокировки SELECT FOR UPDATE использует для несуществующей строки? - PullRequest
0 голосов
/ 27 июня 2019

Допустим, у нас есть 2 транзакции.

транзакция 1:

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from user where id = 200 for update; // sql1
Empty set (0.00 sec)

, затем начните транзакцию 2:

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from user where id = 200 for update; // sql2
Empty set (0.00 sec)

mysql> update user set name='' where id = 200; // sql3
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> insert into user values(200,''); // sql4
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

Уровень изоляции обеих транзакций - REPEATABLE-READ

  1. что будет заблокировано sql1 или sql2?X замок или S замок?X-блокировка или S-блокировка какого ряда?
...