Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在插入MariaDB触发器don和xB4之前;t工作_Sql_Triggers_Insert_Mariadb - Fatal编程技术网

Sql 在插入MariaDB触发器don和xB4之前;t工作

Sql 在插入MariaDB触发器don和xB4之前;t工作,sql,triggers,insert,mariadb,Sql,Triggers,Insert,Mariadb,我需要用创建的(时间戳)和id(自动增量)数据填充cod_unico列,我不能用php来填充,因为其他两列是在MariaDB中生成的,显然不想更改,所以我尝试了一个后插入触发器更新,但我得到了这个错误:无法更新存储函数/触发器中的表“usuarios”,因为它是 已由调用此存储函数/触发器的语句使用 我在插入前触发器中尝试了此代码 DROP TRIGGER IF EXISTS `agregar_cod_unico`; CREATE DEFINER=`root`@`localho

我需要用创建的(时间戳)和id(自动增量)数据填充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的值并在每次插入中插入它?

最后我解决了它,我不能使用创建的和id列,因为这是一个before insert,但是我可以使用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

最后,我解决了这个问题,我不能使用created和id列,因为这是一个before insert,但是我可以使用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