从我的 PhpMyadmin SQL 选项卡运行以下查询

Posted

技术标签:

【中文标题】从我的 PhpMyadmin SQL 选项卡运行以下查询【英文标题】:Running the following query from my PhpMyadmin SQL tab 【发布时间】: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 ; 【参考方案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/…

以上是关于从我的 PhpMyadmin SQL 选项卡运行以下查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 wamp 上设置 phpmyadmin 的设计器选项卡

选项卡分隔文件到 SQL 查询(批量更新)

phpmyadmin 没有“用户”选项卡

PhpMyAdmin 导出程序结果

phpmyadmin 中没有权限

从 MAMP 的 phpmyadmin 中恢复 SQL 代码