SQL执行报错[1061]:重复键名'book_lending'问题求助
解决MySQL创建表时的重复键名错误(1061)
错误原因
你遇到的SQL错误[1061]是因为重复使用了同一个外键约束名。在三个外键声明中,你都将约束名设为book_lending,而MySQL要求每个数据库约束(外键、主键、唯一键等)必须拥有唯一名称,重复命名会触发该错误。
另外,你的列定义顺序逻辑不够清晰,建议先声明所有列,再集中定义约束。
修正后的SQL代码
create table book_lending( book_id int, branch_id int, card_no int, date_out date, due_date date, primary key(book_id, branch_id, card_no), -- 为每个外键指定唯一约束名 foreign key fk_book_lending_book(book_id) references book(book_id) on delete cascade, foreign key fk_book_lending_branch(branch_id) references library_prog(branch) on delete cascade, foreign key fk_book_lending_card(card_no) references cards(card_no) on delete cascade );
补充说明
- 如果你不想手动命名外键,也可以省略约束名,让MySQL自动生成唯一的约束名称,示例:
foreign key(book_id) references book(book_id) on delete cascade
这种写法同样可以解决重复键名的问题,不过显式命名约束更便于后续维护(比如修改或删除约束时能精准定位)。
内容的提问来源于stack exchange,提问作者prajwal
相关产品推荐
相关产品推荐

