【问题标题】:I have come across an error in SQL and cannot fix this foreign key error. See desc for more information我在 SQL 中遇到错误,无法修复此外键错误。有关详细信息,请参阅描述
【发布时间】:2020-08-02 22:36:32
【问题描述】:

我一直收到错误代码 1452,我正在尝试将键添加到表中以保持数据在其他表中的唯一性和可用性。我已经创建了表格并且可以使用已经输入的信息,但是我想正确地制作数据库,所以我正在尝试使用密钥。请参考下面的代码。

CREATE TABLE CUSTOMERS (
    CustID varchar(50) NOT NULL,
    Client_Name varchar(50) NOT NULL,
    Client_Address varchar(80) NOT NULL,
    PRIMARY KEY (CustID)
);


CREATE TABLE ORDERS (
    Order_ID VARCHAR(10) NOT NULL,
    Client_NameID varchar(50) NOT NULL,
    Dates varchar(10) NOT NULL,
    PRIMARY KEY (Order_ID),
    FOREIGN KEY (Client_NameID) REFERENCES CUSTOMERS(CustID)
);

SELECT * FROM CUSTOMERS;
SELECT * FROM ORDERS;

DESCRIBE Orders; /*Used to display the Table*/

ALTER TABLE ORDERS ADD Dates VARCHAR(10); /*Used to add columns into the table*/

ALTER TABLE ORDERS DROP COLUMN Date; /*Used to remove column from the table*/

INSERT INTO CUSTOMERS (CustID, Client_Name, Client_Address) VALUES 
    ('168', 'Coventry Building Services', 'Units 2-4, Binley Industrial Estate, CV3 2WL'), /*Used to insert values into the columns*/
    ('527', 'Allied Construction LTD', '34, Lythalls La Industrial Estate, NG18 5AH'),
    ('169', 'Ricoh Builds Ltd', 'Unit 12, Stoneleigh Park, CV8 2UV'),
    ('32', 'British Embassy in Tehran', '198 Ferdowski Avenue Tehran 11316-91144 Iran');

INSERT INTO ORDERS (Order_ID, Client_NameID, Dates) VALUES 
    ('CON-2237', 'Coventry Building Services', '2014-12-14'),
    ('CON-3664', 'Allied Construction LTD', '2015-01-16'),
    ('CON-2356', 'Ricoh Builds Ltd', '2015-02-12'),
    ('CON-1234', 'British Embassy in Tehran', '2015-04-16');


DELETE FROM ORDERS WHERE Client_Name='Coventry Building Services'; /*Used to delete specific 
data from the specific row and column wherever applicable*/

DROP TABLE CUSTOMERS;
DROP TABLE ORDERS;

以下是我尝试使用的表格,如果需要,它们几乎都有一个将它们链接在一起的键

The CustomerS Table which only includes a Primary Key

The Orders Table which includes a Primary and Foreign key

【问题讨论】:

  • 请将您的 RDBMS 的标签添加到您的问题中。除非您知道您指的是哪个数据库,否则“错误代码 1452”没有多大意义。您可以删除“数据库”标签。
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停整体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你的期望和原因。
  • 请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称和站点:stackoverflow.com & 标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。 PS一旦您将输入数据作为表格初始化代码提供,您就不需要图像。仅将图像用于无法表达为文本或扩充文本的内容。

标签: sql database foreign-keys sql-insert create-table


【解决方案1】:

问题在于将inserts 放入表orders. Your foreign key on Client_NameIDreferencesCUSTOMERS(CustID), but you are giving the CUSTOMERS(Client_Name)

你可能想要:

INSERT INTO ORDERS (Order_ID, Client_NameID, Dates) VALUES
    ('CON-2237', 'CON-2237', '2014-12-14');
    ('CON-3664', 'CON-3664', '2015-01-16');
    ('CON-2356', 'CON-2356', '2015-02-12');
    ('CON-1234', 'CON-1234', '2015-04-16');

注意事项:

  • 您可以通过传递多个值元组在单个查询中执行所有inserts,如上所示

  • 不要将日期存储为字符串;相反,请使用为此目的而存在的date 数据类型。我更改了查询,使其使用正确的日期文字,这将适合 date

  • 不清楚为什么要对客户和订单的主键使用相同的值 - 对我来说,这让事情变得更难理解。我建议只使用自动递增的主键

【讨论】:

  • 好的,我试试看效果如何
  • 已将值更改为我希望使用的数据。运行此代码仍然给我同样的错误(错误 1452)
猜你喜欢
  • 2017-06-30
  • 2018-08-20
  • 2013-04-05
  • 2014-03-15
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多