MySQL实现类似Oracle序列的函数

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)
);

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

create function nextval(v_seq_name VARCHAR(50))
returns integer
begin
declare rowcount integer;

select count(1) into rowcount
from sequence
where seq_name = v_seq_name;

IF rowcount = 0 THEN
INSERT INTO sequence(seq_name,current_val)
VALUES(v_seq_name,0);
end IF;

update sequence
set current_val = current_val + increment_val
where seq_name = v_seq_name;
return currval(v_seq_name);

end;

时间: 2024-11-07 15:10:34

MySQL实现类似Oracle序列的函数的相关文章

MySQL实现类似Oracle的序列

MySQL实现类似Oracle的序列 2013-10-22 10:33:35     我来说两句      作者:走过的足迹 收藏    我要投稿 MySQL实现类似Oracle的序列 Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的: 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长.开始索引.是否循环等:若需要迁移数据库,则对于主键这块,也是个头大的问题. 本文记录了一个模拟Oracle序列的方案

mysql中类似oracle的over分组实现

今天,看到别人问问题,需求大概是这样的. id s 开始时间 结束时间 1 20 2001-01-01 08:10:20 2001-01-01 08:10:40 1 9 2001-01-01 08:10:41 2001-01-01 08:10:50 1 60 2001-01-01 08:10:51 2001-01-01 08:11:51 1 2 2001-01-01 08:12:51 2001-01-01 08:12:53 2 51 2001-01-01 08:10:00 2001-01-01

mysql实现类似oracle的connect by功能

1.生成测试表与数据:create table mytest (  id int primary key,  nodename varchar(20),  pid int );insert into mytest (id,nodename,pid)values(  1 ,'A', 0);insert into mytest (id,nodename,pid)values(  2 ,'B', 1);insert into mytest (id,nodename,pid)values(  3 ,'C

Mysql,Oracle使用rollup函数完成行列统计

时间 2014-02-25 00:05:38  ITeye-博客 原文  http://53873039oycg.iteye.com/blog/2021445 主题 MySQLOracle数据库 昨天突然在 一篇博客中看到了Mysql也有rollup函数,原博文使用了rollup进行行列统计,原博文链接如下: http://www.cnblogs.com/lhj588/archive/2012/06/15/2550392.html 本博文主要是记录下mysql和oracle使用rollup函数进

重写Oracle的wm_concat函数,自定义分隔符、排序

oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我们不知道oracle中的over函数,也不知道listagg函数. 我们先来看看wm_concat函数能实现什么功能,通俗点==>列传行,如果不明白,请看下面截图(可以看到分隔符默认为','顺序也是杂乱的)          所以,接下来,我们开始重写wm_concat函数(需要注意和需要说明的地方

mysql中返回当前时间的函数或者常量

引用:http://blog.sina.com.cn/s/blog_6d39dc6f0100m7eo.html 1.1 获得当前日期+时间(date + time)函数:now() 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数: current_timestamp()   current_timestamp localtime()   localtime localtimestamp()   localtimestamp     这些日期时间函数,都等同于 now(

Oracle时间日期函数

ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02   13:45:25为例)           Year:              yy two digits 两位年                显示值:07        yyy three digits 三位年                显示值:007        yyyy four digits 四位年                显示值:2007                    Month

mysql重点、视图、事务、备份还原【mysqldump】、mysql编程【触发器、存储函数、存储过程】、存储引擎

1.删除数据需要注意的问题[删除记录delete] 删除数据本身没有太多说的,还是删除表的时候有truncate用法 delete from是逐条删除记录[加不加条件全删,效率低,在删除表方面] truncate是重建表[删除表时效率高] 2.修改数据[update] [一下重点性能] 3.视图(view)[是一张虚拟的表:使客户端在虚拟的表中进行操作] 视图就是一条查询语句的结果[因为查询之后的结果本身就会形成一张表给客户端][视图使用到mysql的内置机制] create view 视图名

【转】oracle内置函数 trunc 使用

原文链接 http://blog.csdn.net/oscar999/article/details/16839417 前言 trunc 是 truncate 的简写. 中文翻译是 “截断”或 “截短”. 表面看上去,应该是对字串或是数字进行截取. 实际上这个函数有两种用法, 而且这两种用法看上去很不一样. 1. 对 number 类型使用.其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去. 2. 对日期类型使用. 对 number 类型使用