插入值检查前的MySQL触发器

Bit*_*map 13 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;
Run Code Online (Sandbox Code Playgroud)

错误:

MySQL数据库错误:您的SQL语法有错误; 检查与您的MySQL服务器版本对应的手册,以便在'INSERT INTO Staff SET office ="N/A"附近使用正确的语法; 结束'

unu*_*tbu 19

首先,更改表以允许NULL:

ALTER TABLE Staff MODIFY office CHAR(40) DEFAULT "N/A";
Run Code Online (Sandbox Code Playgroud)

(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
Run Code Online (Sandbox Code Playgroud)