关闭

ERROR 1062 (23000): ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1'

204人阅读 评论(0) 收藏 举报
分类:
测试环境
1.MYSQL版本
+------------+
| version()  |
+------------+
| 5.7.18-log |
+------------+

2.建表语句
mysql> show create table M;                                                                                                                                                                                                                                                                                                                                                CREATE TABLE 
create table `M` (
  `id` int(10) NOT NULL DEFAULT '0',
  `domain` varchar(255) DEFAULT NULL,
  `ip` int(10) unsigned DEFAULT NULL,
  `ipv6` varbinary(16) DEFAULT NULL,
  `intime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `domain` (`domain`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

3.表结构

mysql> desc M;
+-----------+------------------+------+-----+-------------------+-----------------------------+
| Field     | Type             | Null | Key | Default           | Extra                       |
+-----------+------------------+------+-----+-------------------+-----------------------------+
| id        | int(10)          | NO   | PRI | 0                 |                             |
| domain    | varchar(255)     | YES  | UNI | NULL              |                             |
| ip        | int(10) unsigned | YES  |     | NULL              |                             |
| ipv6      | varbinary(16)    | YES  |     | NULL              |                             |
| intime    | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-----------+------------------+------+-----+-------------------+-----------------------------+

测试如下:

在建表的时候没有使用自增ID,这样会引业务后续出现小问题,现在通过数据交换的方式更改M表ID为自增ID

注:生产环境谨慎执行

1.直接更改M表时,是更改不了的,有主键冲突
mysql> alter table M change id id int not null auto_increment;
ERROR 1062 (23000): ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY'


2.可以用数据交换的方式来进行更改,创建新表M_new

mysql> CREATE TABLE M_new LIKE M;

Query OK, 0 rows affected (0.49 sec)


3.更改新表M_new为自增ID

mysql> ALTER TABLE M_new 
    -> CHANGE COLUMN `Id` `Id` INT(10) NOT NULL AUTO_INCREMENT;
Query OK, 0 rows affected (0.79 sec)
Records: 0  Duplicates: 0  Warnings: 0


4.将M表数据插入到M_new表中,注意select的列是除了ID列

mysql> insert into M_new (domain,ip,ipv6,intime) select domain,ip,ipv6,intime from M;


5.数据插入完成后,交换表名
mysql>RENAME TABLE M TO M_old, M_new TO M;

Query OK, 0 rows affected (0.34 sec)

6.再次查看M表,现在是自增ID了

mysql> desc M;
+-----------+------------------+------+-----+-------------------+-----------------------------+
| Field     | Type             | Null | Key | Default           | Extra                       |
+-----------+------------------+------+-----+-------------------+-----------------------------+
| Id        | int(10)          | NO   | PRI | NULL              | auto_increment              |
| domain    | varchar(255)     | YES  | UNI | NULL              |                             |
| ip        | int(10) unsigned | YES  |     | NULL              |                             |
| ipv6      | varbinary(16)    | YES  |     | NULL              |                             |
| intime    | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
|+-----------+------------------+------+-----+-------------------+-----------------------------+

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

PAIP.MYSQL设置远程账户登陆总结

MYSQL设置远程账户登陆总结 1. ERROR 2003 (HY00 1 2. ERROR 1045 (28000): Access denied for user ...
  • attilax
  • attilax
  • 2013-02-20 18:38
  • 18301

mysql主键设置成auto_increment时,进行并发性能测试出现主键重复Duplicate entry 'xxx' for key 'PRIMARY'

mysql主键设置成auto_increment时,进行并发性能测试出现主键重复Duplicate entry 'xxx' for key 'PRIMARY' 解决方法: 在my.cnf的[mysql...
  • kingofworld
  • kingofworld
  • 2014-09-28 15:45
  • 3779

mysql 在修改添加字段(alter table 表名 add column 或者 modify column)且带unique时提示duplicate entry for key的原因以及解决方案

今天在公司临时维护一张表时,我作了一个小动作,添加一个字段,并且设置为unique时,尽然无法添加字段,我当时就纳闷了,写了这么多sql,这么奇怪的问题还是第一次见,不多说,直接看图 【我的sql...
  • df981011512
  • df981011512
  • 2016-11-29 10:38
  • 4362

mysql InnoDB表插入操作报duplicate entry for primary 却查询不到重复的主键

在腾讯实习的为数不多的最后几天日子里,碰到了一个很奇怪的mysql插入失败,具体情形如下: 这是show create table schedule_detail_material;的结果 这是s...
  • huanghanqian
  • huanghanqian
  • 2017-01-12 15:07
  • 860

keystone 导入数据出错

第一次安装openstack。执行官方key
  • robin_lvxiongbin
  • robin_lvxiongbin
  • 2014-08-28 11:39
  • 841

Hibernate保存数据自动生成主键出现奇怪异常Duplicate entry '0' for key 1

今天在写一块程序的时候,出现了一个异常信息,捣鼓了一上午,终于找到了异常原因——不仅仅是简单的主键冲突问题 测试数据库:MySQL 异常信息如下: org.hibernate.excepti...
  • mycdsnstudy
  • mycdsnstudy
  • 2013-04-30 11:48
  • 2484

Duplicate entry导致mysql主从复制中断的事故

mysql> show slave status\G *************************** 1. row *************************** ...
  • u012708106
  • u012708106
  • 2013-12-09 20:03
  • 1852

关于导很多jar包和类库之后出现的问题

最近公司项目需求导了很多的jar包和类库。遇到了许多问题,在这个过程中各种错误各种报,还都是编译能通过运行通不过的错误。给人整的那叫一个懵。在这里将自己遇到的问题以及解决方案分享出来以供大家共同学习 ...
  • qq_33234564
  • qq_33234564
  • 2016-06-01 22:51
  • 5536

hibernate flush 机制与调用 saveOrupdate 后不立即打印 sql 的问题

今天遇到了一个奇怪的问题,hibernate保存时,不打印sql语句。 为了加深印象,知其然,知其所以然。   之后单纯用原始的Hibernate框架做了一些验证,并且打开执行SQL打印输出...
  • u013126379
  • u013126379
  • 2016-06-30 15:58
  • 883

android studio导入第三方库引发的问题和解决方法

今天想在android studio上使用slidingmenu,然后层层的困难就出现了,几近崩溃,还好最后是解决了。 先来说说怎么导入: 1.将slidingmenu复制到app同级目录下 2.Fi...
  • vice_Q
  • vice_Q
  • 2016-02-02 19:10
  • 3372
    个人资料
    • 访问:819323次
    • 积分:9030
    • 等级:
    • 排名:第2417名
    • 原创:137篇
    • 转载:45篇
    • 译文:9篇
    • 评论:44条
    简介
    此博客为笔者的DT工作记录,欢迎一起交流学习工作中的点滴,若博客文章观点存在原理的错误、纰漏,笔者非常欢迎各位不保留地指出
    最新评论