【问题标题】:[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标签,请不要标记多个与问题无关的标签。

标签: mysql database


【解决方案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`),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 2017-08-07
      • 2014-09-04
      • 2023-03-07
      • 2012-08-24
      相关资源
      最近更新 更多