创建award表并插入数据时触发UNIQUE约束失败问题排查
问题排查与解决
错误原因分析
- 主键定义语法错误:创建表时
PRIMARY KEY (award)是无效写法——award是表名而非列名,数据库无法识别这个主键规则。 - 唯一约束冲突:由于主键定义错误,部分数据库会默认将非空的
award_id列隐式设置为唯一约束(或主键),但你插入的数据中award_id存在重复值(比如多条'oscars'),触发了UNIQUE约束校验失败。
修正后的SQL代码
1. 创建表(修复主键与语法问题)
CREATE TABLE award ( award_id varchar(50) NOT NULL, year int NOT NULL, category varchar(50) NOT NULL, movie_id CHAR(3) NOT NULL, star_id CHAR(3) NOT NULL, PRIMARY KEY (award_id, year, category), -- 设置复合主键,确保每条获奖记录唯一 FOREIGN KEY (movie_id) REFERENCES movie (movie_id), FOREIGN KEY (star_id) REFERENCES star (star_id) );
说明:同一个奖项(如oscars)在不同年份、不同类别下的记录是唯一的,因此用award_id + year + category作为复合主键,符合业务逻辑。
2. 插入数据(原数据无需修改)
INSERT INTO award (award_id, year, category, movie_id, star_id) VALUES ('oscars', 2016, 'best_picture', 108, 210), ('oscars', 2019, 'best_director', 109, 211), ('oscars', 2010, 'best_actress', 110, 212), ('oscars', 2021, 'best_actor', 111, 213), ('cannes', 2011, 'best_actress', 112, 214), ('cannes', 2000, 'best_actor', 113, 215);
内容的提问来源于stack exchange,提问作者diabolicalsox
相关产品推荐
相关产品推荐

