1. 环境:
CentOS 7.6–3.10.0-693.el7.x86_64
数据库版本及架构:
数据库架构 单机, 数据库版本为 Release 5.0 22.1.0 revision(28cd72e)
2. 问题描述:
Mysql中自增列迁移到SUNDB该如何实现
说明:Mysql的 auto_increment 自增列对应到SUNDB该如实现,历史数据迁移该如何操作
3. 解决方案:
SUNDB 自增列的实现方式和Oracle数据库一致,通过内部sequence实现。
模式:
1)不允许用户指定值 GENERATED ALWAYS AS IDENTITY
(由于不允许用户指定值,历史数据迁移要充分考虑该模式是否能满足需求)
2)允许用户指定值 GENERATED BY DEFAULT AS IDENTITY
(指定则使用指定值否则使用默认值,注意划分指定值和默认值取值范围避免产生交集导致违反唯一约束)
样例:
Mysql
CREATE TABLE T33 (
ID NUMBER( 10, 0 ) AUTO_INCREMENT
, NAME VARCHAR( 10 )
);
SUNDB
CREATE TABLE T33
(
ID NUMBER( 10, 0 )
GENERATED BY DEFAULT AS IDENTITY
(
START WITH 1
INCREMENT BY 1
MAXVALUE 9223372036854775807
MINVALUE 1
NO CYCLE
CACHE 20
)
, NAME VARCHAR( 10 )
);
取值:
# Mysql
SELECT LAST_INSERT_ID(); 或 select @@IDENTITY; – Mysql 自增列是在表中该列最大值的基础上产生下一个值
# SUNDB
select last_identity_value() from dual; 这个能查询到同一个session里最后一次生成的序列值
如执行一条insert 后通过以上sql能查询到最后的序列值。 但如果同时插入多条或多个表只能取到最后一条记录生成的序列值。
如果会话没有执行过insert 那么查询到的值为 null
迁移:
迁移历史数据则建表时指定自增列序列 start with 值大于该列既有数据的最大值。
调整序列初始值则:alter table table_name alter column column_name restart with 10;




