MySQL#1005 can';不要创建表,但不要';t说为什么,呃不:150

MySQL#1005 can';不要创建表,但不要';t说为什么,呃不:150,mysql,sql,create-table,Mysql,Sql,Create Table,我正在创建一个数据库,有几个表,到目前为止,我可以创建这些表,并用一些演示数据更新它,但是当a尝试创建一个新表来连接我的两个表时,我得到的结果是,无论我做了什么,都不能创建表错误。试图将实体重命名为一个完全不同的名称,这可能是问题所在,但事实并非如此 CREATE DATABASE IF NOT EXISTS ETR; CREATE TABLE Hallgato ( OktAzonosito INT(6) PRIMARY KEY, EHAazonosito VARCHAR(11), Telje

我正在创建一个数据库,有几个表,到目前为止,我可以创建这些表,并用一些演示数据更新它,但是当a尝试创建一个新表来连接我的两个表时,我得到的结果是,无论我做了什么,都不能创建表错误。试图将实体重命名为一个完全不同的名称,这可能是问题所在,但事实并非如此

CREATE DATABASE IF NOT EXISTS ETR;

CREATE TABLE Hallgato (
OktAzonosito INT(6) PRIMARY KEY,
EHAazonosito VARCHAR(11),
TeljesNev VARCHAR(50),
Szemelyazonosito INT(6),
AnyaNyelv VARCHAR(20),
VegzettsegSzint VARCHAR(25),
AnyjaNeve VARCHAR(35),
SzuletesiHely VARCHAR(30),
SzuletesiEv DATE,
Allampolgarsag VARCHAR(30),
Neme VARCHAR(5),
Adoazonosito INT(6),
TAJszam INT(6),
BankszamlaSzam INT(9)
) ENGINE = InnoDB;

CREATE TABLE OktAdat (
OktAzonosito INT(6),
NyelvVizsgaNyelve VARCHAR(15),
NyVegzesDatuma DATE,
NyIntezmeny VARCHAR(35),
EgyebVegzetteseg VARCHAR(15),
EgyVegzesDatuma DATE,
ID INT(5) PRIMARY KEY NOT NULL auto_increment,
FOREIGN KEY (OktAzonosito) REFERENCES Hallgato(OktAzonosito) ON DELETE CASCADE
) ENGINE = InnoDB;

CREATE TABLE Oktato (
TEHAazonosito VARCHAR(11) PRIMARY KEY,
Nev VARCHAR(50),
SzuletesiEv DATE,
Szakterulet VARCHAR(25),
Telefonszam INT(9),
Email VARCHAR(50)
) ENGINE = InnoDB;

CREATE TABLE Kurzus (
KurzusKod VARCHAR(8) PRIMARY KEY,
KurzusNev VARCHAR(30),
Idotartam INT(3),
EloadasHelye VARCHAR(25),
Tipus CHAR(3),
Vizsgatipus VARCHAR(7),
KreditErtek INT(2),
OktatoKod VARCHAR(11)
) ENGINE = InnoDB;

CREATE TABLE Terem (
Sorszam INT(3) PRIMARY KEY NOT NULL,
Epuletszam INT(1),
Kapacitas INT(3),
IRszam INT(4),
Utca CHAR(25),
Hazszam INT(2)
) ENGINE = InnoDB;

CREATE TABLE DiakKurz (
kd_id INT (5) PRIMARY KEY NOT NULL auto_increment,
DKKod VARCHAR(8),
EHA VARCHAR(11),
FOREIGN KEY (EHA) REFERENCES Hallgato(EHAazonosito) ON DELETE CASCADE,
FOREIGN KEY (DKKod) REFERENCES Kurzus(KurzusKod) ON DELETE CASCADE
) ENGINE = InnoDB;

问题在于创建DiakKurz表

您是否尝试查找错误

如果MySQL在CREATETABLE语句中报告错误号1005, 错误消息指的是错误150,表创建失败 因为外键约束的格式不正确。同样地, 如果ALTER表失败,并且它引用了错误150,这意味着 外键定义的格式将不正确 桌子显示最新InnoDB的详细说明 服务器中出现外键错误,问题显示引擎INNODB状态

这个

FOREIGN KEY (EHA) REFERENCES Hallgato(EHAazonosito) ON DELETE CASCADE,
不工作,因为
EHAazonosito
不是
Hallgato
表的主键。外键只能引用主键(或唯一键)

顺便问一下:您是否注意到
int(6)
中的
6
而不是关于限制列中的值


它没有任何作用
int(6)
int
相同。
6
仅用于向客户端应用程序提示(!)列应显示的位数。它根本不强制执行任何操作。

您必须为表Hallgato中的列EHAazonosito设置索引

CREATE TABLE Hallgato (
OktAzonosito INT(6) PRIMARY KEY,
EHAazonosito VARCHAR(11), INDEX (EHAazonosito),
TeljesNev VARCHAR(50),
Szemelyazonosito INT(6),
AnyaNyelv VARCHAR(20),
VegzettsegSzint VARCHAR(25),
AnyjaNeve VARCHAR(35),
SzuletesiHely VARCHAR(30),
SzuletesiEv DATE,
Allampolgarsag VARCHAR(30),
Neme VARCHAR(5),
Adoazonosito INT(6),
TAJszam INT(6),
BankszamlaSzam INT(9)
) ENGINE = InnoDB;

在整个模式转储之后,这种情况也发生在我身上,帮助我将整个转储包装在禁用的外键检查中

SET foreign_key_checks=0;

...dump

SET foreign_key_checks=1;

外键可以引用任何索引(至少在较新的mysql版本中)Thx来获取信息,我不知道这一点。这是一种学习sql的过程,但我将来会对此保持警惕:)这很奇怪。非唯一索引如何成为外键引用的目标?这似乎不合逻辑。