【MySQL】实现自增函数sequence
2024-09-01 01:19:17
前言
当前数据库为: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的下一个值
最新文章
- ViewPager轮播图
- fielderror里的fieldName代表的是jsp里的fieldName还是Action类的成员变量?(待解答)
- Velocity教程 (zhuan)
- 前端必须掌握30个CSS3选择器
- 一行很好的JS代码
- 【HDU1402】【FNT版】A * B Problem Plus
- oracle在linux配置信息
- windows下安装配置Xampp
- SOUI入门
- 使用composer下拉组件失败,出现killed解决办法
- 4_CSRF
- NodeJs之文件上传
- 20155324 实验5 MSF基础应用
- html超出显示省略号
- CF527E Data Center Drama(构造+欧拉回路)
- Android利用Mediapalyer播放本地资源文件声音
- Jmeter学习之-获取登录的oken值(1)
- 阶段01Java基础day17集合框架03
- css学习2
- [No0000167]CPU内部组成结构及指令执行过程
热门文章
- 将多个jpg文件以追加形式合并成一个文件_delphi教程 bmp 合并 http://www.west.cn/www/info/58058-1.htm
- LeetCode 114. Flatten Binary Tree to Linked List 动态演示
- 异常检测算法的Octave仿真
- Mac010--IDEA安装及应用
- Node.js实战6:定时器,使用timer延迟执行。
- Pikachu漏洞练习平台实验——php反序列化、XXE、SSRF(九)
- CCNA 之 一 网络基础
- dp(01背包问题)
- web调试代理工具Whistle
- kvm 修改虚拟机密码