我有几个领域的桌子。一个字段是“date_assigned”,另一个字段是“已分配”。 “date_assigned”的数据类型为timestamp,可以为null。 “assigned”的数据类型为tinyint,值为0(默认值;“未分配”)或1(“已分配”)。
我想创建一个触发器,当使用值(非空)更新“date_assigned”时,该触发器会自动将“已赋值”值更新为1。
我之前使用过触发器,但是没有将它们与检查值是否为null一起使用。我不清楚语法,所以任何帮助将不胜感激。到目前为止,我已经尝试过:
DELIMITER $$
CREATE
TRIGGER `<database>`.`<trigger_name>` AFTER UPDATE
ON `<database>`.`<table>`
FOR EACH ROW BEGIN
IF(NEW.date_assigned IS NOT NULL) THEN
UPDATE <table> SET assigned = '1';
END$$
DELIMITER ;
我只是得到错误代码:1064。我查看了代码,看起来这是一个语法错误。那么我犯了什么语法错误,这甚至是正确的“语法”?
答案 0 :(得分:1)
尝试将BEGIN
放入新行中,如下所示。
DELIMITER $$
CREATE
TRIGGER `<database>`.`<trigger_name>` AFTER UPDATE
ON `<database>`.`<table>`
FOR EACH ROW
BEGIN
IF(NEW.date_assigned IS NOT NULL) THEN
UPDATE <table> SET assigned = '1';
END; //Change here also.
$$
DELIMITER ;
答案 1 :(得分:0)
这是因为MySQL中的默认分隔符设置为;
。因此,第一行应该看起来像DELIMITER $$;
DELIMITER $$;
CREATE TRIGGER `<database>`.`<trigger_name>`
AFTER UPDATE ON `<database>`.`<table>`
FOR EACH ROW BEGIN
IF(NEW.date_assigned IS NOT NULL) THEN
UPDATE <table> SET assigned = '1';
END$$
DELIMITER ;