如何添加Name与DOB联合唯一约束限制重复数据入库?
解决Name与DOB组合唯一的约束实现问题
步骤1:先清理表中已存在的重复数据
你的表中已经存在Name和DOB组合重复的记录(Tony + 18/09/1980),直接添加唯一约束会失败,必须先删除重复项。
假设你要保留每条重复组合中的第一条记录,可执行以下SQL(以SQL Server为例):
WITH DuplicateRecords AS ( SELECT Name, DOB, ROW_NUMBER() OVER (PARTITION BY Name, DOB ORDER BY (SELECT NULL)) AS RowNum FROM dbo.lecturer ) DELETE FROM DuplicateRecords WHERE RowNum > 1;
这段SQL会给每个Name+DOB组合的记录编号,只保留编号为1的记录,删除其余重复项。
步骤2:添加组合唯一约束
清理完重复数据后,执行你原来的SQL语句即可添加约束:
ALTER TABLE dbo.lecturer ADD CONSTRAINT unique_name_dob UNIQUE(Name, DOB);
添加成功后,后续如果插入或更新数据时出现Name和DOB完全重复的情况,数据库会直接拦截并抛出错误。
验证效果
此时你再插入示例中的数据:
- Tony 18/09/1980 maths:正常入库
- sony 18/09/1980 english:正常入库
- Tony 19/01/1990 maths:正常入库
- Tony 18/09/1980 science:会被数据库拦截(因为Name+DOB组合已存在)
- halo 17/6/1970 science:正常入库
完全符合你要求的“允许Name重复,但同一Name对应的DOB不能重复”的规则。
内容的提问来源于stack exchange,提问作者pylearner
相关产品推荐
相关产品推荐

