SQL中UNIQUE约束与DEFAULT默认值的冲突疑问
关于DEFAULT约束与UNIQUE约束冲突的问题
首先直接说结论:你贴的这段SQL代码确实存在逻辑矛盾,实际使用时会触发报错。
具体原因拆解:
- 当插入数据时不指定
ID字段的值,数据库会自动给ID设为默认值100。 - 第一条这样的插入能成功,因为此时表中只有一个100,符合
UNIQUE(ID)的唯一约束。 - 但第二条再插入不指定
ID的记录时,数据库又会尝试把ID设为100,而UNIQUE约束不允许同一列出现重复值,这时候数据库会直接抛出唯一约束冲突错误,插入操作失败。
额外说明:
这段代码的设计本身就很不合理——ID作为唯一标识字段,正常逻辑要么用自增机制(比如MySQL的AUTO_INCREMENT、PostgreSQL的SERIAL)自动生成唯一值,要么要求插入时必须显式指定唯一的ID值。给ID设一个固定的默认值再加上唯一约束,完全是反常规的设计,毫无实际意义,还会频繁触发报错。
内容的提问来源于stack exchange,提问作者Rohan Wagh
相关产品推荐
相关产品推荐

