[23000] [1062]为'PRIMARY'键重复输入'0'

时间:2018-02-01 07:34:48

标签: mysql database

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

数据库脚本

CREATE TABLE IF NOT EXISTS 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,
  `telephone` VARCHAR(20) NOT NULL,
  `role` VARCHAR(30) NOT NULL,
  `status` TINYINT(1) NOT NULL,
  `image` VARCHAR(250) NOT NULL,
  PRIMARY KEY (`login`),
  UNIQUE INDEX `login_UNIQUE` (`login` ASC))
  ENGINE = InnoDB;

SQL查询

INSERT INTO users VALUES
  (login = 'admin', password = 'admin', email = 'admin@gmail.com', name = 'Иван',
   surname = 'Иванов', telephone = '+380674002092', role = 'ADMINISTRATOR', status = '0',
   image = 'D:/server/admin.img');

INSERT INTO users VALUES
  (login = 'manager', password = 'manager', email = 'manager@gmail.com', name = 'Петров',
   surname = 'Пётр', telephone = '+380964002092', role = 'MANAGER', status = '0',
   image = 'D:/server/manager.img');

在执行第二次INSERT期间,我收到以下错误user

3 个答案:

答案 0 :(得分:2)

`user_id` int(8) NOT NULL AUTO_INCREMENT

您必须拥有自动增量字段。

答案 1 :(得分:0)

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');

答案 2 :(得分:0)

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数据类型作为主键,因为它会影响主内存索引的性能。而是在大多数RDBMS中使用intlongbigint)。

而且,您可以将其设置为Auto Increment,并且可以轻松将其用作Foreign Key

如果你想让它自动增加,你需要改变一下..

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