MySQL:主键的所有部分必须是NOT NULL;如果键中需要NULL,请改用UNIQUE

时间:2018-03-05 23:36:15

标签: mysql sql database

我遇到了MySQL的问题。我创建了名为'BucketList'的数据库,然后我尝试创建名为'tbl_user'的表,它看起来像这样:

CREATE TABLE `BucketList`.`tbl_user` (
  `user_id` BIGINT NULL AUTO_INCREMENT,
  `user_name` VARCHAR(45) NULL,
  `user_username` VARCHAR(45) NULL,
  `user_password` VARCHAR(45) NULL,
  PRIMARY KEY (`user_id`));

之后我遇到了一个问题:“主键的所有部分都必须为NOT NULL;如果键中需要NULL,请改用UNIQUE”

你有什么想法,怎么了? 我正在使用的MySQL版本是:

mysql --version
mysql Ver 14.14  Distrib 5.7.12, for Win64 (x86_64)

2 个答案:

答案 0 :(得分:9)

从MySQL 5.7开始,它不再支持主键的空值。

请参阅文档here

  

唯一索引,其中所有键列必须定义为NOT NULL。如果它们没有显式声明为NOT NULL,那么MySQL会隐式声明它(并且默默地)。一个表只能有一个PRIMARY KEY

因此,如果将user_id密钥用作主键,则它不能为空。您应该将其声明为不可为空:

CREATE TABLE `BucketList`.`tbl_user` (
  `user_id` BIGINT AUTO_INCREMENT,
  `user_name` VARCHAR(45) NULL,
  `user_username` VARCHAR(45) NULL,
  `user_password` VARCHAR(45) NULL,
PRIMARY KEY (`user_id`));

(请注意NULL之后<{1}}

的缺失

答案 1 :(得分:0)

同样,这也不适用于Mysql 8.0+。表定义将不接受null准则。

当使用 主键 列定义了 不为空 时,发生此错误。

即使您定义了任何 复合键 ,这些列定义也不包含 not null 条件

搜索这些列,删除 不为空 条件,这是删除错误的解决方案之一。