在MYSQL的INSERT过程中创建触发器,显示错误

时间:2018-09-29 08:04:48

标签: mysql sql triggers database-trigger

创建表格:

CREATE TABLE Persons (
    ID int NOT NULL AUTO_INCREMENT,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Birth_Date date,
    Review_Date date,
    PRIMARY KEY (ID)
);

在向该表中插入数据时,我想添加一个触发器,以将Review_Date列的值更新为从出生日期起1年。下面是我编写的触发器,它显示了一个错误。

CREATE TRIGGER tri_Test_Insert_Trigger 
AFTER INSERT 
ON persons
FOR Each row
BEGIN
    UPDATE persons
    SET review_date = dateadd(year,1,birth_date)
END
GO 
  

错误代码:1064。您的SQL语法有错误;检查   与您的MySQL服务器版本相对应的手册   在第8 0.000秒的'END GO'附近使用的语法

2 个答案:

答案 0 :(得分:3)

触发器中需要更新三件事:

a。需要在; sql的末尾添加UPDATE
b。在触发器的末尾删除GO,而改用DELIMITER
C。 dateadd需要更改为date_add

 DELIMITER $$
    CREATE TRIGGER tri_Test_Insert_Trigger 
    AFTER INSERT 
    ON persons
    FOR Each row
    BEGIN
        UPDATE persons
        SET review_date = date_add(year,1,birth_date); -- add ; here
    END$$
  DELIMITER ; -- remove GO and use DELIMITER instead

答案 1 :(得分:2)

为简单起见,无需仅对一条语句使用begin..end块或DELIMITER设置。

顺便说一下,您似乎对MSSQL(可以在其中使用dateadd()函数和GO来结束块)和MySQL(其中使用{ {1}}的参数顺序和样式与date_add()不同,用作(birth_date, interval 1 year)会产生date_add(year,1,birth_date)

为了防止获取ERROR-1064,请使用ERROR-1442触发器作为以下格式的前缀BEFORE INSERT

new.