在Mysql-PhpMyAdmin中从自己的触发器修改表

时间:2014-10-29 18:02:06

标签: mysql sql stored-procedures triggers phpmyadmin

我在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;

需要一些其他想法才能实现这一目标。帮助我......

1 个答案:

答案 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