如何避免MySQL中同一服务重复关联同一物料?
确保服务不重复关联同一物料的解决方案
这问题其实很常见,要解决这个需求,核心就是保证中间表Service_Material里的serv_ID和Mat_ID组合是唯一的,不能重复出现。这里有两种靠谱的实现方式:
方法1:设置联合主键
因为中间表的核心作用就是关联服务和物料,直接把serv_ID和Mat_ID设为联合主键是最直接的方式——数据库会自动约束这两个字段的组合必须唯一,同时还能保证它们非空(主键字段默认非空)。
执行以下SQL语句即可:
ALTER TABLE Service_Material ADD PRIMARY KEY (serv_ID, Mat_ID);
方法2:添加唯一约束
如果你的中间表已经有单独的主键(比如自增ID),不想修改主键结构,那可以给serv_ID和Mat_ID添加唯一约束,同样能达到防止重复关联的效果。
对应的SQL语句:
ALTER TABLE Service_Material ADD UNIQUE KEY unique_service_material (serv_ID, Mat_ID);
效果说明
不管用哪种方法,当你尝试插入重复的serv_ID+Mat_ID组合时,MySQL都会抛出类似Duplicate entry 'X-Y' for key 'xxx'的错误,阻止重复数据插入,从而确保每项服务不会重复关联同一物料。
内容的提问来源于stack exchange,提问作者hopieman
相关产品推荐
相关产品推荐

