我正在尝试创建一个数据库但每次尝试这样做时都会收到错误消息:
1215 Cannot add foreign key constraint.
我整个上午都在寻找解决方案,但找不到任何有助于解决问题的方法,这是我的代码:
CREATE TABLE IF NOT EXISTS Lid (
lid_id INT(2) NOT NULL,
naam VARCHAR(45) NOT NULL,
email VARCHAR(45) NOT NULL,
tel_nummer VARCHAR(45) NOT NULL,
score INT(2) NOT NULL,
expertise VARCHAR(45) NOT NULL,
team_id INT(2) NOT NULL,
primary key (lid_id),
foreign key (team_id) references Team(team_id));
CREATE TABLE IF NOT EXISTS Team (
team_id INT(2) NOT NULL,
naam VARCHAR(45) NOT NULL,
score INT(2) NOT NULL,
captain INT(2) NOT NULL,
expertise VARCHAR(45) NOT NULL,
primary key (team_id),
foreign key (captain) references Lid(lid_id));
答案 0 :(得分:1)
要创建FOREIGN KEY
,您需要创建源和目标字段和表。
示例:为了从表b_id
中的字段A
创建外键到表id
中的字段B
,首先需要创建表A和B它的字段,在这种情况下,您可以首先定义B,然后使用其外键定义A.
在您的情况下:您需要使用ALTER TABLE
在表定义之后创建外键,因为两个表都相互引用。
所以你的代码应该是这样的:
/* DEFINE TABLES */
CREATE TABLE IF NOT EXISTS Lid (
lid_id INT(2) NOT NULL,
naam VARCHAR(45) NOT NULL,
email VARCHAR(45) NOT NULL,
tel_nummer VARCHAR(45) NOT NULL,
score INT(2) NOT NULL,
expertise VARCHAR(45) NOT NULL,
team_id INT(2) NOT NULL,
primary key (lid_id));
CREATE TABLE IF NOT EXISTS Team (
team_id INT(2) NOT NULL,
naam VARCHAR(45) NOT NULL,
score INT(2) NOT NULL,
captain INT(2) NOT NULL,
expertise VARCHAR(45) NOT NULL,
primary key (team_id));
/* CREATE FOREIGN KEYS */
ALTER TABLE Lid ADD FOREIGN KEY (team_id) REFERENCES Team(team_id);
ALTER TABLE Team ADD FOREIGN KEY (captain) REFERENCES Lid(lid_id);
中查看更多解释和示例
答案 1 :(得分:0)
您在创建引用表之前创建外键。
您最好创建两个表,然后使用ALTER TABLE
语句添加外键约束。
答案 2 :(得分:0)
首先创建团队表,然后创建一个盖子。 mysql基本上告诉你的是它不知道你引用的team_id字段作为外键约束。
答案 3 :(得分:0)
<强> STEP-1 强>
CREATE TABLE IF NOT EXISTS Lid (
lid_id INT(2) NOT NULL PRIMARY KEY,
naam VARCHAR(45) NOT NULL,
email VARCHAR(45) NOT NULL,
tel_nummer VARCHAR(45) NOT NULL,
score INT(2) NOT NULL,
expertise VARCHAR(45) NOT NULL,
team_id INT(2) NOT NULL
)
<强> STEP-2 强>
CREATE TABLE IF NOT EXISTS Team (
team_id INT(2) NOT NULL PRIMARY KEY,
naam VARCHAR(45) NOT NULL,
score INT(2) NOT NULL,
captain INT(2) NOT NULL,
expertise VARCHAR(45) NOT NULL
)
<强> STEP-3 强>
ALTER TABLE lid ADD FOREIGN KEY ( team_id ) REFERENCES team( team_id )
答案 4 :(得分:0)
您可以禁止在会话中临时检查外键的有效性(用于定义表和插入数据):
set foreign_key_checks=0;
然后使用以下命令恢复它:
set foreign_key_checks=1;
答案 5 :(得分:-1)
试试这个
CREATE TABLE IF NOT EXISTS Lid (
lid_id INT(2) NOT NULL,
naam VARCHAR(45) NOT NULL,
email VARCHAR(45) NOT NULL,
tel_nummer VARCHAR(45) NOT NULL,
score INT(2) NOT NULL,
expertise VARCHAR(45) NOT NULL,
team_id INT(2) NOT NULL,
primary key (lid_id));
CREATE TABLE IF NOT EXISTS Team (
team_id INT(2) NOT NULL,
naam VARCHAR(45) NOT NULL,
score INT(2) NOT NULL,
captain INT(2) NOT NULL,
expertise VARCHAR(45) NOT NULL,
primary key (team_id),
foreign key (captain) references Lid(lid_id));
ALTER TABLE Lid ADD foreign key (team_id) references Team(team_id);