无法在mysql表中插入主键

问题描述

我是sql的入门者,正在使用MysqL xampp服务器,其中有一个customers表和一个bookings表。我使用带有ddl的MysqL数据建模器来生成创建这些表的代码。 这是下面创建我的2个表的方式:

预订桌:

CREATE TABLE booking (
    booking_id             INTEGER NOT NULL,b_city                 VARCHAR(30),b_date                 DATETIME,departure_date         DATETIME,arrival_date           DATETIME,dep_time               DATETIME,arr_time               DATETIME,seat_type              VARCHAR(30),flight_cost            DOUBLE,total_cost             DOUBLE,booking_state          VARCHAR(2),deposit                DOUBLE,price_remenant         DOUBLE,customer_customer_id   VARCHAR(20) NOT NULL,flight_id              INTEGER,customer_customer_id1  VARCHAR(20) NOT NULL //I don't kNow why this is created again 
);

CREATE UNIQUE INDEX booking__idx ON
    booking (
        customer_customer_id
    ASC );

ALTER TABLE booking ADD CONSTRAINT booking_pk PRIMARY KEY ( booking_id );
ALTER TABLE booking
    ADD CONSTRAINT booking_customer_fk FOREIGN KEY ( customer_customer_id )
        REFERENCES customer ( customer_id );

ALTER TABLE booking
    ADD CONSTRAINT booking_customer_fkv2 FOREIGN KEY ( customer_customer_id1 )
        REFERENCES customer ( customer_id );

客户表:

CREATE TABLE customer (
    customer_id         VARCHAR(20) NOT NULL,first_name          VARCHAR(20),last_name           VARCHAR(30),booking_booking_id  INTEGER NOT NULL
);

CREATE UNIQUE INDEX customer__idx ON
    customer (
        booking_booking_id
    ASC );

ALTER TABLE customer ADD CONSTRAINT customer_pk PRIMARY KEY ( customer_id );

ALTER TABLE customer
    ADD CONSTRAINT customer_booking_fk FOREIGN KEY ( booking_booking_id )
        REFERENCES booking ( booking_id );

现在,每当我尝试通过键入内容MysqL xampp服务器中插入客户

INSERT INTO customer('customer_id')VALUE("1234"); 

我收到错误#1452-无法添加或更新子行:外键约束失败(airline_dbcustomer,CONSTRAINT customer_booking_fk外键(booking_booking_id )参考bookingbooking_id),我不知道为什么,因为customer_id是主键,而Booking.customer_id是外键,我也不知道为什么{{ 1}}包含在此错误中 这也是我的实体在数据建模器中的外观:

enter image description here

非常感谢您的帮助。

解决方法

您不能插入这种光晕

CREATE TABLE customer (
    customer_id         VARCHAR(20) NOT NULL,first_name          VARCHAR(20),last_name           VARCHAR(30),booking_booking_id  INTEGER NOT NULL
);

意味着您至少必须输入1个booking_id,该ID不能为NULL,但是您没有默认值

此外,外键意味着在向客户添加行之前,必须在预订时存储此类ID

最后一个问题是,只有在有customer_id的情况下才可以添加预订,反之亦然,因此请摆脱对customer的约束