从我的 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 选项卡运行以下查询的主要内容,如果未能解决你的问题,请参考以下文章