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中序列的应用和总结相关推荐

  1. mysql的force的作用_mysql中force Index等一些不是很常用的sql优化介绍

    oracle的hint功能种类很多,对于优化sql语句提供了很多方法. 在mysql里,也有类似的hint功能. 下面为大家介绍一些比较常用的,供大家学习参考. 1.强制索引 FORCE INDEX ...

  2. mysql主键约束和外键约束的作用_MySQL中的主键约束和外键约束

    1.主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如 ...

  3. mysql中视图的概念_MySql中的视图的概念及应用

    视图的基本概念 视图是从一个或几个基本表(或者视图)导出的表.它与基本表不同,是一个虚表. 数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中.所以基本表中的数据发生变化, ...

  4. mysql b tree索引原理_MySQL中B+Tree索引原理

    B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引.B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的.在讲B ...

  5. MySQL中replace主键_Mysql中replace与replace into的用法讲解

    Mysql replace与replace into都是经常会用到的功能:replace其实是做了一次update操作,而不是先delete再insert:而replace into其实与insert ...

  6. mysql 事务隔离详解_MySQL 中事务、事务隔离级别详解

    一.事务的概念 1.事务的概念 2.在mysql中哪些存储引擎(表类型)支持事务哪些不支持 3.事务的四个属性 4.mysql事务的创建与存在周期 5.mysql行为 6.事务的隔离性和性能 7.my ...

  7. mysql去除select换行符_MySQL中去除字段中的回车符和换行符

    问题: 在使用[ load data infile 'D:/node.txt' into table node fields terminated by '\t'; ]语句批量导入如下图所示的aaa. ...

  8. mysql按升序创建索引_Mysql中的降序索引底层实现

    什么是降序索引 大家可能对索引比较熟悉,而对降序索引比较陌生,事实上降序索引是索引的子集. 我们通常使用下面的语句来创建一个索引: 上面sql的意思是在t1表中,针对b,c,d三个字段创建一个联合索引 ...

  9. mysql的explain怎么看_mysql中explain用法详解

    如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序. explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1 ...

最新文章

  1. node python 速度_为什么python在递归上比node.js慢得多
  2. SAP UI5 createBindingContext in local JSON model
  3. 高倍数泡沫装置PHP_找煤机网:BGP高倍数泡沫灭火装置
  4. 《CLR via C#》之线程处理——线程基础
  5. 关于vue父子组件之间事件触发及数据传递问题
  6. 求对一组数据进行排名的算法
  7. python cross val score_sklearn函数:cross_val_score(交叉验证评分)
  8. 【转载】Scarbee Pre-Bass 贝司的使用教程
  9. linux下ssh/scp无密钥登陆方法
  10. python从入门到精通 明日科技 电子书-python从入门到项目实践 (明日科技) 配套视频教程+源码...
  11. 数据库的跨平台设计(转)
  12. python输出语句中引用多个变量
  13. MySQL影院管理系统_数据库三级项目(电影院管理系统)
  14. 面向全局搜索的自适应领导者樽海鞘群算法
  15. linux 服务器时钟同步设置
  16. SQL SEVER select对象名无效
  17. 跟我学-域名解析故障排查技巧
  18. Android 最全 BATJ 大厂面试题整理!
  19. 停车场智能化管理系统
  20. 杀怪物(dfs)题解

热门文章

  1. 基于深度学习模型WideDeep的推荐
  2. PyODPS 中使用 Python UDF
  3. 普惠数据科学应用,九章云极携手伙伴共探智慧未来
  4. 从安全到镜像流水线,Docker 最佳实践与反模式一览
  5. 微服务精华问答 | 在使用微服务架构时,您面临哪些挑战?
  6. 人工智能进行时:人类的未来与未来的人类
  7. Cloud一分钟 | 华为云发布云数据安全白皮书;OPPO携手阿里云举行天池OGeek算法挑战赛...
  8. mysql shell eof_shell脚本 exit命令 EOF用法 数组用法
  9. java sdp_[java,SDP] java 7 SDP 技术/Socket Direct Protocol 2
  10. 查看mysql服务的可视化_Prometheus 监控Mysql服务器及Grafana可视化