【发布时间】:2020-05-17 11:15:28
【问题描述】:
搜索了论坛,尝试了一堆解决方案,但似乎没有任何效果。 下面是我使用的代码和在线编译器的小sn-p。
我得到(错误号:150“外键约束格式不正确”)。请注意,每当我尝试添加外键时,代码中的所有表都会出现此错误。
在线编译器:https://paiza.io/en/languages/mysql
代码:
-- CREATING AND INSERTING VALUES INTO THE BOOKINGS TABLE WITHOUT FK--
create table Bookings(
Booking_ID varchar(9) NOT NULL,
Client_ID varchar(6) NOT NULL,
PT_ID varchar(4) NOT NULL,
Booking_Date Date NOT NULL,
Start_Time time NOT NULL,
End_Time time NOT NULL,
Focus_ID varchar(3) NOT NULL,
Staff_ID varchar(4) NOT NULL,
PRIMARY KEY (Booking_ID)
);
INSERT INTO Bookings
VALUES
('B00000001','C00001','T001','2020-01-1','19:30:00','20:15:00','F01','S002'),
('B00000002','C00023','T001','2020-01-1','09:00:00','09:30:00','F02','S001'),
('B00000007','C00156','T003','2020-01-1','10:00:00','11:00:00','F04','S003');
-- CREATING AND INSERTING VALUES INTO THE CLIENT TABLE --
create table Client(
Client_ID varchar(6) NOT NULL,
Client_Name varchar(20) NOT NULL,
Height_cm decimal(5,2) NOT NULL,
Weight_kg decimal(6,2) NOT NULL,
Ph_Num varchar(14) NOT NULL,
PRIMARY KEY (Client_ID),
FOREIGN KEY (Client_ID)
REFERENCES Bookings(Client_ID)
);
-- ALTERING BOOKINGS TABLE WITH FOREIGN KEYS --
ALTER TABLE Bookings
ADD
FOREIGN KEY (Client_ID)
REFERENCES Client(Client_ID);
正如我在标题中提到的,代码在网上运行良好,但在 Linux 终端上通过 MariaDB 编译时失败。
MariaDB 服务器版本为 10.3.17-MariaDB
我做错了什么?任何帮助将不胜感激。
【问题讨论】:
-
你用的是什么存储引擎?
-
请原谅我,因为我对 sql 还很陌生,但什么是存储引擎,如何找到它?
-
您不需要在两个表上创建外键,只需在 Bookings 表中引用 Clients 表的那个。外键引用另一个表的主键。因此,您从 Clients 到 Bookings 的外键无效,因为 Client_ID 不是 Bookings 的主键。
-
@drakin8564 这就是修复它的原因,谢谢!我一直觉得两个表都需要外键很奇怪!
-
150:更改表的声明顺序 OR 在创建表之前禁用,然后在创建所有表后重新启用 OR 应用所有 FK .
标签: mysql mariadb mariadb-10.3