【问题标题】:MySQL - Constraint NOT NULL Error 1064MySQL - 约束非空错误 1064
【发布时间】:2015-08-07 04:56:47
【问题描述】:

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

他为什么不喜欢我的约束? 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));

当我想写“personennummer NUMBER(5)”时,我也会遇到同样的错误 但它是个人识别号,所以每个 personennummer 的长度都是 5,例如第一个有 '00001' 等等

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

【问题讨论】:

  • 显示导致此问题的实际 sql。
  • 为什么要给这个约束起个名字?
  • 实际的 sql 现在在我在大学学到的帖子中 - 所以我想以后可以更改它吗? ://
  • 你愿意吗?曾经?真的吗?
  • @KarolyHorvath:其他数据库,例如 Oracle,确实为 NOT NULL 约束分配了一个名称。如果没有提供名称,Oracle 会分配一个系统生成的名称,例如SYS_nnnnnn。并且一些开发人员/DBA 更喜欢为约束使用一致的名称,而不是在每个环境(开发、测试、质量保证、预生产、生产)中都不同的系统生成名称。

标签: mysql constraints notnull


【解决方案1】:

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 NULLNOT NULL 包含在列定义中。

MySQL 不同于其他数据库,例如 Oracle,确实允许您为 NOT NULL 约束命名。我是 Oracle,我认为 NOT NULL 约束在字典中显示为约束。因此,我们希望给出一个特定的名称,而不是分配一个系统生成的SYS_nnnnnn 名称,这是可以理解的。在 MySQL 中,NOT NULL 被视为列的属性,而不是单独的约束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 2020-03-17
    相关资源
    最近更新 更多