暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mysql自增列迁移到SUNDB如何实现

原创 科蓝SUNDB编辑部 2022-12-08
508

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;

最后修改时间:2023-07-17 14:53:39
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论