Перед вставкой MariaDB триггер не работает - PullRequest
1 голос
/ 22 апреля 2019

Мне нужно заполнить столбец cod_unico созданными (TIMESTAMP) и данными id (AUTOINCREMENT), я не могу сделать это с php, потому что два других столбца генерируются в MariaDB и, очевидно, не хотят это менять, поэтому япопытался обновить триггер после вставки, но я получаю эту ошибку Ошибка: невозможно обновить таблицу 'usuarios' в хранимой функции / триггере, потому что она уже используется оператором, который вызвал эту хранимую функцию / триггер.

я пробовал этокод в триггере перед вставкой


    DROP TRIGGER IF EXISTS `agregar_cod_unico`;
    CREATE DEFINER=`root`@`localhost` TRIGGER `agregar_cod_unico` BEFORE INSERT ON `usuarios` 
    FOR EACH ROW BEGIN 
    SET new.cod_unico = CONCAT(DATE_FORMAT(new.created, '%y'),DATE_FORMAT(new.created, '%m'),SUBSTR(UPPER(md5(new.id)),10,4));
    END

Это не дает мне никакой ошибки, но не работает, столбец id_unico по-прежнему равен нулю после вставки, но, если я заменяю new.created некоторой статической строкой итакже для new.id, это работает, я думаю, может быть, эти значения генерируются после вставки?В любом случае, как я могу получить значение для cod_unico и вставить его в каждую вставку?

1 Ответ

0 голосов
/ 23 апреля 2019

Наконец, я решил, я не могу использовать столбцы create и id, потому что это вставка перед вставкой, но вместо этого я мог бы использовать now () для TIMESTAMP и немного выбрать, чтобы получить автоинкрементный идентификатор, поэтому функциональный код:

DROP TRIGGER IF EXISTS `agregar_cod_alumno`;
CREATE DEFINER=`root`@`localhost` TRIGGER `agregar_cod_alumno` BEFORE INSERT ON `usuarios` 
FOR EACH ROW BEGIN 

DECLARE user_id int default 0; 
SELECT auto_increment into user_id 
FROM information_schema.tables 
WHERE table_name = 'usuarios' 
AND table_schema = database(); 

SET new.cod_alumno = CONCAT(DATE_FORMAT(now(), '%y'),DATE_FORMAT(now(), '%m'),SUBSTR(UPPER(md5(user_id)),10,4)); 

END
...