Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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-约束非空错误1064_Mysql_Constraints_Notnull - Fatal编程技术网

MySQL-约束非空错误1064

MySQL-约束非空错误1064,mysql,constraints,notnull,Mysql,Constraints,Notnull,我想创建一个表,但出现了一个错误: 他为什么不喜欢我的约束?mysql和sql有这么大的不同吗?因为2年前我创建了相同的表,sql中没有问题:( 这里是全部代码 CREATE table Mitarbeiter( Mitarbeiternummer INT(5), Personennummer INT(5) constraint not_null_mitarbpersnr NOT NULL, Gehalt INT(10), Chef_Mitarbeiternummer INT(5), cons

我想创建一个表,但出现了一个错误:

他为什么不喜欢我的约束?mysql和sql有这么大的不同吗?因为2年前我创建了相同的表,sql中没有问题:(

这里是全部代码

CREATE table Mitarbeiter(
Mitarbeiternummer INT(5),
Personennummer INT(5) constraint not_null_mitarbpersnr NOT NULL,
Gehalt INT(10),
Chef_Mitarbeiternummer INT(5),
constraint mitarbeiter_pk primary key (Mitarbeiternummer),
constraint unique_mitpernr UNIQUE (Personennummer),
constraint marb_fk_persnr foreign key(Personennummer) references person(Personennummer) ON DELETE CASCADE,
constraint marb_fk_chef foreign key (Chef_Mitarbeiternummer) references mitarbeiter(Mitarbeiternummer));
当我想写“personenummer NUMBER(5)”时,我也会遇到同样的错误 但是它是一个个人识别号,所以每个人的名字都有相同的长度5,例如第一个有“00001”等等


我希望您能回答我的问题:)

MySQL不支持为
notnull
约束命名的语法

这将抛出一个错误:

  Personennummer INT(5) constraint not_null_mitarbpersnr NOT NULL
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
要在MySQL中对列声明
notnull
约束,必须省略关键字
constraint
和名称。此语法有效:

  Personennummer INT(5) NOT NULL

参考:

请注意,
CONSTRAINT
后面的语法不允许
notnull
notnull
是列定义的一部分


MySQL不同于其他数据库,例如Oracle,它允许您为
notnull
约束指定名称。我认为NOTNULL约束在字典中显示为约束。因此,我们希望给出一个特定的名称,而不是指定一个系统生成的名称,这是可以理解的。在MySQL中,
notnull
作为列的属性处理,而不是作为单独的约束处理。

显示导致此问题的实际sql。为什么要给该约束命名?实际sql现在在帖子中我在大学里学过这一点,所以我想以后可以更改它:/你会吗?曾经真的吗?@KarolyHorvath:其他数据库,如Oracle,确实为
非空约束指定了一个名称。如果未提供名称,Oracle将分配系统生成的名称,如
SYS\nnnn
。一些开发人员/DBA更喜欢为约束使用一致的名称,而不是在每个环境(开发人员、测试人员、qa人员、预生产人员、生产人员)中使用不同的系统生成的名称