我可以在5.6 MySQL环境中使用触发器的一点指导。我想创建一个触发器,如果找到具有相同速度的PC的较低价格,则停止更新。
架构是 产品(制造商,型号,类型) PC(型号,速度,内存,硬盘,价格) 笔记本电脑(型号,速度,内存,硬盘,屏幕,价格) 打印机(型号,颜色,类型,价格)
粗体是主键。
我最好的尝试是
delimiter //
create trigger trigger2 before update on pc
for each row
begin
if (new.price < (min(price) from pc where speed=new.speed))
then signal sqlstate '45000' set message_text = 'lower price found';
end if;
end;//
delimiter ;
但实际上我遇到了关于if条件的语法错误。 http://rextester.com/TJT52527这是一个示例数据集。 欢迎任何指导,谢谢。
答案 0 :(得分:0)
这是具有正确语法的触发器:
DELIMITER //
CREATE TRIGGER trigger2 BEFORE UPDATE ON pc FOR EACH ROW
BEGIN
IF (NEW.price < (SELECT MIN(price) FROM pc WHERE speed = NEW.speed)) THEN
signal sqlstate '45000' set message_text = 'lower price found';
END IF;
END //
DELIMITER ;
演示:
以更高的价格更新:
mysql> UPDATE pc SET price = 2000 WHERE speed = 2.20;
Query OK, 2 rows affected (0.03 sec)
Rows matched: 2 Changed: 2 Warnings: 0
以较低价格更新失败:
mysql> UPDATE pc SET price = 200 WHERE speed = 2.20;
ERROR 1644 (45000): lower price found
mysql>
PS:非常感谢SQL架构,它有很大帮助