首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合键为空,并且插入时约束失败

组合键为空,并且插入时约束失败
EN

Stack Overflow用户
提问于 2018-04-23 22:32:00
回答 1查看 33关注 0票数 0

在将我的数据插入到我的数据库的代码中时出现错误。我想让EventStaff有一个由StaffID.EventID组成的主键,如下图所示。我看不到我做错了什么,因为StaffID中的表是用TypeID填充的。我试图创建两个不同表的组合键,这是错误的方式吗?我使用了it>的图表参考。

代码语言:javascript
复制
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`db`.`EventStaff`, CONSTRAINT `fStaff1` FOREIGN KEY (`StaffID`) REFERENCES `Staff` (`StaffID`))

这是数据库的代码

代码语言:javascript
复制
CREATE TABLE  EventType (
TypeID INT NOT NULL,
Description VARCHAR(200) NULL,
CONSTRAINT pEventType PRIMARY KEY (TypeID)
);
CREATE TABLE  Staff (
StaffID INT NOT NULL,
CONSTRAINT pStaff PRIMARY KEY (StaffID)
);

CREATE TABLE  Event (
EventID INT NOT NULL,
Description VARCHAR(500) NULL,
Name VARCHAR(100) NULL,
DateStart DATE NULL,
DateEnd DATE NULL,
TimeStart TIME NULL,
TimeEnd TIME NULL,
TypeID INT NULL,
ClientID INT NULL,
NoBands BOOLEAN NOT NULL,
MaxFoodStall INT NULL,
CONSTRAINT pEvent PRIMARY KEY (EventID),
CONSTRAINT fType1 FOREIGN KEY (TypeID) REFERENCES  EventType (TypeID),
);

CREATE TABLE  EventStaff (
StaffID int NOT NULL,
EventID int NOT NULL,
Role VARCHAR(45) NULL,
PRIMARY KEY (StaffID, EventID),
CONSTRAINT fStaff1 FOREIGN KEY (StaffID) REFERENCES  Staff (StaffID),
CONSTRAINT FEvent1 FOREIGN KEY (EventID) REFERENCES  Event (EventID)
);

这是插入物

代码语言:javascript
复制
insert into EventType (TypeID, Description) values (1, 'Intuitive attitude-oriented hierarchy');
insert into EventType (TypeID, Description) values (2, 'Mandatory executive concept');

insert into Staff (StaffID) values (1);
insert into Staff (StaffID) values (2);

 insert into Event (EventID, Description , DateStart, DateEnd, TimeStart, TimeEnd, NoBands, MaxFoodStall, Name) values (1, 'Cloned 6th generation pricing structure', '2018-03-13', '2018-07-20', '11:18 PM', '4:58 PM', false, 17, 'Swaniawski-Ankunding');
insert into Event (EventID, Description , DateStart, DateEnd, TimeStart, TimeEnd, NoBands, MaxFoodStall, Name) values (2, 'Ameliorated mission-critical throughput', '2017-10-11', '2019-01-05', '10:44 AM', '8:26 PM', true, 4, 'Langworth-Ferry');

  insert into EventStaff (Role) values ('Editor');
 insert into EventStaff (Role) values ('Budget/Accounting Analyst IV');

https://image.ibb.co/jwaxRx/problem.png

EN

回答 1

Stack Overflow用户

发布于 2018-04-23 22:54:39

您发布到此问题的代码有拼写错误,甚至不能按原样运行。一旦我修复了这些错误,我就能够重现你的外键错误了。这个问题实际上是由最后两个插入引起的:

代码语言:javascript
复制
INSERT INTO EventStaff (Role) VALUES ('Editor');
INSERT INTO EventStaff (Role) VALUES ('Budget/Accounting Analyst IV');

您没有为StaffIDEventID指定值,并且这些列已标记为不可为空。它们是外键,如果您没有将这些列标记为不可为空,那么插入NULL实际上是可以的。以下是消除此错误的一种方法:

代码语言:javascript
复制
INSERT INTO EventStaff (Role, StaffID, EventID)
    VALUES ('Editor', 1, 1);
INSERT INTO EventStaff (Role, StaffID, EventID)
    VALUES ('Budget/Accounting Analyst IV', 2, 2);

我不知道您打算插入什么值,但上面是一种方法。

请注意,在Event表的插入中,没有为TypeID列指定值,该列也是一个外键。但是,在本例中,您已将该列标记为可空,因此MySQL接受它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49983660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档