使用外键连接多个 MySQL 表
Connecting multiple MySQL tables with Foreign Keys
我在 MySQL 上有 3 个不同的 table:
- 客户
- 航班
- 预订
在Clients
我有
- 姓名
- 姓氏
- ID
- 航班号(来自航班table)
- 预订编号(来自预订table)
在Flights
我有
- ID(来自客户)
- 航班号
- 公司
- 日期
在Bookings
我有
- ID(来自客户)
- 预订号
- 酒店
- 入住日期
- 退房日期
我想在创建客户后,将我在航班和预订 tables link 上创建的内容应用到客户上。
因此,每个客户都有一个 ID,该 ID 也被插入到航班和预订 table 中。我需要 link 那个 Clients.ID 行到它在航班和预订上的行。
外键可以吗?
我尝试将 Clients.ID
作为主键,将 Flights.ID
和 Booking.ID
作为外键,但是当我使用 INSERT INTO
时,我得到:
#1452 - Cannot add or update a child row: a foreign key constraint fails
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
的 child table。因此,您无法创建新客户(您需要先在另外两个 table 中创建 parent 记录)。
在你的数据库设计中,client
应该是parenttable,用flights
和bookings
作为child任tables.
考虑:
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
table 中没有意义。这些信息属于childrentable,可以通过JOIN
s
访问
我建议将所有 3 table 中的列 ID
重命名为 ClientID
;使用在功能上有意义的名称优于通用名称。
我在 MySQL 上有 3 个不同的 table:
- 客户
- 航班
- 预订
在Clients
我有
- 姓名
- 姓氏
- ID
- 航班号(来自航班table)
- 预订编号(来自预订table)
在Flights
我有
- ID(来自客户)
- 航班号
- 公司
- 日期
在Bookings
我有
- ID(来自客户)
- 预订号
- 酒店
- 入住日期
- 退房日期
我想在创建客户后,将我在航班和预订 tables link 上创建的内容应用到客户上。
因此,每个客户都有一个 ID,该 ID 也被插入到航班和预订 table 中。我需要 link 那个 Clients.ID 行到它在航班和预订上的行。
外键可以吗?
我尝试将 Clients.ID
作为主键,将 Flights.ID
和 Booking.ID
作为外键,但是当我使用 INSERT INTO
时,我得到:
#1452 - Cannot add or update a child row: a foreign key constraint fails
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
的 child table。因此,您无法创建新客户(您需要先在另外两个 table 中创建 parent 记录)。
在你的数据库设计中,client
应该是parenttable,用flights
和bookings
作为child任tables.
考虑:
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
table 中没有意义。这些信息属于childrentable,可以通过JOIN
s 访问
我建议将所有 3 table 中的列
ID
重命名为ClientID
;使用在功能上有意义的名称优于通用名称。