> alter table `activity_dj_actor_info_log` change `id` `id` bigint NOT NULL AUTO_INCREMENT , add primary key(id);
Query OK, 3144627 rows affected (1 min 32.32 sec)
Records: 3144627 Duplicates: 0 Warnings: 0
> show create table activity_dj_actor_info_log\G
*************************** 1. row ***************************
Table: activity_dj_actor_info_log
Create Table: CREATE TABLE `activity_dj_actor_info_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`cnMaster` varchar(50) NOT NULL,
。。。
PRIMARY KEY (`id`),
UNIQUE KEY `dss_cnMaster` (`cnMaster`,`serverId`,`guid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2150192178 DEFAULT CHARSET=utf8
和开发的同事简单沟通之后,没过一会查看就发现数值是递增了。
> select max(id) from activity_dj_actor_info_log;
+------------+
| max(id) |
+------------+
| 2150195418 |
+------------+
而对于这个问题,自己也简单总结了下,其实最开始处理的时候就不严谨,导致了后面的不断修复,如果一步到位就不会有这么多的麻烦了。
所以在本地有简单测试了下。
CREATE TABLE `activity_dj_actor_info_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cnMaster` varchar(50) NOT NULL,
。。。
PRIMARY KEY (`id`),
UNIQUE KEY `dss_cnMaster` (`cnMaster`,`serverId`,`guid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2147483647 DEFAULT CHARSET=utf8;
插入一部分测试数据。
> insert into activity_dj_actor_info_log select *from activity_log.activity_dj_actor_info_log limit 1,1000;
Query OK, 1000 rows affected (0.07 sec)
Records: 1000 Duplicates: 0 Warnings: 0
修改表字段数据类型
> alter table activity_dj_actor_info_log modify `id` bigint NOT NULL AUTO_INCREMENT;
Query OK, 1000 rows affected (0.43 sec)
Records: 1000 Duplicates: 0 Warnings: 0
再次查看递增序列就修改完善了。
> show create table activity_dj_actor_info_log;
| Table | Create Table
| activity_dj_actor_info_log | CREATE TABLE `activity_dj_actor_info_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`cnMaster` varchar(50) NOT NULL,
。。。
PRIMARY KEY (`id`),
UNIQUE KEY `dss_cnMaster` (`cnMaster`,`serverId`,`guid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2147483647 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
在这一点上,Oracle的处理和MySQL还是存在一些区别,还是需要严格区别对待。