#mysql
Вопрос:
Согласно документации MySQL
Блокировки намерений-это блокировки на уровне таблицы
Таким образом, это означает, что блокировки намерений удерживают блокировку таблицы, но давайте предположим, что у меня есть драйверы таблицы со следующими полями
id | name | car_id
1 | first | 1
2 | second | 2
3 | third | 3
Первая транзакция-это
START TRANSACTION;
SELECT id, name, SLEEP(10) FROM drivers WHERE car_id > 5
FOR UPDATE;
COMMIT;
и второе
START TRANSACTION;
UPDATE drivers SET name = 'new' WHERE id = 1;
COMMIT;
Вторая транзакция успешно обновила первую запись, и все в порядке, но запрос
SHOW ENGINE INNODB STATUS;
показывает, что драйверы таблицы были заблокированы в режиме IX
БЛОКИРОВКА ТАБЛИЦЫ
drivers
таблица trx id 3102 режим блокировки IX
Поэтому я не могу понять логику блокировки таблиц в InnoDB, потому что, как я понимаю, блокировка таблицы должна предотвращать другие транзакции с этой таблицей
Комментарии:
1. Если вы заблокируете стол, то все равно сможете делать все, что захотите. Он заперт, чтобы другие люди не могли добраться до него
2. Кроме того, не уверен, зачем вам совершать выбор?
3. Вопрос? Есть ли
car_id
такие, которые превышают 5?4. Так вот в чем вопрос. Почему innodb говорит, что таблица заблокирована, но я все еще могу обновить некоторые записи
5. Извините, вы прочитали первый комментарий? Если это вы заблокировали таблицу или строку, вам все равно разрешено ее обновлять