MySQL触发器在现有行上导致未知的系统变量错误

时间:2013-05-12 22:01:45

标签: mysql triggers

我在MySQL中创建了一个触发器,并在'unique_id'上获得了一个'未知的系统变量',这是我的'pending_jobs'表中的一行。触发器代码如下:

CREATE TRIGGER format_pending_jobs_unique
BEFORE INSERT ON pending_jobs
FOR EACH ROW
BEGIN
   SET unique_id = CONCAT(prefix_unique_id, id);
END

基本上,当插入新行时,它将两行(prefix_unique_id和id)连接到行unique_id中。 prefix_unique_id行的默认值为“sa”,它将是所有这些值的值,id是具有自动增量的行的索引。我是触发器的新手,我在Stack Overflow上的帖子中读到使用:=而不是=,但这并没有解决问题。我正在使用phpMyAdmin并且看到unique_id(以及prefix_unique_id和id)行都存在。任何帮助都会很棒。谢谢!

1 个答案:

答案 0 :(得分:3)

我会这样写你的触发器:

CREATE TRIGGER format_pending_jobs_unique
BEFORE INSERT ON pending_jobs
FOR EACH ROW
  SET new.unique_id =
   CONCAT(
     new.prefix_unique_id,
     (SELECT AUTO_INCREMENT
      FROM information_schema.TABLES
      WHERE TABLE_SCHEMA=DATABASE()
            AND TABLE_NAME='pending_jobs')
   );

请参阅小提琴here

NEW指的是要插入的新行的列,因此您必须使用new.unique_idnew.prefix_unique_id。要引用ID的新值,不能使用new.id,但需要使用返回表的下一个auto_increment值的子查询。