我遇到了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)
答案 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 条件
搜索这些列,删除 不为空 条件,这是删除错误的解决方案之一。