表ntt里有no,no_no,cr这3个字段,no字段是个auto_increment列,我写了个这样的触发器.
CREATE TRIGGER ntt_cr BEFORE INSERT
ON ntt FOR EACH ROW BEGIN
UPDATE ntt SET cr=1 WHERE no=NEW.no_no;
END
那个替换;用的DELIMITER |我当然也加了
但现在我如果执行INSERT语句,就会出如下错误
Can't update table 'ntt' in stored function/trigger because it is already used by statement which invoked this stored function/trigger
这是怎么回事,当然删掉这个触发器是可以正常插入的,但我需要这样一个东东啊
CREATE TRIGGER ntt_cr BEFORE INSERT
ON ntt FOR EACH ROW BEGIN
UPDATE ntt SET cr=1 WHERE no=NEW.no_no;
END
那个替换;用的DELIMITER |我当然也加了
但现在我如果执行INSERT语句,就会出如下错误
Can't update table 'ntt' in stored function/trigger because it is already used by statement which invoked this stored function/trigger
这是怎么回事,当然删掉这个触发器是可以正常插入的,但我需要这样一个东东啊
从你的代码中发现你希望将新增记录的cr赋值为1。你可以这样处理:
CREATE TRIGGER ntt_cr BEFORE INSERT
ON ntt FOR EACH ROW
BEGIN
SET NEW.cr = 1;
END;
如果需要修改源表的其他记录,建议另外执行单独的SQL语句或者执行存储过程的方式进行处理。
DELIMITER $$DROP TRIGGER /*!50114 IF EXISTS */ `recordquery`.`T_sys_User_Add`$$create trigger `recordquery`.`T_sys_User_Add` BEFORE INSERT on `recordquery`.`t_sys_user`
for each row BEGIN
DECLARE strQX varchar(200);
IF NEW.QX='' THEN
set strQX=(select QX from T_sys_User where uid='admin');
set strQX=(select replace(strQX,'T','F'));
SET NEW.QX=strQX;
SET NEW.QX_Assign=strQX; END IF;
END;
$$
我当时也快被整死了,幸亏后来悟了.
根本不需要UPDATE,直接把你要插入的字段修改掉就行了你的应该这样改
CREATE TRIGGER ntt_cr BEFORE INSERT
ON ntt FOR EACH ROW BEGIN
SET NEW.cr=1;
END
楼上两位的语句更新的都是当前触发行的列。"isoftk 好人,能帮我再看看吗我是要把no字段等于新插入字段的no_no的那行的cr改为1
有办法吗?
谢谢了