Попробуй это.Откройте два терминала, например powershell в Windows, xterm, консоль в Linux, .... Подключитесь к MySQL:
создайте таблицу child_codes (взято из документации MySQL )
mysql> create table child_codes (counter_field integer);
Query OK, 0 rows affected (0.05 sec)
mysql> insert into child_codes set counter_field = 1;
Query OK, 1 row affected (0.00 sec)
session 1 (terminal 1): session 2 (terminal 2):
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> select counter_field from child_codes
lock in share mode;
+---------------+
| counter_field |
+---------------+
| 1 |
+---------------+
1 row in set (0.00 sec)
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> select counter_field from
child_codes lock in share mode;
+---------------+
| counter_field |
+---------------+
| 1 |
+---------------+
mysql> update child_codes set counter_field = 2;
ERROR 1205 (HY000): Lock wait timeout exceeded;
try restarting transaction
Я тоже думал, что если другая транзакция выполняет запрос, выберите блокировку в режиме общего доступа, этот запрос блокируется (ожидание другой транзакции для фиксации или отката).Но, как упоминал Дархазер, Если строка не изменена, она не ждет .Я считаю, что это поведение должно быть упомянуто в документации MySQL.