SQL重复触发器

时间:2013-03-24 17:08:18

标签: mysql sql triggers mysql-workbench

我有数据库类的简单项目我有商店数据库实现这样的逻辑:对于订单表中的每个客户,当客户确认他的订单时,我们订购了type ='CART'他的订单将其类型更改为'ORDER'和我们为客户创建了一个新的CART。 现在我想编写触发器,允许我控制每个客户只有一个CART。

我写的是这样的

DELIMITER $$
USE `newshop`$$
CREATE
DEFINER=`root`@`localhost`
TRIGGER `newshop`.`cart_check`
BEFORE INSERT ON `newshop`.`order`
FOR EACH ROW
BEGIN
DECLARE msg VARCHAR(255);
DECLARE count_pn INTEGER;
SELECT count(*) INTO count_pn FROM newshop.order
    where newshop.order.type = NEW.type 
    and NEW.user_id = newshop.order.user_id
    and NEW.type = 'CART' 
    or NEW.type = 'cart' 
    LIMIT 1;
if count_pn > 0 THEN
BEGIN
    set msg = 'Oh no';
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg;
end;
ELSE
BEGIN
    set msg = 'Oh yeah';
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg;
END;
END IF;
END$$

然后当我尝试插入带有id为1的用户的类型为cart的新订单时,已经有一个购物车 - 这个触发器不允许我这样做,如果我尝试为另一个用户添加购物车,没有购物车 - 这个触发器也不允许我这样做。

1 个答案:

答案 0 :(得分:1)

在其他情况下,您还有 SIGNAL SQLSTATE = 45000 ,这是未处理的异常,它会导致返回失败。


SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg;