• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL实现类似Oracle序列的方案

    MySQL实现类似Oracle的序列

    Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的;

    但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、是否循环等;若需要迁移数据库,则对于主键这块,也是个头大的问题。

    本文记录了一个模拟Oracle序列的方案,重点是想法,代码其次。

    Oracle序列的使用,无非是使用.nextval和.currval伪列,基本想法是:

    1、MySQL中新建表,用于存储序列名称和值;

    2、创建函数,用于获取序列表中的值;

    具体如下:

    表结构为: 

    drop table if exists sequence;  
    create table sequence (  
      seq_name    VARCHAR(50) NOT NULL, -- 序列名称  
      current_val   INT     NOT NULL, --当前值  
      increment_val  INT     NOT NULL  DEFAULT 1, --步长(跨度)  
      PRIMARY KEY (seq_name)  
    );

    实现currval的模拟方案

    create function currval(v_seq_name VARCHAR(50))  
    returns integer 
    begin 
      declare value integer;  
      set value = 0;  
      select current_value into value  
      from sequence 
      where seq_name = v_seq_name;  
      return value;  
    end;

    函数使用为:select currval('MovieSeq'); 

    实现nextval的模拟方案

    create function nextval (v_seq_name VARCHAR(50))  
    return integer 
    begin 
     update sequence 
     set current_val = current_val + increment_val  
     where seq_name = v_seq_name;  
     return currval(v_seq_name);  
    end;

    函数使用为:select nextval('MovieSeq');  

    增加设置值的函数

    create function setval(v_seq_name VARCHAR(50), v_new_val INTEGER)  
    returns integer 
    begin 
     update sequence 
     set current_val = v_new_val  
     where seq_name = v_seq_name;  
    return currval(seq_name);

    同理,可以增加对步长操作的函数,在此不再叙述。

    注意语法,数据库字段要对应上

    use bvboms; 
    DELIMITER $$ 
    create function setval(v_seq_name VARCHAR(50), v_new_val INTEGER) 
    returns integer 
    begin 
     update sequence 
     set current_val = v_new_val 
     where seq_name = v_seq_name; 
    return currval(seq_name);
    end $$
    DELIMITER $$

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    您可能感兴趣的文章:
    • 详解MySQL实时同步到Oracle解决方案
    • Mysql、Oracle中常用的多表修改语句总结
    • mysql和oracle的区别小结(功能性能、选择、使用它们时的sql等对比)
    • mysql数据库和oracle数据库之间互相导入备份
    • 抽取oracle数据到mysql数据库的实现过程
    • Oracle和MySQL的高可用方案对比分析
    • MySQL与Oracle 差异比较之六触发器
    • MySQL与Oracle差异比较之五存储过程&Function
    • MySQL与Oracle差异比较之三 函数
    • 详解Mysql和Oracle之间的误区
    上一篇:mysql实现sequence功能的代码
    下一篇:insert和select结合实现插入某字段在数据库中的最大值+1的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL实现类似Oracle序列的方案 MySQL,实现,类似,Oracle,序列,