mysql#自定义序列

原文

mysql主键不用自增数字的时候,可以参考如下方式,我抄来的。

-- 创建公共的序列表
DROP TABLE IF EXISTS t_common_sequence;
CREATE TABLE t_common_sequence (
  seq_name VARCHAR(100) NOT NULL COMMENT ‘序列名称‘,
  current_val INT NOT NULL COMMENT ‘当前值‘,
  increment_val INT NOT NULL DEFAULT ‘1‘ COMMENT ‘增长值 默认1‘,
  PRIMARY KEY(seq_name)
)
ENGINE = InnoDB
CHARACTER SET = utf8
COMMENT=‘公共的序列表‘;

-- 创建函数,获取指定名称的 当前序列值
DELIMITER //
DROP FUNCTION IF EXISTS f_currval;
CREATE FUNCTION f_currval(v_seq_name VARCHAR(100))
RETURNS INT
BEGIN
  DECLARE value INT;
  SET value = 0;
  SELECT current_val into value
  FROM t_common_sequence
  WHERE seq_name = v_seq_name;
  RETURN value;
END;
//
DELIMITER ;

-- 创建函数,获取指定名称的 下一个序列值
DELIMITER //
DROP FUNCTION IF EXISTS f_nextval;
CREATE FUNCTION f_nextval(v_seq_name VARCHAR(100))
RETURNS INT
BEGIN
  UPDATE t_common_sequence
  SET current_val = current_val + increment_val
  WHERE seq_name = v_seq_name;
  RETURN f_currval(v_seq_name);
END;
//
DELIMITER ;

-- 创建函数,修改指定名称的序列值,并返回
DELIMITER //
DROP FUNCTION IF EXISTS f_setval;
CREATE FUNCTION f_setval(v_seq_name VARCHAR(100), v_new_val INT)
RETURNS INT
BEGIN
  UPDATE t_common_sequence
  SET current_val = v_new_val
  WHERE seq_name = v_seq_name;
  RETURN f_currval(v_seq_name);
END;
//
DELIMITER ;

insert into t_common_sequence(seq_name,current_val,increment_val) values(‘seq_job‘,1,1);

-- 获取当前序列
select f_currval(‘seq_job‘);

-- 获取下一个序列
select f_nextval(‘seq_job‘);

-- 设置序列值,并返回
select f_setval(‘seq_job‘,10);

select * from t_common_sequence;

原文地址:https://www.cnblogs.com/luohaonan/p/12015597.html

时间: 2024-11-02 21:06:12

mysql#自定义序列的相关文章

Excel中拖放填充与自定义序列

记得刚用excel的时候,对填充功能还不甚了解,以至于做过对相邻挨个单元格粘贴相同公式,然后再更改单元格引用的傻事.自从知道了填充后,往下一拖相应的公式和单元格引用就都做好了.运用填充和序列,虽然不是什么受人顶礼膜拜的技能,但熟练掌握确实可以提高工作效率. 注意数值型需要提供前两个数据,其他类型只要提供前一个数据即可,而且并不需要从序列的第一个数据开始输入.另外除了拖动填充柄还可以双击填充柄进行填充. 当你在一个单元格输不同类型的数据,然后进行拖放,excel会产生不同的效果,比如你在A1输入一

MySQL实现序列(Sequence)效果

MySQL实现序列效果 一般使用序列(Sequence)来处理主键字段,在MySQL中是没有序列的,但是MySQL有提供了自增长(increment)来实现类似的目的,但也只是自增,而不能设置步长.开始索引.是否循环等,最重要的是一张表只能由一个字段使用自增,但有的时候我们需要两个或两个以上的字段实现自增(单表多字段自增),MySQL本身是实现不了的,但我们可以用创建一个序列表,使用函数来获取序列的值. 1. 新建序列表 drop table if exists sequence;   crea

mysql 自定义存储过程和触发器

mysql 自定义存储过程和触发器 --存储过程示范 DROP PROCEDURE IF EXISTS PRO_TEST; CREATE PROCEDURE PRO_TEST(IN NUM_IN INT,OUT NUM_OUT INT,INOUT NUM_INOUT) BEGIN //DO ANYTHING YOU WANT END; 参数解释: in : 就是输入参数,输入参数是会被传入到存储过程作为参数使用,改变它的值将不会改变其原本值,相当于是值传递 out: 此为输出参数,在存储过程中为

MySQL实现序列(Sequence)效果以及在Mybatis中如何使用这种策略

前言: 在oracle中一般使用序列(Sequence)来处理主键字段,在MySQL中是没有序列的,但是MySQL有提供了自增长(increment)来实现类似的目的,但也只是自增,而不能设置步长.开始索引.是否循环等.最重要的是一张表只能设置一个字段使用自增,但有的时候我们需要两个或两个以上的字段实现自增(单表多字段自增),MySQL本身是实现不了的,但我们可以用创建一个序列表,使用函数来获取序列的值 一 MySQL中序列的实现 (1)新建一个测试表: DROP TABLE IF EXISTS

【笔记】【Informatica】自定义序列生成器组件

/************************************************************************** * * Copyright (c) 2003 Informatica Corporation. This file contains * material proprietary to Informatica Corporation and may not be copied * or distributed in any form withou

Mysql 自定义HASH索引带来的巨大性能提升

有这样一个业务场景,需要在2个表里比较存在于A表,不存在于B表的数据.表结构如下: T_SETTINGS_BACKUP | CREATE TABLE `T_SETTINGS_BACKUP` ( `FID` bigint(20) NOT NULL AUTO_INCREMENT, `FUSERID` bigint(20) NOT NULL COMMENT '用户ID', `FDEVICE` varchar(64) NOT NULL DEFAULT '' COMMENT '用户设备号(SN)', `F

python魔法方法-自定义序列

自定义序列的相关魔法方法允许我们自己创建的类拥有序列的特性,让其使用起来就像 python 的内置序列(dict,tuple,list,string等). 如果要实现这个功能,就要遵循 python 的相关的协议.所谓的协议就是一些约定内容.例如,如果要将一个类要实现迭代,就必须实现两个魔法方法:__iter__.next(python3.x中为__new__).__iter__应该返回一个对象,这个对象必须实现 next 方法,通常返回的是 self 本身.而 next 方法必须在每次调用的时

Mysql 自定义HASH索引带来的巨大性能提升----[真相篇]

推倒重来 俗话说no zuo no die why you try,这时候我又忍不住zuo了,吭哧吭哧的把解决过程发上博客,向全世界宣布,哥又搞定个难题. 剧情的发展往往是看起来主角完全掌握了局势的情况下,会突然跳出来一个很牛的反面人物,然后搞得主角很惨,搞的过程中主角开始小宇宙爆发,然后逆袭.这次也不例外.踢场子的人该出现了 一顿狂侃之后,发现我原来牛逼的分析,完全经不起推敲.几个问题 1)  在未做HASH索引之前,为什么大表的ROWS那么大,相当于全表扫描 2)  既然SN是唯一索引,那么

MySQL 自定义函数CREATE FUNCTION实例

分享一个MySQL 自定义函数CREATE FUNCTION的实例.mysql> delimiter $$mysql> CREATE FUNCTION myFunction-> (in_string VARCHAR(255),-> in_find_str VARCHAR(20),-> in_repl_str VARCHAR(20))->-> RETURNS VARCHAR(255)-> BEGIN-> DECLARE l_new_string VARC