无法在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表中插入主键的主要内容,如果未能解决你的问题,请参考以下文章