用外键连接多个MySQL表

时间:2019-03-14 00:10:38

标签: mysql sql foreign-keys insert-into

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

  • 客户
  • 航班
  • 预订

我在Clients

  • 名称
  • 姓氏
  • ID
  • 航班号(来自“航班”表)
  • 预订号(来自“预订”表)

我在Flights

  • ID(来自客户端)
  • 航班号
  • 公司
  • 日期

我在Bookings

  • ID(来自客户端)
  • 预订号
  • 酒店
  • 入住日期
  • 退房日期

我希望在创建客户之后,将我在“航班和预订”表上创建的内容链接到客户上。

因此,每个客户都有一个ID,该ID也插入了Flight和Bookings表。而且我需要将Clients.ID行链接到“航班和预订”行。

外键有可能吗?

我尝试将Clients.ID用作主键,将Flights.IDBooking.ID用作外键,但是当我使用INSERT INTO时,我得到了:

  

#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,对不起,如果我的解释太乱了。

1 个答案:

答案 0 :(得分:1)

您创建的约束使client成为flightsbookings的子表。因此,您无法创建新的客户端(首先需要在其他两个表中创建父记录)。

在数据库设计中,client应该是父表,flightsbookings是子表。

考虑:

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);

其他备注:

  • Flight Number (from Flights table)Booking Number (from Bookings table)Client表中没有意义。这些信息属于子表,可以通过JOIN s

  • 访问
  • 我建议将所有3个表中的列ID重命名为ClientID;使用有意义的名称要比通用名称更好。