插入语句与外键冲突

Posted

技术标签:

【中文标题】插入语句与外键冲突【英文标题】:Insert statement conflicted with foreign key 【发布时间】:2021-05-21 16:03:35 【问题描述】:

我是 SQL 新手,我正在尝试将值插入到我的表中。我目前正在使用 SQL Server Management Studio。

CREATE TABLE Materials 
(
   materials_ID int  NOT NULL PRIMARY KEY,
   floor_boards int NOT NULL,
   power_Points int NOT NULL,
   electrical_Wiring int NOT NULL,
   stairs_Pack int NOT NULL,
);

SELECT * FROM materials;

-- Creation of the JobCards Table
CREATE TABLE jobCards 
(
    customer_id VARCHAR(50) 
         FOREIGN KEY REFERENCES Customers(customer_id),
    jobCardID int NOT NULL PRIMARY KEY,
    materials_ID int 
         FOREIGN KEY REFERENCES Materials(materials_ID),
    jobType VARCHAR(150) NOT NULL,
    rate decimal NOT NULL,
    no_of_days int NOT NULL,
    city VARCHAR(150) NOT NULL,
);

-- Selectin statement output values in Jobcards
SELECT * FROM jobCards;

-- Insert statement allows data to be inputed to table
INSERT INTO jobCards (customer_id, jobCardID, materials_ID, jobType, rate, no_of_days, city)
VALUES
('0001', 11000, 1, 'Full Conversion', 120000, 7, 'Pretoria'),
('0002', 10478, 2, 'Semi Conversion', 1080, 2, 'Pretoria'),
('0003', 14253, 3, 'Floor Boarding', 900, 2, 'Pretoria'),
('0004', 11258, 4, 'Full Conversion', 120000, 8, 'Pretoria'),
('0005', 12058, 5, 'Semi Conversion', 1080, 3, 'Pretoria'),
('0006', 13697, 6, 'Full Conversion', 120000, 7, 'Pretoria'),
('0007', 10211, 7, 'Full Conversion', 120000, 7, 'Pretoria'),
('0008', 10471, 8, 'Semi Conversion', 1080, 2, 'Pretoria'),
('0009', 13521, 9, 'Semi Conversion', 1080, 3, 'Pretoria'),
('0010', 10102, 10, 'Floor Boarding', 900, 2, 'Pretoria');

我已插入有问题的表。每当我运行我的程序时,我都会收到此错误

INSERT 语句与 FOREIGN KEY 约束冲突 “FK__jobCards__materi__2F10007B”。数据库发生冲突 “DomingoRoofWorks”,表“dbo.Materials”,列“materials_ID”。

【问题讨论】:

首先填充Materials 主表。这正是 FOREIGN KEY 的工作原理。 您使用的是 ms sql server 而不是 mysql。请注意您使用的产品并相应地标记您的问题! 确保您在“材料”表中有这些 ID。除非这些值存在,否则它无法创建约束。 非常感谢您的帮助 :) 【参考方案1】:

请记住,外键是帮助我们将两个表链接在一起的字段。我们可以使用外键来引用另一个表中的主键。

在插入jobCards 表之前,您可以尝试在Materials 表中插入一些行。

这是一个例子:

-- After creating the tables:

INSERT INTO Materials (materials_ID, floor_boards, power_Points, electrical_Wiring, stairs_Pack) 
VALUES (1, --someIntValue, --someIntValue, --someIntValue, --someIntValue)

插入所有需要的行后,您可以将这些 ID 用作 jobCards 表中的外键。此时,可以毫无问题地执行此查询。

INSERT INTO jobCards (customer_id, jobCardID, materials_ID, jobType, rate, no_of_days, city)
VALUES
('0001', 11000, 1, 'Full Conversion', 120000, 7, 'Pretoria'),
('0002', 10478, 2, 'Semi Conversion', 1080, 2, 'Pretoria'),
('0003', 14253, 3, 'Floor Boarding', 900, 2, 'Pretoria'),
('0004', 11258, 4, 'Full Conversion', 120000, 8, 'Pretoria'),
('0005', 12058, 5, 'Semi Conversion', 1080, 3, 'Pretoria'),
('0006', 13697, 6, 'Full Conversion', 120000, 7, 'Pretoria'),
('0007', 10211, 7, 'Full Conversion', 120000, 7, 'Pretoria'),
('0008', 10471, 8, 'Semi Conversion', 1080, 2, 'Pretoria'),
('0009', 13521, 9, 'Semi Conversion', 1080, 3, 'Pretoria'),
('0010', 10102, 10, 'Floor Boarding', 900, 2, 'Pretoria');

【讨论】:

以上是关于插入语句与外键冲突的主要内容,如果未能解决你的问题,请参考以下文章

关系与外键约束

如何分清SQL数据库中的主键与外键

sql用命令创建主键与外键。

sql server的主键与外键问题

数据库中 主键与外键的区别?

如何编写检查以避免消息“INSERT语句与FOREIGN KEY约束冲突”?