插入MariaDB触发器之前无效

时间:2019-04-22 17:13:56

标签: sql triggers insert mariadb

我需要用created(TIMESTAMP)和id(AUTOINCREMENT)数据填充cod_unico列,我不能用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 :(得分:0)

最后,我解决了它,因为在插入之前我不能使用created和id列,但是我可以使用TIMESTAMP的now()和一些选择来获取自动递增的id,因此功能代码为:

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