MySQL实现类似Oracle的序列
2013-10-22 10:33:35     我来说两句      作者:走过的足迹
收藏    我要投稿
MySQL实现类似Oracle的序列
 
Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的;
但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、是否循环等;若需要迁移数据库,则对于主键这块,也是个头大的问题。
本文记录了一个模拟Oracle序列的方案,重点是想法,代码其次。
Oracle序列的使用,无非是使用.nextval和.currval伪列,基本想法是:1、MySQL中新建表,用于存储序列名称和值;2、创建函数,用于获取序列表中的值;
具体如下:
表结构为
 
 
[sql] 
表结构为:  
1
2
3
4
5
6
7
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的模拟方案
 
1
2
3
4
5
6
7
8
9
10
11
[sql] 
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;
[sql] 
函数使用为:select currval('MovieSeq');  
 
 
实现nextval的模拟方案
1
2
3
4
5
6
7
8
9
[sql] 
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;
[sql] 
函数使用为:select nextval('MovieSeq');  
 
增加设置值的函数
 
1
2
3
4
5
6
7
8
[sql] 
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的序列的更多相关文章

  1. mysql添加类似oracle的伪列及查看表信息

    sql格式: AS rownum, table_name.* ) r, table_name; AS rownum, table_name.字段1, table_name.字段2, table_nam ...

  2. MySQL实现类似Oracle中的nextval和currval

    CREATE TABLE `sequence` ( `seq_name` varchar(50) NOT NULL, `current_val` int(11) NOT NULL, `incremen ...

  3. mysql 实现类似Oracle 或 db2 sequence

    第一步:创建一个索引管理表,其中包含,索引名称.最小值.最大值.当前值.增量,并设置主键为索引名称. CREATE TABLE TB_SEQUENCE ( SEQ_NAME VARCHAR(50) N ...

  4. mysql定时脚本(event),类似oracle的job

    mysql定时脚本(event),类似oracle的job   我有2张表:tb_push_data 和 tb_push_data_log 现在需要每隔一段时间将tb_push_data 符合条件的 ...

  5. MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK

    原文地址:http://it.dataguru.cn/article-3352-1.html 摘要: 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来 ...

  6. Mysql使用event,类似oracle job

    MySQL从5.1开始支持event功能,类似oracle的job功能.有了这个功能之后我们就可以让MySQL自动的执行数据汇总等功能,不用像以前需要操作的支持了.如linux crontab功能. ...

  7. MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK(转)

    1 引擎说明 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现. 有点类似Oracle中的 数据库链接(DBLINK). 要允许这个存储引擎, 当 ...

  8. 用mysql实现类似于oracle dblink的功能

      用mysql实现类似于oracle dblink的功能 首先看看有没有federated 引擎. mysql> show engines; +------------+----------+ ...

  9. 将数据从MySQL迁移到Oracle的注意事项

    将数据从MySQL迁移到Oracle的注意事项1.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动 ...

随机推荐

  1. jQuery/javascript实现简单网页计算器

    <html> <head> <meta charset="utf-8"> <title>jQuery实现</title> ...

  2. Leetcode 26 Remove Duplicates from Sorted Array STL

    题目本身是去重 由于我很懒,所以用了STL库里的unique函数来去重,小伙伴们可以考虑自己实现去重的函数,其实并不复杂. class Solution { public: int removeDup ...

  3. Autoprefixer处理CSS3属性前缀

    http://www.w3cplus.com/css3/autoprefixer-css-vender-prefixes.html

  4. Head First Design Patterns

    From Head First Design Patterns. Design Principle: Idnetify the aspects of your application that var ...

  5. MAT(Memory Analyzer Tool)工具入门介绍(转)

    1.MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗 ...

  6. linux之cp/scp命令+scp命令详解(转)

    名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 说明:将一个档案拷贝至另一档案,或将数 ...

  7. android: SQLite添加数据

    现在你已经掌握了创建和升级数据库的方法,接下来就该学习一下如何对表中的数据进 行操作了.其实我们可以对数据进行的操作也就无非四种,即 CRUD.其中 C 代表添加 (Create),R 代表查询(Re ...

  8. iOS5可能会删除本地文件储存 - Caches 也不安全

    转自:http://blog.163.com/ray_jun/blog/static/1670536422011101225132544/ 出处:http://superman474.blog.163 ...

  9. Visual Studio 2012完美的拥抱GitHub

    详情请查看http://www.aehyok.com/Blog/Detail/73.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链 ...

  10. 针对远程Git代码库使用SSH公匙

    → 运行Git Bash→ 创建SSH公匙和私匙ssh-keygen -t rsa→ 输入SSH公匙存放文件,选择使用默认的,按Enter→ 如果已经存在,提示是否重写,输入n,按Enter→ 打开C ...