我有staff
列office
。目前,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“
答案 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;