Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 触发器中的语法不正确_Mysql_Sql - Fatal编程技术网

Mysql 触发器中的语法不正确

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

我有两张表,分别是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,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 ;