MySQL上的MySQL触发器

时间:2011-12-30 18:07:37

标签: mysql triggers mysql-error-1064

我有几个领域的桌子。一个字段是“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。我查看了代码,看起来这是一个语法错误。那么我犯了什么语法错误,这甚至是正确的“语法”?

2 个答案:

答案 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 ;