16

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

我被要求使用触发器来拦截插入到Staff表中并检查office值是否为 NULL 并将其替换为 value 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"; 附近使用的正确语法;结尾'

4

3 回答 3

24

首先,更改表以允许 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
于 2012-10-11T10:29:10.340 回答
4

不应该是这样的:

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$$
于 2012-10-11T09:26:14.313 回答
2
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;
于 2012-10-11T10:36:03.190 回答