创建表:
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服务器版本相对应的手册,以获得在第80.000行附近使用的正确语法
2条答案
按热度按时间li9yvcax1#
触发器中需要更新三件事:
答。需要添加
;
在你生命的尽头UPDATE
sql语句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
bvhaajcl2#
为了简单起见,不需要使用
begin..end
阻止或DELIMITER
只有一个语句的设置。顺便说一句,你好像把
MSSQL
(您可以使用dateadd()
功能和GO
结束块)和MySQL
,其中使用date_add()
以不同的顺序和风格作为论据(birth_date, interval 1 year)
,用作date_add(year,1,birth_date)
生产ERROR-1064
.防止得到
ERROR-1442
,使用BEFORE INSERT
触发器的格式如下new.
: