使用外键连接多个MySQL表
我在MySQL上有3个不同的表:使用外键连接多个MySQL表,mysql,sql,foreign-keys,insert-into,Mysql,Sql,Foreign Keys,Insert Into,我在MySQL上有3个不同的表: 客户 飞行 预订 在客户机上我有 名字 姓 身份证 航班号(来自航班表) 预订编号(来自预订表) 在航班上我有 ID(来自客户端) 航班号 公司 日期 关于预订我有 ID(来自客户端) 预订号码 酒店 登记日期 退房日期 在创建客户机之后,我希望将在航班和预订表上创建的内容链接到客户机上 因此,每个客户机都有一个ID,该ID也插入到航班和预订表中。我需要将Clients.ID行链接到航班和预订的行 外键可以这样做吗 我尝试将Clients.ID作
- 客户
- 飞行
- 预订
客户机上
我有
- 名字
- 姓
- 身份证
- 航班号(来自航班表)
- 预订编号(来自预订表)
航班上
我有
- ID(来自客户端)
- 航班号
- 公司
- 日期
预订
我有
- ID(来自客户端)
- 预订号码
- 酒店
- 登记日期
- 退房日期
Clients.ID
作为主键,将Flights.ID
和Booking.ID
作为外键,但使用INSERT-in
时,我得到:
#1452-无法添加或更新子行:外键约束失败
SQL查询为:
INSERT INTO clients (name, lastname, id) VALUES ('Jane', 'DOE', 123123123);
用于创建外键的SQL查询为:
ALTER TABLE clients ADD CONSTRAINT fk_flightid FOREIGN KEY (id) REFERENCES flights(id);` and
ALTER TABLE clients ADD CONSTRAINT fk_bookingid FOREIGN KEY (id) REFERENCES bookings(id);`
这是我第一次编写MySQL,如果我的解释有点混乱,很抱歉。您创建的约束使
client
成为flights
和bookings
的子表。因此,您无法创建新的客户机(需要先在另外两个表中创建父记录)
在数据库设计中,client
应该是父表,而flights
和bookings
应该是子表
考虑:
ALTER TABLE flights
ADD CONSTRAINT fk_flights_client_id
FOREIGN KEY (id) REFERENCES client(id);
ALTER TABLE bookings
ADD CONSTRAINT fk_bookings_client_id
FOREIGN KEY (id) REFERENCES client(id);
其他备注:
和航班号(来自航班表)
列在预订号(来自预订表)
表中没有意义。这些信息属于子表,可以通过客户
s访问JOIN
- 我建议将所有3个表中的
列重命名为ID
;使用在功能上有意义的名称比使用通用名称要好ClientID
客户机中不应生成错误,因为它是两个关系中的父表。也许你以另一种方式创造了一种(或两种)关系?请编辑您的问题以显示所有三个表的命令show CREATE TABLE
的输出好吗?@GMB当我查询show CREATE TABLE
I get#1064-您的SQL语法有错误
您需要在命令末尾添加表名,如下所示:SHOW CREATE table clients
@GMB我来试试。同时,我用外键的查询更新了这个问题。这就解决了它!我在父表上创建外键,它们应该在子表上创建。是这样吗?谢谢大家!@若昂·奥德苏萨:欢迎!是的,这完全正确。请考虑我的其他意见,他们应该有助于进一步改善你的模式。我刚刚看到你的评论!客户机
表上的航班号
和预订号
已创建,因此当我在HTML页面上显示该表时,我可以将它们链接到我现在可以通过客户ID
连接的值。那么,我应该通过JOIN
来实现这一点吗?是的,您确实可以使用ClientID
连接航班
和预订
,因此我认为在客户端
中不需要列航班号
和预订号
。