【问题标题】:MySQL 5.6 Foreign Key Error MessageMySQL 5.6 外键错误信息
【发布时间】:2017-11-27 15:38:38
【问题描述】:

当我尝试在 SQLFiddle 中运行这段代码时出现此错误。它使用的是 MySQL 5.6。

无法添加或更新子行:外键约束失败(db_9_f9acae.order_items, CONSTRAINT order_items_ibfk_1 FOREIGN KEY (Donut_Order_ID) REFERENCES custorder (Donut_Order_ID))

我的代码如下所示:

CREATE TABLE Customer (
  Customer_ID INTEGER PRIMARY KEY AUTO_INCREMENT,
  CustFirstName VARCHAR(50) NOT NULL,
  CustLastName VARCHAR(50) NOT NULL,
  Address VARCHAR(50) NOT NULL,
  AptNum VARCHAR(50),
  City VARCHAR(50) NOT NULL,
  State VARCHAR(13) NOT NULL,
  Zip VARCHAR(15) NOT NULL,
  HomePhn VARCHAR(20),
  MobPhn VARCHAR(20),
  OthPhn VARCHAR(20) 
);

CREATE TABLE Donut (
  Donut_ID INTEGER PRIMARY KEY,
  Donut_Name VARCHAR(255) NOT NULL,
  Donut_Description VARCHAR(255) NOT NULL,
  Donut_Price FLOAT NOT NULL
);

CREATE TABLE CustOrder (
  Donut_Order_ID INTEGER PRIMARY KEY,
  Date DATE NOT NULL,
  Notes VARCHAR(255) NOT NULL,
  Customer_ID INTEGER,
  FOREIGN KEY (Customer_ID) REFERENCES Customer (Customer_ID)
);

CREATE TABLE Order_Items (
  Donut_Order_ID INTEGER NOT NULL,
  Donut_ID INTEGER NOT NULL,
  Qty INTEGER NOT NULL,
  PRIMARY KEY (Donut_Order_ID, Donut_ID),
  FOREIGN KEY (Donut_Order_ID) REFERENCES CustOrder (Donut_Order_ID),
  FOREIGN KEY (Donut_ID) REFERENCES Donut (Donut_ID)
);

CREATE VIEW CustInfo AS 
SELECT CONCAT(CustFirstName,' ', CustLastName) AS CustFullName,
 Customer_ID,
 Address,
 AptNum,
 City,
 State,
 Zip,
 HomePhn,
 MobPhn,
 OthPhn
 FROM Customer;

CREATE INDEX DonutIndex ON Donut (Donut_Name);

INSERT INTO Customer VALUES 
(1, "John", "Glenn", 1, NULL, "Kennedy Space Center", "FL", "32899", "(321) 867-5000", NULL, NULL), 
(2, "Theodore", "Von Karman", "4800 Oak Dr", "Jet Propulsion Laboratory", "Pasadena", "CA", "91109", "(818) 354-4321", NULL, NULL),
(3, "Margaret", "Hamilton", "555 Technology Square", "Charles Stark Draper Laboratory", "Cambridge", "MA", "02139", "(617) 258-1000", "(123)456-7890", NULL);

INSERT INTO Donut
VALUES
(1, 'Plain' , 'Plain Donut' , 1.50),
(2, 'Glazed' , 'Glazed Donut' , 1.75),
(3, 'Cinnamon' , 'Cinnamon Donut' , 1.75),
(4, 'Chocolate' , 'Chocolate Donut' , 1.75),
(5, 'Sprinkle' , 'Sprinkle Donut' , 1.75),
(6, 'Gluten-Free' , 'Gluten-Free Donut' , 2.00);


INSERT INTO Order_Items VALUES
(2 , 4 , 3),
(3, 2, 1);

INSERT INTO CustOrder VALUES
('1', '11-24-2017', NULL, '1'),
('2', '11-25-2017', NULL, '2');

这是我第一次使用任何与 SQL 相关的东西,并尝试参考 MySQL 文档,但不知道我做错了什么。直到添加底部的 2 个 INSERT INTO 语句后,该错误才会出现。任何帮助将不胜感激。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您收到此错误是因为您尝试在引用表中缺少引用的表中插入数据集,例如在 Order_Items 中您尝试将 custorder 表与 Donut_Order_ID 2 和 @987654326 链接@ 但它是空的

    所以首先填写您的custorder,然后链接到您的表格

    INSERT INTO CustOrder VALUES
    ('1', '11-24-2017', NULL, '1'),
    ('2', '11-25-2017', NULL, '2');
    
    INSERT INTO Order_Items VALUES
    (2 , 4 , 3),
    (3, 2, 1);
    

    我还看到CustOrder 中没有针对Donut_Order_ID = 3 的引用,但在Order_Items 数据中,您试图链接此缺失的引用,这将再次给您错误

    demo

    【讨论】:

    • Khalid,我想尝试更好地理解您与我交流的内容。查看我们的代码,我看到您创建了一个表,然后立即填充它,然后继续操作,直到填充了所有 4 个表。而我正在做的是创建 4 个表,然后尝试填充它们。我是否正确假设我的问题在于 SQL 试图引用运行时不存在的数据点?
    • @Dylan Fiddle 只是一个例子,重点是您想要在Order_Items 中维护的关系应该存在于您将CustOrder 链接到Order_Items 时为空的情况。相反,首先填写您的CustOrder 表,然后将其与Order_Items 链接,我希望它会进一步澄清您
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2010-12-21
    • 2010-10-23
    • 2013-11-15
    • 2014-09-10
    相关资源
    最近更新 更多