Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用外键连接多个MySQL表_Mysql_Sql_Foreign Keys_Insert Into - Fatal编程技术网

使用外键连接多个MySQL表

使用外键连接多个MySQL表,mysql,sql,foreign-keys,insert-into,Mysql,Sql,Foreign Keys,Insert Into,我在MySQL上有3个不同的表: 客户 飞行 预订 在客户机上我有 名字 姓 身份证 航班号(来自航班表) 预订编号(来自预订表) 在航班上我有 ID(来自客户端) 航班号 公司 日期 关于预订我有 ID(来自客户端) 预订号码 酒店 登记日期 退房日期 在创建客户机之后,我希望将在航班和预订表上创建的内容链接到客户机上 因此,每个客户机都有一个ID,该ID也插入到航班和预订表中。我需要将Clients.ID行链接到航班和预订的行 外键可以这样做吗 我尝试将Clients.ID作

我在MySQL上有3个不同的表:

  • 客户
  • 飞行
  • 预订
客户机上
我有

  • 名字
  • 身份证
  • 航班号(来自航班表)
  • 预订编号(来自预订表)
航班上
我有

  • ID(来自客户端)
  • 航班号
  • 公司
  • 日期
关于
预订
我有

  • ID(来自客户端)
  • 预订号码
  • 酒店
  • 登记日期
  • 退房日期
在创建客户机之后,我希望将在航班和预订表上创建的内容链接到客户机上

因此,每个客户机都有一个ID,该ID也插入到航班和预订表中。我需要将Clients.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);
其他备注:

  • 航班号(来自航班表)
    预订号(来自预订表)
    列在
    客户
    表中没有意义。这些信息属于子表,可以通过
    JOIN
    s访问

  • 我建议将所有3个表中的
    ID
    列重命名为
    ClientID
    ;使用在功能上有意义的名称比使用通用名称要好


插入到
客户机中不应生成错误,因为它是两个关系中的父表。也许你以另一种方式创造了一种(或两种)关系?请编辑您的问题以显示所有三个表的命令
show CREATE TABLE
的输出好吗?@GMB当我查询
show CREATE TABLE
I get
#1064-您的SQL语法有错误
您需要在命令末尾添加表名,如下所示:
SHOW CREATE table clients
@GMB我来试试。同时,我用外键的查询更新了这个问题。这就解决了它!我在父表上创建外键,它们应该在子表上创建。是这样吗?谢谢大家!@若昂·奥德苏萨:欢迎!是的,这完全正确。请考虑我的其他意见,他们应该有助于进一步改善你的模式。我刚刚看到你的评论!
客户机
表上的
航班号
预订号
已创建,因此当我在HTML页面上显示该表时,我可以将它们链接到我现在可以通过
客户ID
连接的值。那么,我应该通过
JOIN
来实现这一点吗?是的,您确实可以使用
ClientID
连接
航班
预订
,因此我认为在
客户端
中不需要列
航班号
预订号