Mysql 触发器中的语法不正确
我有两张表,分别是account和transaction。当账户插入数据时,我需要将数据自动插入交易。我在MySQL中创建了这个触发器。它给出了错误1064(语法错误)。有什么问题Mysql 触发器中的语法不正确,mysql,sql,Mysql,Sql,我有两张表,分别是account和transaction。当账户插入数据时,我需要将数据自动插入交易。我在MySQL中创建了这个触发器。它给出了错误1064(语法错误)。有什么问题 CREATE TRIGGER upTransaction AFTER INSERT ON account FOR EACH ROW BEGIN INSERT INTO transaction VALUES (2,account.openDate,CURTIME(), account.deposit,acc
CREATE TRIGGER upTransaction AFTER INSERT ON account FOR EACH ROW
BEGIN
INSERT INTO transaction VALUES (2,account.openDate,CURTIME(),
account.deposit,account.accNo,
"Teller","Cash","Deposit");
END
MySQL在BEGIN-END块中与分号混淆,因此必须使用分隔符来临时强制MySQL使用不同的分隔符。
文件: 您可能需要替换:
INSERT INTO transaction VALUES (2,account.openDate,CURTIME(),account.deposit,account.accNo,"Teller","Cash","Deposit");
与:
INSERT INTO transaction VALUES (2,NEW.openDate,CURTIME(),NEW.deposit,NEW.accNo,"Teller","Cash","Deposit");
似乎在“account”之后缺少表名。(编辑:或帐户之前的数据库名称,我不确定帐户属于哪个帐户)这是您的原始触发器
CREATE TRIGGER upTransaction AFTER INSERT ON account FOR EACH ROW
BEGIN
INSERT INTO transaction VALUES (2,account.openDate,CURTIME(),
account.deposit,account.accNo,
"Teller","Cash","Deposit");
END
将帐户。
替换为新建。
(可选:将“
替换为”
)
我猜您更改了分隔符,对吗?您使用的是MySQL还是SQL Server?您的标记和语法似乎有冲突。是针对Microsoft SQL Server的,而不是MySQL。使用CREATE触发器时,数据库名称是可选的。
CREATE
TRIGGER `event_name` AFTER INSERT
ON `database`.`table`
FOR EACH ROW BEGIN
-- trigger body
-- this code is applied to every
-- inserted/updated/deleted row
END;
CREATE TRIGGER upTransaction AFTER INSERT ON account FOR EACH ROW
BEGIN
INSERT INTO transaction VALUES (2,account.openDate,CURTIME(),
account.deposit,account.accNo,
"Teller","Cash","Deposit");
END
DELIMITER $$
CREATE TRIGGER upTransaction AFTER INSERT ON account FOR EACH ROW
BEGIN
INSERT INTO transaction VALUES (2,NEW.openDate,CURTIME(),
NEW.deposit,NEW.accNo,
'Teller','Cash','Deposit');
END $$
DELIMITER ;