无法在mysql表中插入主键

Posted

技术标签:

【中文标题】无法在mysql表中插入主键【英文标题】:unable to insert primary key in mysql table 【发布时间】:2020-09-03 16:30:53 【问题描述】:

我是一个完整的 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_db.customer, CONSTRAINT customer_booking_fk FOREIGN KEY (booking_booking_id) REFERENCES booking (@987654331 @)) 我不知道为什么,因为 customer_id 是主键,Booking.customer_id 是外键,我不知道为什么 booking_id 包含在此错误中 这也是我的实体在数据建模器中的外观:

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

你不能插入这样的值

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

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

外键也意味着您必须在预订时存储这样的 id,然后才能在客户中添加一行

最后你还有一个问题,因为只有当你有 customer_id 时才能添加预订,反之亦然,所以摆脱客户的约束

【讨论】:

你的意思是我应该去掉 customer 中的 booking_id 外键?哪个约束? 是的,因为 1 个客户可以有多个预订,但 1 个预订只能有一个客户。

以上是关于无法在mysql表中插入主键的主要内容,如果未能解决你的问题,请参考以下文章

mysql表中,表的外键关联自身主键,为啥插入不了数据?

PHP mySQL - 将新记录插入表中,主键自动递增

如何在java jframe表中插入递增的主键和外键?

MySQL 主键冲突,无法插入数据

mybatis主键返回的实现

无法在 MySQL 表中插入 ♥ 字符