Таблица с триггерами на INSERT не блокирует, чтобы сделать INSERTS - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь вставить некоторые данные в таблицу test. В этой таблице установлены триггеры для репликации данных в другие базы данных.

Однако, когда я вставляю данные, выдается ошибка ERROR 1100 (HY000) at line 3 in file: 'test_insert.sql': Table 'test' was not locked with LOCK TABLES., хотя я заблокировал таблицу и имею правильные привилегии для ее блокировки. Вот файл test_insert.sql

LOCK TABLES `test` WRITE;

INSERT INTO `test` ('a','b')
VALUES
    (1,2),
    .
    .
    .   

UNLOCK TABLES;

Есть ли какой-либо другой способ блокировки таблиц с установленными на них триггерами?

Триггер

CREATE TRIGGER test_insert AFTER INSERT ON #{db_name}.test FOR EACH ROW
INSERT INTO #{other_db}.test (select * from #{db_name}.test where #{primary_index} = NEW.#{primary_index});

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Этот оператор select * from # {db_name} .test где # {primary_index} = NEW. # {Primary_index}

не имеет большого смысла - зачем вам это делать, когда вы уже обрабатываете каждый ряд вставки

INSERT INTO #{other_db}.test values (new.col1,new.col2...); выглядит более подходящим.

0 голосов
/ 27 марта 2020

MySQL 8.0 Справочное руководство / Хранимые объекты / Ограничения для хранимых программ

SQL Утверждения, не разрешенные в хранимых программах

Хранимые подпрограммы не могут содержать произвольных SQL операторов. Следующие операторы недопустимы:

  • Операторы блокировки LOCK TABLES и UNLOCK TABLES.

  • ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...