在MySQL Workbench创建购物车:如何阻止用户重复添加同一商品
解决购物车重复添加商品的问题
要实现同一用户无法重复添加同一商品,但不同用户可添加同一商品的需求,你可以从数据库约束和存储过程两个层面入手:
1. 给购物车表添加联合唯一约束
修改你的CART表,给USERID和LISTINGID设置联合唯一约束,让数据库直接拦截重复的插入操作:
CREATE TABLE CART ( USERID INT NOT NULL, LISTINGID INT NOT NULL, FOREIGN KEY(USERID) REFERENCES USERS(ID), FOREIGN KEY(LISTINGID) REFERENCES LISTING(ID), -- 联合唯一约束,确保同一用户的同一商品仅存一条记录 UNIQUE KEY unique_user_listing (USERID, LISTINGID) );
如果表已创建完成,也可以通过ALTER语句追加约束:
ALTER TABLE CART ADD CONSTRAINT unique_user_listing UNIQUE (USERID, LISTINGID);
2. 修改存储过程处理重复插入
调整存储过程,使用INSERT IGNORE来忽略重复插入的错误,避免程序抛出异常:
CREATE PROCEDURE ADDCART( IN displayname__ VARCHAR(32), IN listingID__ int ) BEGIN INSERT IGNORE INTO CART VALUES((SELECT ID FROM USERS WHERE DISPLAYNAME = displayname__), listingID__); END //
补充说明:
INSERT IGNORE会在触发唯一约束冲突时跳过插入,不会报错,适合无需额外提示用户的场景;- 若需要在重复插入时给用户反馈,可以改用
INSERT ... ON DUPLICATE KEY UPDATE(比如更新商品的加入时间戳),或者先查询记录是否存在再决定是否插入,但前者性能更优。
内容的提问来源于stack exchange,提问作者Adrian Freeman
相关产品推荐
相关产品推荐

