`

mysql中实现类似oracle中的nextval函数

阅读更多

我们知道mysql中是不支持sequence的,一般是建表的时间使这个字段自增。

  如       create table table_name(id int auto_increment primary key, ...);

             或者alter table table_ame add id int auto_increment primary key  //字段,一定设置为primary key

             或者重设自增字段的起步值 alter table table_name AUTO_INCREMENT=n

但是我们在oracle中经常使用sequence_name.nextval,或者在程序中我们使用先select sequence_name.value from dual.如果我们的开发框架要同时支持oracle和mysql。一般会把取sequence提出来。如果在mysql中提供一个类似的函数,这样提出来会比较方便些。这是一种使用的场景。下面就说说怎么在mysql中实现一个nextval函数吧。

1先建一表

CREATE TABLE `sys_sequence` (
    `NAME` varchar(50) NOT NULL,
    `CURRENT_VALUE` int(11) NOT NULL DEFAULT '0',
    `INCREMENT` int(11) NOT NULL DEFAULT '1',
    PRIMARY KEY (`NAME`)
  )

 

 

2.然后建立函数

DELIMITER $$
DROP FUNCTION IF EXISTS `currval`$$
CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS INT(11)
BEGIN
    DECLARE VALUE INTEGER;
    SET VALUE=0;
    SELECT current_value INTO VALUE
    FROM sys_sequence 
    WHERE NAME=seq_name;
    RETURN VALUE;
    END$$
 
DELIMITER ;
 
 
CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name varchar(50)) RETURNS int(11)
 BEGIN
     UPDATE sys_sequence
     SET CURRENT_VALUE = CURRENT_VALUE + INCREMENT
     where  name=seq_name;
     return currval(seq_name);
     END
 
 
CREATE DEFINER=`root`@`%` FUNCTION `setval`(seq_name varchar(50),value integer) RETURNS int(11)
 BEGIN
     update sys_sequence 
     set current_value=value
     where name=seq_name;
     return currval(seq_name);
     END

 

 

 测试下 select nextval('name') ; 搞定。

分享到:
评论

相关推荐

    mysql currval 和 nextval 函数的实现.txt

    mysql currval 和 nextval 函数的实现

    MySQL实现类似Oracle序列的方案

    MySQL实现类似Oracle的序列 Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的; 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、...

    oracle Nextval的用法

    是oracle Nextval的用法,最基本的用法,拔高的不实用

    Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析

    主要介绍了Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析,小编觉得还是挺不错的,这里分享给大家,供需要的朋友参考。

    KMP算法求next 和 nextval

    网上看到的,对kmp算法很好的总结,传上了与大家分享

    Oracle与Mysql主键、索引及分页的区别小结

    区别: 1、主键,Oracle不可以实现自增,mysql可以实现自增。 oracle新建序列,SEQ_USER_Id.nextval 2、索引: mysql索引从0开始,Oracle从1开始。 3、分页, mysql: select * from user order by desc limit n ,m. ...

    Oracle 实现类似SQL Server中自增字段的一个办法

    相关代码如下: 1. 创建sequence: 代码如下:CREATE SEQUENCE SEQU_DATA_DATAINFO INCREMENT BY 1 START WITH 1 NOCYCLE NOCACHE NOORDER;... Select SEQU_PROC_ASSOCIATEINFO.NextVal into tmpVar f

    nextval求法

    数据结构中nextval求法,和好的解题方法,看了很有收获,欢迎大家,欢迎

    数据结构nextval的求法

    有助于理解nextval的求法,便于理解串的操作,具有易理解性等特点

    KMP算法的Next及NextVal序列求解

    今天遇到一个KMP算法的题,以前根本没见过,上网查了好多关于KMP,但是讲的都不是很清楚,看的一头雾水,然后就自己研究做出了一个小程序...希望这个小程序可以帮助大家很好的了解KMP算法Next及NextVal序列的求解算法!

    数据从MySQL迁移到Oracle 需要注意什么

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

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    说明:Oracle中需要创建用户一定是要具有dba(数据库管理员)权限的用户才能创建,而且创建的新用户不具备任何权限,连登录都不可以。 用法:create user 新用户名 identified by 密码 例子: 2. 修改密码 说明:...

    最全的oracle常用命令大全.txt

    ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...

    sqlserver实现oracle的sequence方法

    如果在ORACLE里面用惯了Sequence的兄弟们,要在SqlServer里实现Sequence,就会发现没有现成的Sequence对象可以Create了。那应该怎么办呢?下面我们在SQLServer中实现Sequence

    数据结构实验.zip

    实现功能:采用结构化程序设计思想,编程实现客房管理程序的各个功能函数,从而熟练掌握单链表的创建、输出、查找、修改、插入、删除、排序和复杂综合应用等操作的算法实现。以带表头结点的单链表为存储结构,实现...

    oracle数据库经典题目

    C.Oracle中的同义词分为公有同义词和私有同义词 D.公有同义词在数据库中所有的用户都可以使用;私有同义词由创建它的用户所拥有 25. 下列哪个锁模式不属于Oracle?( D ) A. 共享锁 B.排他锁 C. 行级共享锁 D. ...

    Oracle8i_9i数据库基础

    §2.2 SQL中的单记录函数 50 §2.2.1 单记录字符函数 50 §2.2.2 单记录数字函数 56 §2.2.3 单记录日期函数 62 §2.2.4 单记录转换函数 65 §2.2.5 其它的单记录函数 68 §2.3 SQL中的组函数 73 §2.3.1 多记录组...

    oracle 主键自增 sequence

    oracle 主键自增 给你个例子吧:看看肯定明白了!!! 首先,你要有一张表! CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME VARCHAR(25), PHONE VARCHAR(10), ADDRESS VARCHAR(50) ); ...

    MySQL中不能创建自增字段的解决方法

     引起MySQL不能创建自动增加的字段的原因是在MySQL5.0.2版本中的The Server SQL Mode 中新加了几种 sql_mode,并且在sql的my.ini文件中的sql-mode 默认增加了其中的二种,一个是STRICT_TRANS_TABLES,就是导致auto_...

Global site tag (gtag.js) - Google Analytics