MySQL模拟Oracle序列使用
https://www.runoob.com/mysql/mysql-using-sequences.html 一篇笔记开始看
注意:创建序列表时一定要有 主键id自增,否则为只读状态不能修改递增。 序列名字段名都更改一下即可
DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
) ENGINE=InnoDB;
通过以下语句获取使用
<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="column">
select concat('NO',LPAD(NEXTVAL('column'),6,'0'))
</selectKey>
NEXTVAL() 自定义函数,取得下一个值, LPAD()填充函数,concat()拼接函数, 得到结果如 NO000001
实例:使用函数创建自增序列管理表(批量使用自增表,设置初始值,自增幅度)
第一步:创建Sequence管理表 sequence
DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
) ENGINE=InnoDB;
第二步:创建取当前值的函数 currval
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 ;
第三步:创建取下一个值的函数 nextval
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;
第四步:创建更新当前值的函数 setval
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 ;
测试函数功能
当上述四步完成后,可以用以下数据设置需要创建的sequence名称以及设置初始值和获取当前值和下一个值。
INSERT INTO sequence VALUES ('TestSeq', 0, 1);
----添加一个sequence名称和初始值,以及自增幅度 添加一个名为TestSeq 的自增序列
SELECT SETVAL('TestSeq', 10);
---设置指定sequence的初始值 这里设置TestSeq 的初始值为10
SELECT CURRVAL('TestSeq');
--查询指定sequence的当前值 这里是获取TestSeq当前值
SELECT NEXTVAL('TestSeq');
--查询指定sequence的下一个值 这里是获取TestSeq下一个值
MySQL模拟Oracle序列使用的更多相关文章
- mysql实现oracle序列
mysql实现oracle序列的方案1.建表,表结构为:drop table if exists sequence; create table sequence ( seq_name VARCHAR( ...
- mysql 模拟oracle中的序列
因业务需要,把oracle 数据据转成mysql,同时oracle中程序本来一直在用 序列, mysql中没有,所以需要在mysql中新建一个表进行模拟, CREATE TABLE `sequence ...
- MySQL 模拟Oracle邻接模型树形处理
数据库对层次结构的处理模型有好多种,能够依据自己的需求来设计模型.当然最简单的也是最easy设计的模型就是所谓的邻接模型.在这方面,其它数据库比方Oracle 提供了现成的分析方法 connect b ...
- mysql里的序列应用详解
相关知识库: MySQL知识库 相关文章: ibatis中主键的返回 oracle 实现自增auto_increament 用oracle的trigger生成主键的时候和hibernate冲突的讨论 ...
- MySQL与Oracle的主要区别
Mysql与Oracle区别 1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. ...
- MySql和Oracle的日期转换到底有哪些不同?我们来比较一下
1.MySql和Oracle的日期转换 mysql中有2种日期格式DATE和TIME,oracle只有一种日期格式DATE. oracle> select to_char(sysdate,'yy ...
- 数据库MySQL与Oracle的一些去O注意项
一.oracle递归查询语句start with ...connect by prior ① 给你一张表,表里面有主键id,以及该项的父节点parent_id,查询出该表中所有的父子关系节点树? Or ...
- MySQL与Oracle主键Query性能测试结果
测试结果总结如下: 1. 按主键读:SQL形式:SELECT * FROM table WHERE id=?. 1.1. 主键为数字.如果所有ID均不存在,纯比较SQL解析能力.MySQL解析SQL的 ...
- 开发中mysql和oracle的区别
首先就不描述mysql与oracle在整个数据库系统上的区别了,仅从程序员开发的角度来说: 1.主键: mysql一般会用到一个自增的属性,例如设置一个id字段,类型设置为auto increment ...
随机推荐
- 树的直径+质因子——好题!cf1101D
/* 因为质因子很少 状态转移时用dp[u][i]表示结点u的第i个质因子所在的最大深度即可 等价于带限制的求直径 */ #include<bits/stdc++.h> #include& ...
- 在Rancher2中部署Docker-Registry仓库服务
1.docker登陆认证 [root@master ~]# vim /etc/docker/daemon.json { "insecure-registries": [" ...
- kafka-node+socket.io 测试配置
1.安装需要插件 npm install express npm install socket.io npm install kafka-node 2.kafkatest.js文件 var exp ...
- R语言中的线性判别分析_r语言 线性判别分析
R语言中的线性判别分析_r语言 线性判别分析 在R语言中,线性判别分析(Liner Discriminant Analysis,简称LDA),依靠软件包MASS中有线性判别函数lqa()来实现.该函数 ...
- JS 常用的两个客户端输出方法
document.write(str) 描述:在网页的<body>标记,输出str的内容. document意思“文档”,就是整个网页了. document是一个文档对象,代表 ...
- sql还原数据库时候改变数据库名
需求:在做图书馆数据整合时候,由于有两个校区,用的是分离开的同一个数据库,数据库名字都一样的,现在我要整合在一起,我的想法是把两个数据库先还原到我本地,用写好的脚本整合到一起.所以,我还原两个数据库时 ...
- 访问配置信息的URL与配置文件的映射关系
- Han Xin and His Troops(扩展中国剩余定理 Python版)
Han Xin and His Troops(扩展中国剩余定理 Python版) 题目来源:2019牛客暑期多校训练营(第十场) D - Han Xin and His Troops 题意: 看标 ...
- 03-css选择器
<!doctype html><!--声明文档类型 网页文档--> <html><!--根目录标签 父级--> <head><!--网 ...
- LINUX常用操作命令和命令行编辑快捷键
终端快捷键: Ctrl + a/Home 切换到命令行开始 Ctrl + e/End 切换到命令行末尾 Ctrl + l 清除屏幕内容,效果等同于clear Ctrl + u 清除剪切光标之前的内容 ...