【问题标题】:MySQL Trigger creation after update更新后创建 MySQL 触发器
【发布时间】:2016-03-01 00:40:23
【问题描述】:

我正在尝试在 MySQL 中创建一个触发器,以便自动从另一个表 Accounts 生成表 Operations 的条目。

这是我的桌子:

CREATE TABLE Accounts (
number INT CHECK (number >= 0),
balance REAL CHECK (balance >= 0),
PRIMARY KEY (number)
);

CREATE TABLE Operations (
date DATE,
number INT REFERENCES Accounts(number),
amount REAL,
PRIMARY KEY (date, number)
);

在下面,我尝试使用的触发器会生成 ERROR 1064 (42000):

CREATE TRIGGER OperationTrig
AFTER UPDATE OF balance ON Accounts
REFERENCING OLD ROW AS ooo NEW ROW AS nnn
FOR EACH ROW
WHEN(nnn.balance <> ooo.balance)
INSERT INTO Operations
VALUES(CURDATE(), nnn.number, nnn.balance - ooo.balance);

我哪里错了?

【问题讨论】:

标签: mysql database triggers


【解决方案1】:

认为WHEN 子句;我不认为它是有效的 MySQL 语法。 REFERENCING 子句同上。 (不过,两者都是有效的 Oracle/PostgreSQL。)

试试这个:

CREATE TRIGGER OperationTrig
  AFTER UPDATE ON Accounts
  FOR EACH ROW
BEGIN
  IF (NEW.balance <> OLD.balance) THEN
    INSERT INTO Operations
      VALUES(CURDATE(), NEW.number, NEW.balance - OLD.balance);
  END IF;
END;

【讨论】:

  • 它仍然显示:ERROR 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以获取在“OF balance ON Accounts”附近使用的正确语法
  • 尝试不使用OF 子句。我认为您不能将 MySQL 触发器绑定到特定列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 2016-09-19
相关资源
最近更新 更多