我有两个MySQL表
CREATE TABLE IF NOT EXISTS `orders` (
`order_id` int(5) NOT NULL AUTO_INCREMENT,
`order_address` varchar(255) NOT NULL,
`order_paymentmethod` varchar(50) NOT NULL,
`coupon_code` varchar(50) NOT NULL,
`user_id` int(5) NOT NULL,
PRIMARY KEY (`order_id`),
KEY `fk_orderuser` (`user_id`),
KEY `fk_ordercoupon` (`coupon_code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
CREATE TABLE IF NOT EXISTS `coupons` (
`coupon_code` varchar(50) NOT NULL,
`coupon_discount` int(255) NOT NULL,
PRIMARY KEY (`coupon_code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
当从优惠券表中删除优惠券代码时,也删除优惠券相关的订单记录。我只想删除优惠券代码,而不会对表格订单产生任何影响
他们有什么解决方案吗?
此致
答案 0 :(得分:1)
这里有三个选项
请勿删除优惠券,使用默认= deleted
的其他布尔字段(例如true
),但要删除它时将其设置为false
(它实际上并没有删除它,但您可以使用此字段处理已删除的优惠券)。通过这种方式,您还可以跟踪使用优惠券启动的订单,该优惠券已被删除。
从coupon_code varchar(50) NOT NULL
(在订单表中)中删除 not null 约束,并将外键约束添加到ON DELETE SET NULL
。 *对于没有优惠券的订单,从一开始就将其设置为空。
使用已知的NULL模式。在您的数据库中创建一个虚拟优惠券(ZERO折扣),而不是删除优惠券,将此虚拟优惠券分配给不需要真正优惠券的订单。
*取决于“跟踪”要求,可能需要结合上述方法
答案 1 :(得分:1)
在这种情况下,您可以使用mysql触发器解决该问题。为优惠券表创建触发器
CREATE TRIGGER `coupons_before_delete` AFTER DELETE ON `coupons` FOR EACH ROW BEGIN
-- INSERT INTO add_inout_to_error_log(msg) VALUES(old.coupon_code);
DELETE FROM orders WHERE orders.coupon_code = old.coupon_code;
END
此代码中的 old.coupon_code
是当前已删除的优惠券代码。您可以访问已删除邮件