我的数据库有问题,在我的数据库中创建了这样的交叉表:
CREATE TABLE Spacial_Tasks (
Task_Number Int (11),
FK_Member Int (11),
CONSTRAINT PK_Special_Tasks PRIMARY KEY (Task_Number, FK_Member),
FOREIGN KEY (FK_Memeber) REFERENCES member(Id)
);
现在,我希望此表的设计方式使得例如我团队的每个主持人都可以从“ Task_Number”获得一定的编号,而“ FK_Member”是所有成员主表的ID。
现在,当我在表中放入新数据集时,node.js(或mysql模块)会引发错误:
Error: ER_DUP_ENTRY: Duplicate entry '0-1' for key 'PRIMARY'
尽管发生此错误,但新数据集已被我的数据库接受。
我做错了什么还是可以某种方式关闭此消息?
答案 0 :(得分:1)
我将尝试将评论中的内容汇总在一起。
PRIMARY KEY是表中每一行的唯一值。
在您的示例中,您从两个值PRIMARY KEY
构造了(Task_Number, FK_Member)
。
FK_Member
-是唯一的用户ID,Task_Number
是每个任务的预定义值集。
现在,当您尝试为ID = 155的某些用户插入3个主持人(0)任务时。
Mysql收到要保存的主键:
0155 - first record will be saved as for now its unique
0155 - gives primary key error as value is the same from row number 1
0155 - same error.
要解决此问题,您只需制作不同的主键,通常是其auto_increment列
CREATE TABLE Spacial_Tasks (
Task_Id Int (11) UNSIGNED AUTO_INCREMENT,
Task_Number Int (11),
FK_Member Int (11),
PRIMARY KEY (Task_Id),
FOREIGN KEY (FK_Memeber) REFERENCES member(Id)
);
希望这会有所帮助。