oracle迁移mysql自增序列问题

问题说明:
今天从oracle迁移数据到mysql碰到个需求:原先的主键字段需要改成mysql中的自增字段,而且原先数据的值不能变,以后新插入的值从原先数据最大的值开始自增。

解决办法:
构建环境:

mysql> CREATE TABLE   test
    -> (
    -> id INT UNSIGNED NOT NULL PRIMARY KEY,
    -> username VARCHAR(15) NOT NULL
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values(5,'test1');
Query OK, 1 row affected (0.00 sec)

mysql> insert into test values(8,'test2');
Query OK, 1 row affected (0.00 sec)

mysql> insert into test values(4,'test3');
Query OK, 1 row affected (0.00 sec)

mysql> insert into test values(100,'test4'); 
Query OK, 1 row affected (0.00 sec)

将主键改成自增字段:

mysql>  alter table test change id id int AUTO_INCREMENT;
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

插入新数据:

mysql> insert into test(username) values('test6');
Query OK, 1 row affected (0.00 sec)

查看:
发现没问题,直接修改字段为自增序列就可以完成。

mysql> select * from test;
+-----+----------+
| id  | username |
+-----+----------+
|   4 | test3    |
|   5 | test1    |
|   8 | test2    |
| 100 | test4    |
| 101 | test6    |
+-----+----------+
5 rows in set (0.00 sec)

问题延伸:
1、MySQL创建表以后,auto_increment的字段自增值是从1开始的,写入0会被当做null值处理从而写入当前最大值的下一个值(即表定义中auto_increment的值),如果要从0开始如何操作呢?
解决办法:

SET sql_mode='NO_AUTO_VALUE_ON_ZERO';

2、如何指定自增字段从哪个值开始增长,增长步长?
解决办法:

  • auto_increment_offset:表示自增长字段从那个数开始,他的取值范围是1 … 65535
  • auto_increment_increment:表示自增长字段每次递增的量,其默认值是1,取值范围是1 … 65535
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章