触发器中的语法不正确

时间:2012-06-06 18:48:50

标签: mysql sql

我有两个名为account and transaction的表。我需要在帐户插入数据时自动将数据插入到事务中。我在MySQL中创建了这个触发器。它给出了错误1064(语法错误)。有什么问题?

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

3 个答案:

答案 0 :(得分:1)

MySQL在BEGIN END块中与分号混淆,因此必须使用DELIMITER暂时强制MySQL使用不同的分隔符。
文档:http://dev.mysql.com/doc/refman/5.5/en/create-trigger.html

DELIMITER //
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 ;

您可能需要替换:

      INSERT INTO transaction VALUES (2,account.openDate,CURTIME(),account.deposit,account.accNo,"Teller","Cash","Deposit");

with:

      INSERT INTO transaction VALUES (2,NEW.openDate,CURTIME(),NEW.deposit,NEW.accNo,"Teller","Cash","Deposit");

答案 1 :(得分:1)

这是原始触发器

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

account.替换为NEW.(可选:将"替换为'

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 ;

答案 2 :(得分:0)

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;

好像你在“帐户”之后错过了一个表名。 (编辑:或帐户前的数据库名称,我不确定与哪个帐户相关)