Условие IF в триггере

266
26 ноября 2016, 20:18

Я вставляю данные в таблицу:

LOCK TABLES `import_files_log` WRITE;
INSERT  INTO `import_files_log`(`id`,`import_files_id`,`inserted_ok`,`inserted_error`,`file`,`common_error_cause`,`import_start_date`,`import_finish_date`) VALUES (1,2,230,0,'D:\\Test\\file.txt',NULL,'2010-10-28 11:39:13','2010-10-28 11:39:13'),
UNLOCK TABLES;

и получаю следующую ошибку:

Error Code: 1100

Table 'data_files' was not locked with LOCK TABLES

При этом связь с таблицей data_files находится в триггере:

CREATE
    /*!50017 DEFINER = 'root'@'%' */
    TRIGGER `import_files_log_after_insert` AFTER INSERT ON `import_files_log` 
    FOR EACH ROW BEGIN
        IF (NEW.import_files_id=599999997 AND new.file LIKE '%SR3%.700' AND new.inserted_ok>0) THEN
          -- тут происходит вставка данных в таблицу data_files
END IF; 
END;
$$
DELIMITER ;

И что мне непонятно, так это то, что условие в триггере не выполняется, почему тогда таблица data_files должна быть залочена?

P.S. В том, условие в триггере не выполняется, я убедилась. Например, после удаления триггера, вставки данных в таблицу import_files_log и выполнения запроса:

SELECT *
FROM `import_files_log`
WHERE `import_files_id`=599999997 AND `file` LIKE '%SR3%.700' AND `inserted_ok`>0;

я не получила никаких данных.

Answer 1

Из документации MySQL

If you lock a table explicitly with LOCK TABLES, any tables used in triggers are also locked implicitly, as described in Section 14.3.5.2, “LOCK TABLES and Triggers”.

Что в переводе означает примерно следующее

Если вы явно блокируете таблицу вызовом LOCK TABLES, то любые таблицы, в которым идет обращение из триггеров также неявно блокируются, как описано в разделе 14.3.5.2, “LOCK TABLES and Triggers”.

READ ALSO
Ошибка 1142 при вставке данных в таблицу MySQL

Ошибка 1142 при вставке данных в таблицу MySQL

При выполнении вставки данных в таблицу я получаю ошибку:

432
Не проходит проверка столбца php/бд [закрыто]

Не проходит проверка столбца php/бд [закрыто]

Warning 1: mysql_query() expects parameter 1 to be string

237
Prepared Statements в Java , ошибка в синтаксисе!

Prepared Statements в Java , ошибка в синтаксисе!

Проблема в написании правильно строки с prepared statementom

259
Сохранение целой строки данных из DataGrid в БД (mysql)

Сохранение целой строки данных из DataGrid в БД (mysql)

Имеется WPF-приложение, на котором DataGrid, выбирающий данные из Mysql-базыЕсть ли возможность отправить в БД вновь добавленную строку (целиком)...

257