gpt4 book ai didi

mysql - SQL 代码在在线编译器上运行良好,但在 Linux 终端中由 MariaDB 编译时失败(errno : 150)

转载 作者:行者123 更新时间:2023-12-04 10:39:18 24 4
gpt4 key购买 nike

通过论坛搜索,尝试了一堆解决方案,但似乎没有任何效果。
下面是一小段代码和我使用的在线编译器。

我得到(错误号: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

我究竟做错了什么?任何帮助将不胜感激。

最佳答案

好的,关于存储引擎我说的第一件事是并非所有存储引擎都支持外键约束。

存储引擎是管理表和数据的系统,有多种存储引擎可用,例如:MyISAM 或 InnoDb。 (从 MySQL 5.6 InnoDB 开始是默认的)

每个存储引擎都有自己的特性和独特的特性,可以在特定情况下使用。大多数时候你不太“关心”和存储引擎,除非你想使用一些特定的功能。

如果您不确定选择哪个存储引擎,请坚持使用默认值并使用 InnoDB
有关存储引擎的更多信息,请查看 MySQL 引用手册。 (如果你想学习和理解,我强烈建议你)

https://dev.mysql.com/doc/refman/8.0/en/innodb-introduction.html
https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html

我认为问题是那列Client_ID on Bookings 不是索引字段。
如果我更改表定义并向其添加 INDEX 约束,则一切正常。

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), INDEX (Client_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');

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

关于mysql - SQL 代码在在线编译器上运行良好,但在 Linux 终端中由 MariaDB 编译时失败(errno : 150),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60009749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com