MySQL触发器If语句与查询比较

时间:2017-03-12 04:04:02

标签: mysql sql triggers

我可以在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这是一个示例数据集。 欢迎任何指导,谢谢。

1 个答案:

答案 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架构,它有很大帮助