gpt4 book ai didi

mysql - 错误号 : 150 "Foreign key constraint is incorrectly formed" Nothing helps

转载 作者:行者123 更新时间:2023-11-29 07:01:58 25 4
gpt4 key购买 nike

抱歉,我的问题可能很愚蠢,但我堆栈了我的 sql 查询。尝试了很多方法来实现它,但仍然有错误150。我创建了 3 个表,其中一个带有外键:

表用户

create table users(
id int(11) primary key auto_increment,
unique_id varchar(23) not null unique,
name varchar(50) not null,
cname varchar(50) not null,
email varchar(100) not null unique,
encrypted_password varchar(80) not null,
salt varchar(10) not null,
created_at datetime,
updated_at datetime null
);

表行为

CREATE TABLE behaviours (
id int(2) AUTO_INCREMENT PRIMARY KEY,
bName varchar(100) NOT NULL
);

表格类别

CREATE TABLE severitys (
id int(2) AUTO_INCREMENT PRIMARY KEY,
severity varchar(10) NOT NULL
);

这里显示错误:

CREATE TABLE child_behaviours(
id int(11) primary key auto_increment,
name varchar(50) not null,
cname varchar(50) not null,
bName varchar(100) NOT NULL,
severity varchar(10) NOT NULL,
start_at datetime,
stop_at datetime null,
FOREIGN KEY (id) REFERENCES users(id),
FOREIGN KEY (bName) REFERENCES behaviours(bName),
FOREIGN KEY (severity) REFERENCES severitys(severity)
);

非常高兴能得到这个问题的答案

最佳答案

您只能在既为 UNIQUE 又为 NOT NULL 的列上创建 FK。这通常(但并非总是)是引用表的主键。

如果您引用 PK 以外的任何内容,您需要一个非常非常好的理由。

(我什至要补充一点,你需要一个非常非常好的理由来使用除 INT 或几个 INT 以外的任何东西作为 PK...)

现在,child_behaviours 有几个错误:

  • 用户中已存在的列重复。如果您通过 ID 引用用户,则无需重复列。
  • 引用行为(bName)而不是使用其 ID
  • 严重程度也是如此

此外,使用“id”列还存在一个常见错误。请称它们为“user_id”、“severity_id”等,然后在您的引用文献中使用相同的名称。这将使您的生活变得更加轻松,并避免以下情况:

SELECT foo.id AD foo_id, bar.id AS bar_id FROM foo JOIN bar ON ...

关于mysql - 错误号 : 150 "Foreign key constraint is incorrectly formed" Nothing helps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43122374/

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