我想创建一个表,我收到一个错误:
为什么他不喜欢我的约束? 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));
当我想写#34; personennummer NUMBER(5)"时,我也会得到同样的错误。 但它是一个个人身份证号码,所以每个人都有相同的长度,例如第一个人有#00; 00001'等等
我希望你能回答我的问题:)
答案 0 :(得分:2)
MySQL不支持语法为NOT NULL
约束命名。
这将引发错误:
Personennummer INT(5) constraint not_null_mitarbpersnr NOT NULL
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
要在MySQL中的列上声明NOT NULL
约束,您必须省略关键字CONSTRAINT
和名称。此语法有效:
Personennummer INT(5) NOT NULL
参考:https://dev.mysql.com/doc/refman/5.5/en/create-table.html
请注意CONSTRAINT
后面的语法不允许NOT NULL
。 NOT NULL
作为列定义的一部分包含在内。
MySQL与其他数据库不同,例如Oracle,做允许您为NOT NULL
约束命名。我是Oracle,我认为NOT NULL约束在字典中显示为约束。因此,我们想要给出一个特定的名称,而不是分配系统生成的SYS_nnnnnn
名称,这是可以理解的。在MySQL中,NOT NULL
作为列的属性处理,而不是作为单独的约束。