我正在创建一个包含多个表的数据库,到目前为止我可以创建表,并使用一些演示数据更新它,但是当我试图创建一个用于连接我的两个表的新表时,我得到了这个无论我做什么都无法创建表错误。试图将实体重命名为完全不同的名称,这可能就是问题,但事实并非如此。
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表。
答案 0 :(得分:1)
这个
FOREIGN KEY (EHA) REFERENCES Hallgato(EHAazonosito) ON DELETE CASCADE,
不起作用,因为EHAazonosito
不是Hallgato
表的主键。外键只能引用主键(或唯一键)。
6
中的int(6)
关于限制列中的值感到不满?
它没有做任何事情。 int(6)
与int
相同。 6
仅用于向客户端应用程序提供一个提示(!),其中应显示列的位数。它根本不执行任何操作。
答案 1 :(得分:1)
您必须在表Hallgato
中为列EHAazonosito设置INDEXCREATE 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;
答案 2 :(得分:0)
您是否尝试过查找错误?
如果MySQL从CREATE TABLE语句报告错误号1005, 并且错误消息引用错误150,表创建失败 因为没有正确形成外键约束。同样的, 如果ALTER TABLE失败并且它引用错误150,则表示a 对于更改的内容,将错误地形成外键定义 表。显示最新的InnoDB的详细说明 服务器中的外键错误,发出SHOW ENGINE INNODB STATUS。
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
答案 3 :(得分:0)
SET foreign_key_checks=0;
...dump
SET foreign_key_checks=1;