Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-即使InnoDB开启(Ubuntu 16.04),外键也不起作用(错误代码:1215)_Mysql_Linux_Ubuntu_Foreign Keys_Innodb - Fatal编程技术网

MySQL-即使InnoDB开启(Ubuntu 16.04),外键也不起作用(错误代码:1215)

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

我对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(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是最新版本,所以版本不是问题。修复了它,我想教科书上的错误写得不是很好。