我在phpMyAdmin中使用Mysql,如果我插入一个具有相同主键的行,我必须从tableA中删除一个条目。我想在tableA的触发器中执行它BEFORE INSERT 对于Ex, 如果tableA包含
1 Hai Hello
这里1是主键
现在,如果我插入一行1 Bye Hello
,则触发器BEFORE INSERT将删除旧条目,然后将插入新行(2nd)。但是Mysql限制了无法更新为同一个表定义的触发器中的表。
它给出错误
#1442 - 无法更新表格' tableA'在存储 函数/触发器,因为它已被调用的语句使用 这个存储的函数/触发器。
所以我改变了方向,我从tableA的触发BEFORE INSERT调用了一个过程,在那个过程中我执行了我想在触发器中做的任务。但不幸的是,我得到了同样的错误。 在触发器BEFORE INSERT中,我简单地将过程称为
CALL proce1(new.Reg_No);
在程序中我已经完成了这个
DECLARE toup integer;
select count(*) into toup from tableA where Reg_No=reg;/*Here Reg_No is primary key */
if toup > 0 then
delete from tableA where Reg_No=reg;
end if;
需要一些其他想法才能实现这一目标。帮助我......
答案 0 :(得分:2)
我不喜欢使用触发器,因为它们很难管理某些东西。它们也会导致你的性能下降。我并不反对触发器,因为它们在某些情况下可以派上用场。
在您的情况下,您是否使用REPLACE(....)
或INSERT INTO .... ON DUPLICATE KEY UPDATE
甚至INSERT INTO IGNORE .....
REPLACE(....)
将删除记录并插入具有相同ID的新记录。
INSERT INTO .... ON DUPLICATE KEY UPDATE
将允许您覆盖现有字段。
INSERT INTO IGNORE .....
将允许您忽略新插入的行(如果已存在的话)
由于您在评论中提到您要从文件中导入记录,然后尝试使用LOAD DATA INFILE逻辑,这样您就可以REPLACE
字段重复
LOAD DATA LOCAL INFILE 'x3export.txt'
REPLACE INTO TABLE x3export