我有一个简单的数据库类项目,我有实现这种逻辑的商店数据库:对于订单表中的每个客户,当客户确认他的订单时,我们有 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 的用户插入类型为购物车的新订单时,已经有一个购物车 - 此触发器不允许我这样做,如果我尝试为另一个用户添加购物车,那不会'没有购物车 - 这个触发器也不允许我这样做。