首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL #1005无法创建表,但没有说明原因,错误号:150

MySQL #1005无法创建表,但没有说明原因,错误号:150
EN

Stack Overflow用户
提问于 2012-11-18 07:10:19
回答 4查看 150关注 0票数 0

我正在创建一个包含多个表的数据库,到目前为止,我可以创建这些表,并使用一些演示数据对其进行更新,但是当我尝试创建一个新表来连接我的两个表时,我得到了这条消息:无论我做了什么,都无法创建表错误。尝试将实体重命名为一个完全不同的名称,也许这就是问题所在,但事实并非如此。

代码语言:javascript
运行
复制
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表上。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-18 07:20:14

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

代码语言:javascript
运行
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2012-11-18 07:14:23

代码语言:javascript
运行
复制
FOREIGN KEY (EHA) REFERENCES Hallgato(EHAazonosito) ON DELETE CASCADE,

因为EHAazonosito不是Hallgato表的主键,所以不起作用。外键只能引用主键(或唯一键)。

顺便说一句:关于限制列中的值,int(6)中的6而不是,您是否对此有所警觉?

它什么也做不了。int(6)int相同。6的作用只是给客户端应用程序一个提示(!)该列应显示的位数。它根本不会强制执行任何内容。

票数 1
EN

Stack Overflow用户

发布于 2012-11-18 07:14:14

你有没有试过查找这个错误?

如果MySQL从CREATE TABLE语句报告错误号1005,并且错误消息指向错误150,则表创建失败,因为没有正确形成外键约束。类似地,如果ALTER table失败,并且它引用了错误150,这意味着被更改的表的外键定义将被错误地形成。要显示服务器中最新的InnoDB外键错误的详细说明,请发出SHOW ENGINE INNODB STATUS命令。

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13435704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档