Spec-Zone.ru › MariaDB

Триггеры и неявные блокировки

Триггер может ссылаться на несколько таблиц, и если в одном из них используется LOCK TABLES оператор, другие таблицы могут в это же время также неявным образом заблокироваться из-за триггера.

Если триггер только читает из другой таблицы, она будет заблокирована для чтения. Если триггер записывает в другую таблицу, она будет заблокирована для записи. Если таблица заблокирована для чтения в результате LOCK TABLES, но должна быть заблокирована для записи, потому что она может быть изменена триггером, то на неё накладывается блокировка записи.

Все блокировки приобретаются вместе при выполнении LOCK TABLES оператора и освобождаются вместе при UNLOCK TABLES.

Пример

LOCK TABLE table1 WRITE

Предположим, что table1 содержит следующий триггер:

CREATE TRIGGER trigger1 AFTER INSERT ON table1 FOR EACH ROW
BEGIN
  INSERT INTO table2 VALUES (1);
  UPDATE table3 SET writes = writes+1
    WHERE id = NEW.id AND EXISTS (SELECT id FROM table4);
END;

Не только table1 заблокирована для записи, table2 и table3 также заблокированы для записи из-за возможных INSERT и UPDATE, в то время как table4 заблокирована для чтения из-за SELECT.

Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не предварительно проверяется MariaDB. Мнения, информация и мнения, выраженные в этом контенте, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/triggers-and-implicit-locks/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API