[23000][1062] 键 'PRIMARY' 的重复条目 '0'

Posted

技术标签:

【中文标题】[23000][1062] 键 \'PRIMARY\' 的重复条目 \'0\'【英文标题】:[23000][1062] Duplicate entry '0' for key 'PRIMARY'[23000][1062] 键 'PRIMARY' 的重复条目 '0' 【发布时间】:2018-07-11 11:17:16 【问题描述】:

当我填写数据库时,我收到了主键条目重复的问题,但事实是我的数据库中的字段“状态”字段不是主键或其部分。

数据库脚本

如果不存在则创建表 travel.`users` (
  `login` VARCHAR(25) NOT NULL,
  `password` VARCHAR(25) NOT NULL,
  `email` VARCHAR(40) NOT NULL,
  `name` VARCHAR(20) NOT NULL,
  `surname` VARCHAR(20) NOT NULL,
  `电话` VARCHAR(20) NOT NULL,
  `role` VARCHAR(30) NOT NULL,
  `status` TINYINT(1) NOT NULL,
  `image` VARCHAR(250) NOT NULL,
  主键(`登录`),
  唯一索引 `login_UNIQUE` (`login` ASC))
  引擎 = InnoDB;

SQL 查询

插入用户值
  (登录 = 'admin',密码 = 'admin',电子邮件 = 'admin@gmail.com',姓名 = 'Иван',
   姓氏='Иванов',电话='+380674002092',角色='管理员',状态='0',
   图像 = 'D:/server/admin.img');

插入用户价值
  (登录名='经理',密码='经理',电子邮件='manager@gmail.com',姓名='Петров',
   姓氏='Пётр',电话='+380964002092',角色='经理',状态='0',
   image = 'D:/server/manager.img');

在执行第二个 INSERT 期间,我收到以下错误 [23000][1062] Duplicate entry '0' for key 'PRIMARY'

【问题讨论】:

我删除了SQL Server标签,请不要标记多个与问题无关的标签。 【参考方案1】:
`user_id` int(8) NOT NULL AUTO_INCREMENT

您必须有一个自动增量字段。

【讨论】:

【参考方案2】:
Remove the Column name .Do not need to specify the column.

INSERT INTO users VALUES
  ( 'admin',  'admin', 'admin@gmail.com',  'Иван',
    'Иванов',  '+380674002092',  'ADMINISTRATOR',  '0',
    'D:/server/admin.img');

INSERT INTO users VALUES
  ( 'manager',  'manager',  'manager@gmail.com',  'Петров',
    'Пётр', '+380964002092',  'MANAGER',  '0',
    'D:/server/manager.img');

【讨论】:

非常感谢,写了一晚上的代码,有时候也会出现这种老生常谈的错误【参考方案3】:

Raja 的回答是正确的,但我想为其他人补充一些信息

他的回答..

去掉列名。不需要指定列。

INSERT INTO users VALUES ( 'admin', 'admin', 'admin@gmail.com', 'Иван', 'Иванов', '+380674002092', 'ADMINISTRATOR', '0', 'D:/server/admin.img');

INSERT INTO users VALUES ( 'manager', 'manager', 'manager@gmail.com', 'Петров', 'Пётр', '+380964002092', 'MANAGER', '0', 'D:/server/manager.img');

我的补充...

如果我们正在执行完全插入,我们不需要指定列,如果我们只想将数据插入某些行,我们指定我们要插入的唯一列。

这是一个示例,

INSERT INTO users(login, password, status) VALUES
  ( 'manager1',  'manager1',  '0');

这将只在loginpasswordstatus 列中插入值。

另外,一个建议是避免使用varchar 数据类型作为主键,因为它会影响主内存中的索引性能。而是使用intlong(在大多数RDBMS 中为bigint)。

而且,您可以将其设置为Auto Increment,这样就可以轻松地将它们用作Foreign Key

如果您想使其成为 AutoIncrement,您需要更改以下内容。

    CREATE TABLE IF NOT EXISTS travel.`users` (
        `id` int(8) NOT NULL AUTO_INCREMENT, 
        `login` VARCHAR(25) NOT NULL,
         ....
        PRIMARY KEY (`id`),

【讨论】:

以上是关于[23000][1062] 键 'PRIMARY' 的重复条目 '0'的主要内容,如果未能解决你的问题,请参考以下文章

ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'

MySQL - ERROR 1062 (23000)

SQLSTATE [23000]:完整性约束违规:1062 键 'tbl_item_item_ID_UNIQUE' 的重复条目 '25'

SQLSTATE [23000]:完整性约束违规:1062 键“users_melli_unique”的重复条目“0430142821”

Laravel - SQLSTATE [23000]:完整性约束违规:1062 键“posts_user_id_unique”的重复条目“1”

MySQL PHPMyAdmin 错误 #1062 - 键 'PRIMARY' 的重复条目 '0'