【问题标题】:Running the following query from my PhpMyadmin SQL tab从我的 PhpMyadmin SQL 选项卡运行以下查询
【发布时间】:2019-10-04 03:12:09
【问题描述】:

我正在我的 PhpMyadmin SQL 选项卡中运行以下查询:

CREATE TRIGGER trg_bansach ON bill AFTER INSERT AS
BEGIN
    UPDATE addbook
    SET Quality = Quality - (
        SELECT QualitySale
        FROM inserted 
        WHERE book_id = addbook.book_id
    )
    FROM addbook
    JOIN inserted ON addbook.book_id = inserted.book_id
END

但每次我收到此错误消息时:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在“FROM addbook”附近使用的正确语法 WHERE addbook.book_id = 插入的.book_id END' 在第 10 行

【问题讨论】:

  • 与 sql server 不同,mysql 使用 OLD 和 NEW 作为更新表。
  • 使用分隔符delimiter // CREATE TRIGGER trg_bansach ON bill AFTER INSERT AS BEGIN UPDATE addbook SET Quality = Quality - ( SELECT QualitySale FROM inserted WHERE book_id = addbook.book_id ) FROM addbook JOIN inserted ON addbook.book_id = inserted.book_id END; // delimiter ;

标签: mysql sql triggers phpmyadmin


【解决方案1】:

使用delimiter

DELIMITER //
CREATE TRIGGER trg_bansach ON bill AFTER INSERT AS
BEGIN
    UPDATE addbook
    SET Quality = Quality - (
        SELECT QualitySale
        FROM inserted 
        WHERE book_id = addbook.book_id
    )
    FROM addbook
    JOIN inserted ON addbook.book_id = inserted.book_id;
END
//
DELIMITER ;

【讨论】:

  • 谢谢,但我尝试使用 DELIMITER 它的宣布错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“BEGIN UPDATE addbook SET Quality = Quality - (SELECT Quality”附近使用正确的语法
  • DELIMITER // 在每行开始更新 addbook 的帐单上插入之前创建触发器 trg_bansach SET Quality = Quality - ( SELECT QualitySale FROM bill WHERE bill.book_id = addbook.book_id ) FROM addbook, bill WHERE addbook。 book_id = bill.book_id END; // 分隔符 ;
  • 我想用两张表 bill 和 addbook 创建触发器,当我插入 QualitySale 然后 Quality = Quality - QualitySale
  • 我希望第一个问题得到解决。您需要使用FOLLOWS TRIGGER_NAME。这是很好的解释。 mysqltutorial.org/mysql-triggers/…
猜你喜欢
  • 2019-12-23
  • 2013-09-28
  • 1970-01-01
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多