Mysql 为什么我总是在“选择”附近得到“不正确的语法”。应为“Set”错误?
我正在触发我的数据库。在本例中,我正在经营一家书店,我有一个作者表和一个图书表。作者表包含作者的id、姓名、姓氏、出生日期和死亡日期。My books表包含图书id、作者id、零售价、出版日期和图书评级。我正试图创造一个触发器,在作者去世后,将任何评级低于6的书的价格翻倍,如果评级为6,则只需将价格提高50%。基本上,如果修改了authors表中的death date列,那么books表中的零售价格列也应该修改。这是我的代码:Mysql 为什么我总是在“选择”附近得到“不正确的语法”。应为“Set”错误?,mysql,sql,triggers,Mysql,Sql,Triggers,我正在触发我的数据库。在本例中,我正在经营一家书店,我有一个作者表和一个图书表。作者表包含作者的id、姓名、姓氏、出生日期和死亡日期。My books表包含图书id、作者id、零售价、出版日期和图书评级。我正试图创造一个触发器,在作者去世后,将任何评级低于6的书的价格翻倍,如果评级为6,则只需将价格提高50%。基本上,如果修改了authors表中的death date列,那么books表中的零售价格列也应该修改。这是我的代码: CREATE TRIGGER author_death on aut
CREATE TRIGGER author_death
on authors
AFTER UPDATE AS
BEGIN
IF UPDATE(death)
Begin
UPDATE books.retail_price
SELECT CASE
when rating > 6 then retial_price * 2
when rating = 6 then retail_price *1.5
END
但是,我的select用红色下划线,它在“select”附近给出了不正确的语法。期待集合。错误如何修复此问题?我相信MySQL IF语句需要关键字THEN和END IF,它们似乎缺失了
是打算更新所有书籍的零售价格,还是只更新某位作者的书籍?我在UPDATE语句中没有看到WHERE子句或任何其他条件逻辑
我怀疑您希望更新声明的格式为:
UPDATE mytable
SET pricecolumn = expr
WHERE authorcol = somevalue
表达式expr返回要指定的值
= mytable.myprice * CASE
WHEN mytable.myrating < 6 THEN 2.0
WHEN mytable.myrating = 6 THEN 1.5
ELSE 1.0
END
在更新中使用该表达式之前,可能需要在SELECT语句中测试该表达式
SELECT mytable.myrating
, mytable.myprice
, mytable.myprice * CASE
WHEN mytable.myrating < 6 THEN 2.0
WHEN mytable.myrating = 6 THEN 1.5
ELSE 1.0
END AS new_price
FROM mytable
WHERE authorcol = somevalue
实际上,您在所有方面的语法都有相当大的差距 首先,您希望为每位去世的作者执行一次书籍更新,因此需要使用行触发器 MySQL没有根据文档实现更新谓词。测试方法是使用空安全比较运算符,如果一个操作数为空,则返回false;如果两个操作数都为空,则返回true。如果任一操作数为null,则正则=运算符返回null 为了访问正在更新的记录中的列,MySQL提供旧的和新的伪记录,它们分别包含记录的原样和将来的原样。比较新旧列将告诉您该列是否已更改 想必,您希望更新该作者所有书籍的价格,而不是任何其他书籍的价格。因此,您需要根据作者ID进行更新,将books.author_ID与旧版或新版的作者ID进行匹配。我选择新的只是因为 最后,根据评级更新不同值的最简单方法是执行两次更新 她是我建议的代码:
CREATE TRIGGER author_death
AFTER UPDATE
ON authors
FOR EACH ROW
BEGIN
IF NOT (OLD.death <=> NEW.death)
THEN
UPDATE books
SET retail_price = retail_price * 2
WHERE rating < 6
AND author_id = NEW.id;
UPDATE books
SET retail_price = retail_price * 1.5
WHERE rating = 6
AND author_id = NEW.id;
END IF;
END;
在文档中查找更新语法。具有讽刺意味的是,这是一本书,我如何在触发器下插入它?也谢谢你的帮助。