我需要用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的值并将其插入每次插入中?
答案 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