SQL-无法添加或更新子行:外键约束失败

发布于 2025-01-30 19:26:19 字数 1550 浏览 1 评论 0原文

我不断遇到错误:

无法添加或更新子行:外键约束失败 (MORWORK预订,约束bookingss_ibfk_1外键 (customersid)参考客户customersid))

我花了一段时间研究,因为这是学校作业的分开,似乎无法解决问题。

这是我的SQL代码:

USE myWork ;

DROP TABLE IF EXISTS Bookingss ;
DROP TABLE IF EXISTS Customers ;

CREATE TABLE myWork.Customers 
(
        CustomersID     INT NOT NULL AUTO_INCREMENT,
        Surname         CHAR(30) NOT NULL ,
        FirstName       CHAR(30) NOT NULL ,
        Title           CHAR(10),
        DOB             DATE,
        HouseNumber     INT,
        StreetName      CHAR(30),
        Town            CHAR(30),
        PostCode        CHAR(9),
        Telephone       INT,
        
        PRIMARY KEY (CustomersID)
) ;

CREATE TABLE myWork.Bookingss
(
        BookingsID       INT NOT NULL AUTO_INCREMENT,
        CustomersID      INT NOT NULL,
        AdultsBooked     INT NOT NULL,
        ChildrenBooked   INT NOT NULL,
        Check_In         DATE,
        Check_Out        DATE,
        PRIMARY KEY (BookingsID),
        FOREIGN KEY (CustomersID) 
            REFERENCES myWork.Customers (CustomersID)
) ;


SHOW TABLES ;


INSERT INTO myWork.Bookingss ( CustomersID,   AdultsBooked , ChildrenBooked , Check_In , Check_Out )
VALUES ("1", "2", "3", "2022-04-10", "2022-04-13"  ) ;


INSERT INTO myWork.Customers ( Surname , FirstName , Title , DOB )
VALUES ( "smith" , "ryan" , "Mr" , "1998-02-16" ) ;

SELECT * FROM Customers , Bookingss;

I keep getting the error:

Cannot add or update a child row: a foreign key constraint fails
(myWork.Bookingss, CONSTRAINT Bookingss_ibfk_1 FOREIGN KEY
(CustomersID) REFERENCES Customers (CustomersID))

I have spent a while researching as this is apart of a school assignment and can not seem to resolve the problem.

Here is my SQL code:

USE myWork ;

DROP TABLE IF EXISTS Bookingss ;
DROP TABLE IF EXISTS Customers ;

CREATE TABLE myWork.Customers 
(
        CustomersID     INT NOT NULL AUTO_INCREMENT,
        Surname         CHAR(30) NOT NULL ,
        FirstName       CHAR(30) NOT NULL ,
        Title           CHAR(10),
        DOB             DATE,
        HouseNumber     INT,
        StreetName      CHAR(30),
        Town            CHAR(30),
        PostCode        CHAR(9),
        Telephone       INT,
        
        PRIMARY KEY (CustomersID)
) ;

CREATE TABLE myWork.Bookingss
(
        BookingsID       INT NOT NULL AUTO_INCREMENT,
        CustomersID      INT NOT NULL,
        AdultsBooked     INT NOT NULL,
        ChildrenBooked   INT NOT NULL,
        Check_In         DATE,
        Check_Out        DATE,
        PRIMARY KEY (BookingsID),
        FOREIGN KEY (CustomersID) 
            REFERENCES myWork.Customers (CustomersID)
) ;


SHOW TABLES ;


INSERT INTO myWork.Bookingss ( CustomersID,   AdultsBooked , ChildrenBooked , Check_In , Check_Out )
VALUES ("1", "2", "3", "2022-04-10", "2022-04-13"  ) ;


INSERT INTO myWork.Customers ( Surname , FirstName , Title , DOB )
VALUES ( "smith" , "ryan" , "Mr" , "1998-02-16" ) ;

SELECT * FROM Customers , Bookingss;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

彩扇题诗 2025-02-06 19:26:19

您犯了错误的命令,要克服一些挑战。您正在尝试首先插入预订,并且使用ID供当时客户表中尚不存在的客户ID。

您必须先插入客户,然后使用客户的ID插入客户的预订(使用他的ID)。

还有第一个挑战。客户ID是自动增量字段。将客户插入表格时,您将不知道ID。

您将必须获取客户并使用该客户的ID来为客户插入预订。您如何获取客户?用特定名称姓氏和名字选择客户不是正确的选择,我在表定义中看到的任何其他字段(或字段组成)也不是一个不错的选择。

您需要进一步考虑一个好的解决方案。我可以告诉您几种选择。但是适当的解决方案取决于您的作业/上下文。

顺便说一句,最后一个选择子句可能无法提供您期望的结果。您正在生产笛卡尔产品(第一行的每一行都有第二行的每一行)。您可能想要的是连接,您可以将第一张表与第二个表相应地链接(例如,使用主键和外键)。

You got the order wrong and some challenges to overcome. You are trying to insert a booking first, and this with an id for a customer that does not yet exist in the customer table at that moment.

You have to insert the customer first, then use the customer's id to insert the booking for the customer (using his id).

And there is the first challenge. The customer id is an auto increment field. You would not know the id when you insert a customer in the table.

You would have to fetch the customer and use the id of that customer to insert a booking for the customer. How do you fetch the customer? Selecting the customer with a specific name surname and first name is not a correct choice, any other field (or composition of fields) that I see in the table definition is not a good choice neither.

You'd need to think further about a good solution. There are several options I could tell you about. But the appropriate solution depends on your assignment/context.

By the way, the last select clause may not deliver the result you expect. You are producing a cartesian product (every row of the first table with every row of the second table). What you probably want is a JOIN where you link the first table with the second table accordingly (e.g. using the primary key and the foreign key).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文