zoukankan      html  css  js  c++  java
  • ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'

    OS: centos 6.3
    DB: 5.5.14

    测试创建yoon测试表,没有主键,没有索引,基础数据内容如下:

    mysql> select * from yoon;
    +----+----------+------+
    | id | name | user |
    +----+----------+------+
    | 1 | ""##!aa | NULL |
    | 2 | z2 | NULL |
    | 3 | z3 | NULL |
    | 4 | z4 | NULL |
    | 5 | z5 | NULL |
    +----+----------+------+
    5 rows in set (0.00 sec)


    测试通过一条命令将id设为自增主键,命令alter table yoon add constraint auto_increment primary key yoon(id);创建成功,但是插入2条数据发现报错,场景如下:

    mysql> desc yoon;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | NO   |     | 0       |       |
    | name  | varchar(20) | YES  |     | NULL    |       |
    | user  | varchar(20) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    3 rows in set (0.01 sec)


    mysql> select * from yoon;
    +----+----------+------+
    | id | name     | user |
    +----+----------+------+
    |  1 | ""##!aa | NULL |
    |  2 | z2       | NULL |
    |  3 | z3       | NULL |
    |  4 | z4       | NULL |
    |  5 | z5       | NULL |
    +----+----------+------+
    5 rows in set (0.00 sec)


    mysql> show index from yoon;
    Empty set (0.00 sec)


    mysql> alter table yoon add constraint auto_increment primary key yoon(id);
    Query OK, 0 rows affected (0.29 sec)
    Records: 0  Duplicates: 0  Warnings: 0


    mysql> show index from yoon;
    +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | yoon  |          0 | PRIMARY  |            1 | id          | A         |           6 |     NULL | NULL   |      | BTREE      |         |               |
    +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    1 row in set (0.01 sec)


    mysql> insert into yoon(name,user) values ('z','HHH'); 
    Query OK, 1 row affected (0.02 sec)


    mysql> select * from yoon;
    +----+----------+------+
    | id | name     | user |
    +----+----------+------+
    |  0 | z        | HHH  |
    |  1 | ""##!aa | NULL |
    |  2 | z2       | NULL |
    |  3 | z3       | NULL |
    |  4 | z4       | NULL |
    |  5 | z5       | NULL |
    +----+----------+------+
    6 rows in set (0.01 sec)


    mysql> insert into yoon(name,user) values ('z6','HHH'); 
    ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'


    mysql> delete from yoon where id=0;
    Query OK, 1 row affected (0.01 sec)


    mysql> show index from yoon;
    +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | yoon  |          0 | PRIMARY  |            1 | id          | A         |           6 |     NULL | NULL   |      | BTREE      |         |               |
    +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    1 row in set (0.00 sec)

    mysql> select * from yoon;
    +----+----------+------+
    | id | name     | user |
    +----+----------+------+
    |  1 | ""##!aa | NULL |
    |  2 | z2       | NULL |
    |  3 | z3       | NULL |
    |  4 | z4       | NULL |
    |  5 | z5       | NULL |
    +----+----------+------+
    5 rows in set (0.00 sec)


    mysql> alter table yoon modify column id int auto_increment;
    Query OK, 5 rows affected (0.03 sec)
    Records: 5  Duplicates: 0  Warnings: 0


    mysql> select * from yoon;
    +----+----------+------+
    | id | name     | user |
    +----+----------+------+
    |  1 | ""##!aa | NULL |
    |  2 | z2       | NULL |
    |  3 | z3       | NULL |
    |  4 | z4       | NULL |
    |  5 | z5       | NULL |
    |  6 | z6       | HHH  |
    +----+----------+------+
    6 rows in set (0.00 sec)

    总结:主要原因alter语法使用不正确,有时候不报错,并不代表命令正确。具体语法如下:
    http://dev.mysql.com/doc/refman/5.0/en/alter-table.html

  • 相关阅读:
    Java基础总结--面向对象1
    Java基础总结--数组
    Java基础总结--方法(函数)
    Java基础总结--流程控制
    Java基础总结--变量、运算符总结
    Java基础总结--Java编程环境变量配置
    OpenWrt源码结构
    OpenWRT介绍
    内存管理
    makefie中的几种用法
  • 原文地址:https://www.cnblogs.com/hankyoon/p/5169618.html
Copyright © 2011-2022 走看看