MySQL中序列的作用_MySql中序列的应用和总结
Mysql中的序列主要用于主键,主键是递增的字段,不可重复。
Mysql与Oracle不同的是,它不支持原生态的sequence,需要用表和函数的组合来实现类似序列的功能。
1.首先创建序列的主表
/*
Navicat Premium Data Transfer
Source Server : MySql_192.168.10.7
Source Server Type : MySQL
Source Server Version : 100113
Source Host : 192.168.10.7:3306
Source Schema : config_fao_atp
Target Server Type : MySQL
Target Server Version : 100113
File Encoding : 65001
Date: 17/04/2020 17:38:44
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sequence
-- ----------------------------
DROP TABLE IF EXISTS `sequence`;
CREATE TABLE `sequence` (
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`current_value` int(11) NOT NULL,
`increment` int(11) NOT NULL DEFAULT 1,
PRIMARY KEY (`name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of sequence
-- ----------------------------
INSERT INTO `sequence` VALUES ('artableSeq', 10021776, 1);
SET FOREIGN_KEY_CHECKS = 1;
其次创建如下三个函数,它们的功能分别是:查询当前序列值、查询下一个序列值、设置序列的起始值。
/*
Navicat Premium Data Transfer
Source Server : MySql_192.168.10.7
Source Server Type : MySQL
Source Server Version : 100113
Source Host : 192.168.10.7:3306
Source Schema : config_fao_atp
Target Server Type : MySQL
Target Server Version : 100113
File Encoding : 65001
Date: 17/04/2020 17:38:44
*/
-- ----------------------------
-- Function structure for currval
-- ----------------------------
DROP FUNCTION IF EXISTS `currval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE value INTEGER;
SET value = 0;
SELECT current_value INTO value
FROM sequence
WHERE name = seq_name;
RETURN value;
END
;;
DELIMITER ;
-- ----------------------------
-- Function structure for nextval
-- ----------------------------
DROP FUNCTION IF EXISTS `nextval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS int(11)
DETERMINISTIC
BEGIN
UPDATE sequence
SET current_value = current_value + increment
WHERE name = seq_name;
RETURN currval(seq_name);
END
;;
DELIMITER ;
-- ----------------------------
-- Function structure for setval
-- ----------------------------
DROP FUNCTION IF EXISTS `setval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `setval`(seq_name VARCHAR(50), value INTEGER) RETURNS int(11)
DETERMINISTIC
BEGIN
UPDATE sequence
SET current_value = value
WHERE name = seq_name;
RETURN currval(seq_name);
END
;;
DELIMITER ;
3.最后初始化序列数据,测试序列功能。
----添加一个sequence名称和初始值,以及自增幅度 添加一个名为filegenSeq 的自增序列
INSERT INTO sequence VALUES ('filegenSeq', 10000000, 1);
---设置指定sequence的初始值 这里设置filegenSeq 的初始值为10
SELECT SETVAL('filegenSeq', 10000000);
--查询指定sequence的当前值 这里是获取filegenSeq当前值
SELECT CURRVAL('filegenSeq');
--查询指定sequence的下一个值 这里是获取filegenSeq下一个值
SELECT NEXTVAL('filegenSeq');
MySQL中序列的作用_MySql中序列的应用和总结相关推荐
- mysql的force的作用_mysql中force Index等一些不是很常用的sql优化介绍
oracle的hint功能种类很多,对于优化sql语句提供了很多方法. 在mysql里,也有类似的hint功能. 下面为大家介绍一些比较常用的,供大家学习参考. 1.强制索引 FORCE INDEX ...
- mysql主键约束和外键约束的作用_MySQL中的主键约束和外键约束
1.主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如 ...
- mysql中视图的概念_MySql中的视图的概念及应用
视图的基本概念 视图是从一个或几个基本表(或者视图)导出的表.它与基本表不同,是一个虚表. 数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中.所以基本表中的数据发生变化, ...
- mysql b tree索引原理_MySQL中B+Tree索引原理
B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引.B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的.在讲B ...
- MySQL中replace主键_Mysql中replace与replace into的用法讲解
Mysql replace与replace into都是经常会用到的功能:replace其实是做了一次update操作,而不是先delete再insert:而replace into其实与insert ...
- mysql 事务隔离详解_MySQL 中事务、事务隔离级别详解
一.事务的概念 1.事务的概念 2.在mysql中哪些存储引擎(表类型)支持事务哪些不支持 3.事务的四个属性 4.mysql事务的创建与存在周期 5.mysql行为 6.事务的隔离性和性能 7.my ...
- mysql去除select换行符_MySQL中去除字段中的回车符和换行符
问题: 在使用[ load data infile 'D:/node.txt' into table node fields terminated by '\t'; ]语句批量导入如下图所示的aaa. ...
- mysql按升序创建索引_Mysql中的降序索引底层实现
什么是降序索引 大家可能对索引比较熟悉,而对降序索引比较陌生,事实上降序索引是索引的子集. 我们通常使用下面的语句来创建一个索引: 上面sql的意思是在t1表中,针对b,c,d三个字段创建一个联合索引 ...
- mysql的explain怎么看_mysql中explain用法详解
如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序. explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1 ...
最新文章
- node python 速度_为什么python在递归上比node.js慢得多
- SAP UI5 createBindingContext in local JSON model
- 高倍数泡沫装置PHP_找煤机网:BGP高倍数泡沫灭火装置
- 《CLR via C#》之线程处理——线程基础
- 关于vue父子组件之间事件触发及数据传递问题
- 求对一组数据进行排名的算法
- python cross val score_sklearn函数:cross_val_score(交叉验证评分)
- 【转载】Scarbee Pre-Bass 贝司的使用教程
- linux下ssh/scp无密钥登陆方法
- python从入门到精通 明日科技 电子书-python从入门到项目实践 (明日科技) 配套视频教程+源码...
- 数据库的跨平台设计(转)
- python输出语句中引用多个变量
- MySQL影院管理系统_数据库三级项目(电影院管理系统)
- 面向全局搜索的自适应领导者樽海鞘群算法
- linux 服务器时钟同步设置
- SQL SEVER select对象名无效
- 跟我学-域名解析故障排查技巧
- Android 最全 BATJ 大厂面试题整理!
- 停车场智能化管理系统
- 杀怪物(dfs)题解
热门文章
- 基于深度学习模型WideDeep的推荐
- PyODPS 中使用 Python UDF
- 普惠数据科学应用,九章云极携手伙伴共探智慧未来
- 从安全到镜像流水线,Docker 最佳实践与反模式一览
- 微服务精华问答 | 在使用微服务架构时,您面临哪些挑战?
- 人工智能进行时:人类的未来与未来的人类
- Cloud一分钟 | 华为云发布云数据安全白皮书;OPPO携手阿里云举行天池OGeek算法挑战赛...
- mysql shell eof_shell脚本 exit命令 EOF用法 数组用法
- java sdp_[java,SDP] java 7 SDP 技术/Socket Direct Protocol 2
- 查看mysql服务的可视化_Prometheus 监控Mysql服务器及Grafana可视化