问题:评论数据表hotel_info_comments自增ID列达到最大值2147483647,但是并不是每一个ID都被使用了
解决办法:清理数据表的跳跃自增ID,保持ID连贯。
解决步骤:
1. 创建评论临时表
create table `hotel_info_comments_tmp` (
`id` int(11) not null auto_increment comment '自增id',
`hotel_id` varchar(50) not null comment '酒店id',
`hotel_type` varchar(10) not null comment '酒店品牌id',
`out_id` varchar(20) not null default '' comment '来源评论id',
`src` varchar(10) not null comment '评论来源,kuaijie,ctrip,elong……',
`room_id` varchar(10) default null comment '房型id',
`order_id` varchar(50) default '' comment '订单id',
`user_id` varchar(50) default '' comment '用户id',
`parent_id` int(11) default null comment '父评论id',
`content` varchar(2000) not null comment '评论内容',
`side` int(1) not null default '1' comment '正面评价:1;负面评价:0',
`aver_score` float default null comment '平均评分',
`loca_score` float default null comment '位置评分0-5之间',
`faci_score` float default null comment '设备评分0-5之间',
`serv_score` float default null comment '服务评分0-5之间',
`hygi_score` float default null comment '卫生评分0-5之间',
`voted` int(1) not null default '0' comment '点赞',
`is_reply` int(1) not null default '0' comment '是否可回复,1:可回复,0:不可回复',
`status` int(1) not null default '1' comment '是否有效,1:有效,0:无效',
`user_name` varchar(50) default null comment '用户名',
`user_type` varchar(10) default 'customer' comment '用户类别,customer, shopper',
`extra_info` varchar(800) not null comment '附加信息',
`create_time` datetime not null comment '创建时间',
`update_time` timestamp not null default current_timestamp on update current_timestamp comment '更新时间',
primary key (`id`),
unique key `outsrcid` (`src`,`out_id`),
key `idx_hotel_idtype` (`hotel_id`,`hotel_type`,`order_id`),
key `idx_user_order` (`user_id`,`order_id`),
key `idx_user_hotel` (`hotel_id`,`hotel_type`,`user_id`),
key `pid_index` (`parent_id`)
) engine=innodb auto_increment=2949076 default charset=utf8 comment='评论信息表';
2. 将线上表的数据插入临时表(自增ID列不转移)
insert into hotel_info_comments_tmp(`hotel_id`,`hotel_type`,`out_id`,`src`,`room_id`,`order_id`,`user_id`,`parent_id`,`content`,`side`,`aver_score`,`loca_score`,`faci_score`,`serv_score`,`hygi_score`,`voted`,`is_reply`,`status`,`user_name`,`user_type`,`extra_info`,`create_time`,`update_time`) select `hotel_id`,`hotel_type`,`out_id`,`src`,`room_id`,`order_id`,`user_id`,`parent_id`,`content`,`side`,`aver_score`,`loca_score`,`faci_score`,`serv_score`,`hygi_score`,`voted`,`is_reply`,`status`,`user_name`,`user_type`,`extra_info`,`create_time`,`update_time` from hotel_info_comments;
3. 检验线上表的的数据和临时表是否一致
select count(*) from hotel_info_comments;
select count(*) from hotel_info_comments_tmp;
4. 删除线上表
drop table hotel_info_comments;
5. 重命名临时表为线上表
rename table hotel_info_comments_tmp to hotel_info_comments;
*注意事项:尝试过alter table hotel_info_comments drop column id. alter table hotel_info_comments add column id. 表的数据200多万,这样非常慢;当前使用方法不适合更新维护频繁的表。
(sudo ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future easy_install MySQL-python)
相关推荐
以下是对MySQL自增字段相关知识点的详细说明: 1. **自增初始值设定**: - 当创建一个带有AUTO_INCREMENT属性的表时,可以使用`AUTO_INCREMENT=n`选项指定自增字段的初始值。 - 对于已存在的表,可以使用`ALTER ...
在MySQL中,自增ID默认的数据类型是INT,其最大值为`2^32-1`,即4,294,967,295。当超过这个上限时,尝试插入新的记录会导致自增ID不再增加,从而引发主键冲突的错误。 例如,创建一个定义为INT UNSIGNED AUTO_...
在Java编程中,当我们在MySQL数据库中执行插入操作并希望获取新插入记录的自增ID时,有多种方法可以实现这一需求。以下是三种常见的方法,适用于不同的场景。 **方法一:使用PreparedStatement的RETURN_GENERATED_...
- **MyISAM**:由于MyISAM使用独立的文件存储自动增长的ID值,即使在删除了一些记录并重启MySQL服务后,新的记录ID也会继续从上一个最大ID值加1开始计算,即第18条记录的ID将是18。 - **InnoDB**:重启MySQL服务后,...
总结来说,理解MySQL自增ID的工作原理对于数据库设计和管理至关重要。在规划数据库时,应考虑可能的数据增长,并选择适当的数据类型来确保ID的可用性。在进行大量插入和删除操作时,尤其需要注意ID的管理和自增值的...
以下是对MySQL自增ID的详细解释。 1. 为什么建议将自增列设为主键? MySQL的InnoDB存储引擎使用主键作为聚集索引,这意味着数据记录直接存储在主键索引的叶子节点上。如果设置自增列为主键,新记录将按照递增顺序...
- **MAXVALUE**:序列可以生成的最大值。设置为`999999999999999999`是为了确保序列有足够大的范围。 - **START WITH**:序列开始生成的第一个值。 - **INCREMENT BY**:序列每次调用增加的值。 - **NOCACHE**:这个...
1. 删除表中的所有数据,但保留自增 ID 的最大值。这可以通过 `DELETE FROM 表名` 来完成,如示例所示: ```sql $sql = "DELETE FROM $table_vote"; mysql_query($sql, $link); ``` 2. 修改表的自增 ID 属性,将其...
- 当自增ID达到其最大值时,如果继续尝试插入新行,MySQL将尝试分配超过最大值的ID,这可能导致错误或异常行为,因此需要确保ID字段足够大以适应预期的记录数量。 在设计数据库表时,合理选择自增ID和数据类型非常...
首先,我们了解MySQL自增ID的工作原理。MySQL的自增ID特性是为每个表单独维护的,当新记录插入时,系统会自动递增并分配一个唯一的ID。但在分表场景下,这个特性不再适用,因为不同表之间无法共享同一个自增序列。 ...
要重置自增字段的起始值,可以在创建表时使用`AUTO_INCREMENT=n`选项,或者使用`ALTER TABLE table_name AUTO_INCREMENT=n`命令。例如,如果你想要自增字段从10开始,你可以执行`ALTER TABLE table_name AUTO_...
在这个场景中,我们关注的是如何使用Prometheus来统计MySQL自增主键的剩余可用百分比,以预防生产环境中可能出现的主键溢出问题。 MySQL自增主键是数据库表中一种常见的标识符,它会自动递增以确保每个记录的唯一性...
如果用 int unsigned (int,4个字节 ), 我们可以算下最大当前声明的自增ID最大是多少,由于这里定义的是 int unsigned,所以最大可以达到2的32幂次方 – 1 = 4294967295。 这里有个小技巧,可以在创建表的时候,直接...
面试官:”那自增主键达到最大值了,用完了怎么办?” 你:”what,没复习啊!!” (然后,你就可以回去等通知了!) 这个问题是一个粉丝给我提的,我觉得挺有意(KENG)思(B)! 于是,今天我们就来谈一谈,这个自增主键...
1、MySQL的自增ID用完了会怎样 2、达到最大值了怎么办 3、有遇到过ID用完的情况吗
为了解决这个问题,我们需要在转换之前确定现有数据的最大值,然后在转换`id`字段为`AUTO_INCREMENT`后,确保新的自增值从这个最大值开始。在上述例子中,通过`ALTER TABLE`语句将`id`字段改为自动增加,MySQL自动地...