创建表格:
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'附近使用的语法
答案 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.