Оператор запроса select не будет заблокирован, ноselect .......for update
В дополнение к роли запроса, он также будет блокировать, и это пессимистическая блокировка.
Затем он добавляет блокировку строки или блокировку таблицы, это зависит от того, используется ли индексный/первичный ключ.
Если индексный/первичный ключ не используется, это блокировка таблицы, в противном случае — блокировка строки.
проверять:
создать таблицу sql
//id为主键
//name 为唯一索引
CREATE TABLE `user` (
`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
`name` VARCHAR ( 255 ) DEFAULT NULL,
`age` INT ( 11 ) DEFAULT NULL,
`code` VARCHAR ( 255 ) DEFAULT NULL,
PRIMARY KEY ( `id` ),
KEY `idx_age` ( `age` ) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 1570068 DEFAULT CHARSET = utf8
Autocommit должен быть отключен черезset @@autocommit=0;
Установить ручную отправку. 0 означает отправку вручную, 1 означает автоматическую отправку.
Подтвердить примерами
Пример 1:
Используйте идентификатор первичного ключа в качестве условия для запроса, а затем откройте другую транзакцию для обновления данных. Обновление заблокировано, заблокировано, а запрашиваемые данные строки с идентификатором 1 заблокированы.
-
На рис. 1 показана первая транзакция, и ни одна транзакция не зафиксирована.
-
На рисунке 2 показана вторая транзакция для обновления данных, которая заблокирована.
-
На рисунке 3 показана вторая транзакция, если блокировка не может быть получена в течение длительного времени, сообщается об ошибке.
Пример 2:
Мы открываем транзакцию для обновления другого фрагмента данных с идентификатором 2.
Пример 3 (индекс):
В начале создания таблицы возраст создает уникальный индекс.
Пример 4:
Используйте обычный код поля для работы
В другой транзакции я обновляю другой фрагмент данных.Если я обновлю успешно, он заблокирует строку, а если не удастся, то заблокирует таблицу.
результат:
Если в условии запроса используется индекс/первичный ключ, тоselect ..... for update
будет выполнена блокировка строки.
Если это обычное поле (без индекса/первичного ключа), тоselect ..... for update
Блокировка таблицы будет выполнена.