MySQL-即使InnoDB开启(Ubuntu 16.04),外键也不起作用(错误代码:1215)
我对MySQL表的一个教科书示例有问题。 诀窍是,它可以在Windows操作系统上工作,但出于某种奇怪的原因,它不适用于Linux。我尝试配置默认引擎,它肯定是InnoDB,但出于某种奇怪的原因,它仍然无法工作MySQL-即使InnoDB开启(Ubuntu 16.04),外键也不起作用(错误代码:1215),mysql,linux,ubuntu,foreign-keys,innodb,Mysql,Linux,Ubuntu,Foreign Keys,Innodb,我对MySQL表的一个教科书示例有问题。 诀窍是,它可以在Windows操作系统上工作,但出于某种奇怪的原因,它不适用于Linux。我尝试配置默认引擎,它肯定是InnoDB,但出于某种奇怪的原因,它仍然无法工作 CREATE TABLE radnik( Mbr integer NOT NULL, Ime varchar(20) NOT NULL, Prz varchar(25) NOT NULL, Sef integer, Plt decimal
CREATE TABLE radnik(
Mbr integer NOT NULL,
Ime varchar(20) NOT NULL,
Prz varchar(25) NOT NULL,
Sef integer,
Plt decimal(10, 2),
Pre decimal(6, 2),
God date NOT NULL,
CONSTRAINT radnik_PK PRIMARY KEY (Mbr),
CONSTRAINT radnik_FK FOREIGN KEY (Sef) REFERENCES radnik (Mbr),
CONSTRAINT radnik_CH CHECK (Plt>500)
)engine=innodb;
CREATE TABLE projekat(
Spr integer NOT NULL,
Ruk integer NOT NULL,
Nap varchar(50),
Nar varchar(50),
CONSTRAINT projekat_PK PRIMARY KEY (Spr),
CONSTRAINT projekat_FK FOREIGN KEY (Ruk) REFERENCES radnik (Mbr),
CONSTRAINT projekat_UK UNIQUE (Nap)
)engine=innodb;
CREATE TABLE radproj(
Spr integer NOT NULL,
Mbr integer NOT NULL,
Brc integer NOT NULL,
CONSTRAINT radproj_PK PRIMARY KEY (Spr, Mbr),
CONSTRAINT radproj_rad_FK FOREIGN KEY (Mbr) REFERENCES radnik(Mbr),
CONSTRAINT radproj_prj_FK FOREIGN KEY (Spr) REFERENCES projekat(Spr)
);
对于自引用外键,我认为不能将外键约束放在
createtable
语句中。您必须首先创建表,然后使用altertable
添加约束
这对我有用
CREATE TABLE radnik(
Mbr integer NOT NULL,
Ime varchar(20) NOT NULL,
Prz varchar(25) NOT NULL,
Sef integer,
Plt decimal(10, 2),
Pre decimal(6, 2),
God date NOT NULL,
CONSTRAINT radnik_PK PRIMARY KEY (Mbr)
)engine=innodb;
ALTER TABLE radnik ADD CONSTRAINT radnik_FK FOREIGN KEY (Sef) REFERENCES radnik (Mbr);
顺便说一句,MySQL忽略
CHECK
约束。什么意思它不起作用?错误1215,无法添加外键约束CHECK
被MySQL识别,但被忽略。MySQL的兄弟MariaDB确实处理CHECK
:,但仅从10.2.1(2016年7月)开始;看它的工作!谢谢。但这对我来说仍然是一个谜,为什么它在Windows上像在Linux上那样工作。你运行的是不同的MySQL版本吗?没有超过Win PC的版本,所以我无法检查正确的版本。Ubuntu包中的mysql服务器可能不是最新的。因为我试图更新表时遇到的下一个错误:错误代码:1452。无法添加或更新子行:外键约束编辑失败:它是mysql的最新版本。Win PC是最新版本,所以版本不是问题。修复了它,我想教科书上的错误写得不是很好。