前言

当前数据库为:mysql
由于mysql和oracle不太一样,不支持直接的sequence,所以需要创建一张table来模拟sequence的功能,理由sql语句如下:

步骤

1.创建sequence表

CREATE TABLE `sequence` (
`name` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '序列的名字',
`current_value` int(11) NOT NULL COMMENT '序列的当前值',
`increment` int(11) NOT NULL DEFAULT '' COMMENT '序列的自增值',
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

2.创建取当前值的函数

DROP FUNCTION IF EXISTS currval;
DELIMITER $
CREATE FUNCTION currval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE value INTEGER;
SET value = 0;
SELECT current_value INTO value
FROM sequence
WHERE name = seq_name;
RETURN value;
END
$
DELIMITER ;

3.创建取下一个值函数

DROP FUNCTION IF EXISTS nextval;
DELIMITER $
CREATE FUNCTION nextval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SET current_value = current_value + increment
WHERE name = seq_name;
RETURN currval(seq_name);
END
$
DELIMITER ;

4.创建更新当前值函数

DROP FUNCTION IF EXISTS setval;
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SET current_value = value
WHERE name = seq_name;
RETURN currval(seq_name);
END
$
DELIMITER ;

数据库结构

调用

INSERT INTO sequence VALUES ('testSeq', 0, 1);--添加一个sequence名称和初始值,以及自增幅度

SELECT SETVAL('testSeq', 10);--设置指定sequence的初始值

SELECT CURRVAL('testSeq');--查询指定sequence的当前值

SELECT NEXTVAL('testSeq');--查询指定sequence的下一个值

最新文章

  1. ViewPager轮播图
  2. fielderror里的fieldName代表的是jsp里的fieldName还是Action类的成员变量?(待解答)
  3. Velocity教程 (zhuan)
  4. 前端必须掌握30个CSS3选择器
  5. 一行很好的JS代码
  6. 【HDU1402】【FNT版】A * B Problem Plus
  7. oracle在linux配置信息
  8. windows下安装配置Xampp
  9. SOUI入门
  10. 使用composer下拉组件失败,出现killed解决办法
  11. 4_CSRF
  12. NodeJs之文件上传
  13. 20155324 实验5 MSF基础应用
  14. html超出显示省略号
  15. CF527E Data Center Drama(构造+欧拉回路)
  16. Android利用Mediapalyer播放本地资源文件声音
  17. Jmeter学习之-获取登录的oken值(1)
  18. 阶段01Java基础day17集合框架03
  19. css学习2
  20. [No0000167]CPU内部组成结构及指令执行过程

热门文章

  1. 将多个jpg文件以追加形式合并成一个文件_delphi教程 bmp 合并 http://www.west.cn/www/info/58058-1.htm
  2. LeetCode 114. Flatten Binary Tree to Linked List 动态演示
  3. 异常检测算法的Octave仿真
  4. Mac010--IDEA安装及应用
  5. Node.js实战6:定时器,使用timer延迟执行。
  6. Pikachu漏洞练习平台实验——php反序列化、XXE、SSRF(九)
  7. CCNA 之 一 网络基础
  8. dp(01背包问题)
  9. web调试代理工具Whistle
  10. kvm 修改虚拟机密码