插入值检查前的MySQL触发器

时间:2012-10-11 09:21:12

标签: mysql triggers

我有staffoffice。目前,office列不接受NULL值。持久存在此表的应用程序有一个错误,这意味着,当工作人员没有被分配办公室时,它会尝试在表上插入一个NULL值。

我被要求使用触发器拦截Staff表上的插入,并检查office值是否为NULL并将其替换为值N/A

以下是我到目前为止的尝试,但确实有error试图实施。关于如何解决这个问题的任何想法。

CREATE TRIGGER staffOfficeNullReplacerTrigger BEFORE INSERT ON Staff
  FOR EACH ROW BEGIN
    IF (NEW.office IS NULL)
     INSERT INTO Staff SET office="N/A";
    END IF
  END;

错误:

  

MySQL数据库错误:您的SQL语法出错;检查   手册,对应右边的MySQL服务器版本   在'INSERT INTO Staff SET office =“N / A”附近使用的语法; END“

3 个答案:

答案 0 :(得分:17)

首先,改变表以允许NULL:

ALTER TABLE Staff MODIFY office CHAR(40) DEFAULT "N/A";

(将CHAR(40)改为适当的。)然后你可以用作你的触发器:

CREATE TRIGGER staffOfficeNullReplacerTrigger 
BEFORE INSERT 
ON Staff
  FOR EACH ROW BEGIN
    IF (NEW.office IS NULL) THEN
      SET NEW.office = "N/A";
    END IF

答案 1 :(得分:5)

不应该是这样的:

DELIMITER $$

CREATE TRIGGER staffOfficeNullReplacerTrigger BEFORE INSERT ON Staff
FOR EACH ROW BEGIN
   IF (NEW.office IS NULL) THEN
        INSERT INTO Staff(office) VALUES("N/A");
   END IF;
END$$

答案 2 :(得分:3)

CREATE TRIGGER staffOfficeNullReplacerTrigger BEFORE INSERT ON Staff
  FOR EACH ROW BEGIN
    IF (NEW.office IS NULL)
     INSERT INTO Staff SET office="N/A";
    END IF
  

END IF后添加半冒号

  END;