MySQL如何设置自动增长序列SEQUENCE的方法

目录
  • 1.创建表emp_seq,用来存放sequence值:
  • 2.手动插入数据:
  • 3.定义函数 nextval:
  • 4.恢复默认的语句结束符:
  • 6.执行外部SQL脚本命令
  • 7.成功导入sql脚本后,那咱们就需要验证一下,进入mysql,并进入数据库,我这里是jsd170101
  • 8.下面说说如何应用在DML语句中

本文主要介绍了MySQL如何设置自动增长序列 SEQUENCE,具体如下:

解决思路:由于mysql不带sequence,所以要手写的,创建一张储存sequence的表(emp_seq),然后手动插入一条数据 ,最后自定义一个函数来处理要增长的值。

1.创建表emp_seq,用来存放sequence值:

说明:

  • name这个列,是为了让函数更好的通过条件来进行DML操作,
  • start_value,储存了自增序列开始时的值,
  • increment_value,存储了自增序列步进的值。
create table emp_seq (
	name varchar(50) not null primary key,
	start_value int not null,
	increment_value int not null default 1
);

2.手动插入数据:

说明:

  • ‘empno'见名之意,
  • 第一个1,说明序列从1开始,
  • 第二个1,说明序列每次增长1。
insert into emp_seq values('empno',1,1);

3.定义函数 nextval:

说明:

  • DELIMITER // ->定义语句结束符,其中//前面有一个空格,平常我们都是用分号;作为语句结束符。但是创建的函数中,是多条语句组合而成,每条语句也是使用分号;作为语句结束符,若没有重新定义语句结束符,数据库会认为declare i int;这里的分号是结束符,会报错。所以在这我们重新定义一个语句结束符//,直到end;//这里才会结束整段代码。
  • function 自定义函数 (user-defined function UDF),它是对MySQL功能的一个扩展,
  • declare 声明变量
DELIMITER //
create function nextval(str varchar(50)) returns integer
begin
	declare i int;
	set i=(select start_value from emp_seq where name=str);
	update emp_seq
		set start_value=i+increment_value
	where name=str;
return i;
end;
//
 

4.恢复默认的语句结束符:

说明:

  • DELIMITER ; ->定义语句结束符(其中delimiter后跟了一个空格一个分号),也就是把分号作为语句结束符。因为上面已经把函数建立好了,所以在这里重新定义结束符,为的是以后更方便的执行SQL语句,平常我们使用SQL语句,习惯用分号作为结束符的。
DELIMITER ;

5.为了更方便的执行SQL命令,我把这些代码复制到记事本中,并把文件存到D盘根目录下,改名为emp_seq.sql

 

6.执行外部SQL脚本命令

若没有提示,说明建立成功。如何执行外部SQL脚本命令,客官可移步:MySQL执行外部sql脚本文件的命令

 

7.成功导入sql脚本后,那咱们就需要验证一下,进入mysql,并进入数据库,我这里是jsd170101

OK,连续执行sql语句获取序列,从上图清楚的看到,结果从1开始,每次自增1

8.下面说说如何应用在DML语句中

我的数据库里已有empno=6的数据,这里我让start_value增长到7,再插入一条信息:

查看下结果:

到此这篇关于MySQL如何设置自动增长序列SEQUENCE的方法的文章就介绍到这了,更多相关MySQL 自动增长序列SEQUENCE内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Mysql的Sequence实现方法

    团队更换新框架.新的业务全部使用新的框架,甚至是新的数据库--Mysql. 这边之前一直是使用oracle,各种订单号.流水号.批次号啥的,都是直接使用oracle的sequence提供的数字序列号.现在数据库更换成Mysql了,显然以前的老方法不能适用了. 需要新写一个: •分布式场景使用 •满足一定的并发要求 找了一些相关的资料,发现mysql这方面的实现,原理都是一条数据库记录,不断update它的值.然后大部分的实现方案,都用到了函数. 贴一下网上的代码: 基于mysql函数实现 表结构

  • mysql实现sequence功能的代码

    mysql实现sequence功能 1.建立sequence记录表 CREATE TABLE `sys_sequence` ( `seq_name` varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, `min_value` int(11) NOT NULL, `max_value` int(11) NOT NULL, `current_value` int(11) NOT NULL, `increment_value` i

  • 在MySQL中创建实现自增的序列(Sequence)的教程

    项目应用中,曾有以下一个场景: 接口中要求发送一个int类型的流水号,由于多线程模式,如果用时间戳,可能会有重复的情况(当然概率很小). 所以想到了利用一个独立的自增的sequence来解决该问题. 当前数据库为:mysql 由于mysql和oracle不太一样,不支持直接的sequence,所以需要创建一张table来模拟sequence的功能,理由sql语句如下: 第一步:创建--Sequence 管理表 DROP TABLE IF EXISTS sequence; CREATE TABLE

  • MySQL如何设置自动增长序列SEQUENCE的方法

    目录 1.创建表emp_seq,用来存放sequence值: 2.手动插入数据: 3.定义函数 nextval: 4.恢复默认的语句结束符: 6.执行外部SQL脚本命令 7.成功导入sql脚本后,那咱们就需要验证一下,进入mysql,并进入数据库,我这里是jsd170101 8.下面说说如何应用在DML语句中 本文主要介绍了MySQL如何设置自动增长序列 SEQUENCE,具体如下: 解决思路:由于mysql不带sequence,所以要手写的,创建一张储存sequence的表(emp_seq),

  • Mybaits处理mysql主键自动增长出现的不连续问题解决

    问题产生 设置了mysql主键自动增长,但因为删除字段的操作导致主键不连续 解决方法 step1:在mapper.xml文件中添加update标签设置自动增长的增量为1 alter table student AUTO_INCREMENT=1; <!--StudentMapper.xml文件--> <mapper namespace="StudentMapper"> ... ... <update id="alter"> alte

  • MyBatis处理mysql主键自动增长出现的不连续问题解决

    问题产生 设置了mysql主键自动增长,但因为删除字段的操作导致主键不连续 解决方法 step1:在mapper.xml文件中添加update标签设置自动增长的增量为1 alter table student AUTO_INCREMENT=1; <!--StudentMapper.xml文件--> <mapper namespace="StudentMapper"> ... ... <update id="alter"> alte

  • jQuery实现textarea自动增长宽高的方法

    本文实例讲述了jQuery实现textarea自动增长宽高的方法.分享给大家供大家参考,具体如下: <script type="text/javascript"> $(function(){ $("#iptcont").bind("keydown",function(e){ var key = e.which,that = this,h = 20; if (key == 13) { var brs = $(this).val().sp

  • 通过实例了解Oracle序列Sequence使用方法

    序列 序列(Sequence)是用来生成连续的整数数据的对象.序列常常用来作为主键中增长列, 序列中的可以升序生成,也可以降序生成.创建序列的语法是: 语法结构:创建序列 CREATE SEQUENCE sequence_name [START WITH num] [INCREMENT BY increment] [MAXVALUE num|NOMAXVALUE] [MINVALUE num|NOMINVALUE] [CYCLE|NOCYCLE] [CACHE num|NOCACHE] 语法解析

  • SQL Server 自动增长清零的方法

    方法1: 复制代码 代码如下: truncate table TableName 删除表中的所有的数据的同时,将自动增长清零. 如果有外键参考这个表,这个方法会报错(即便主键表和外键表都已经没有数据),请参考方法2. PS: 用delete删除数据,自动增长不会清零的哦. 方法2: 复制代码 代码如下: DBCC CHECKIDENT('TableName', RESEED, 0) 不删除表的数据,直接重置自动增长的值.

  • Oracle与Mysql自动增长列(id)的区别

    这里所说的自动增长列,主要是指一个表中主键id的自动增长. Oracle与Mysql不同,不能在CREATE建立表时设置自动增长列功能. Oracle必须通过创建sequence序列来实现自动增加列的功能. 首先要建立序列(当然必须要先建好表,添加好主键约束,这列假设约束名为test_sequence) create sequence test_sequence                     [increment by 1]--增长的步长                     [st

  • 深入Mysql,SqlServer,Oracle主键自动增长的设置详解

    1.把主键定义为自动增长标识符类型MySql在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: 复制代码 代码如下: create table customers(id int auto_increment primary key not null, name varchar(15));insert into customers(name) values("name1"),("name2");select id fr

  • 设置MySQL自动增长从某个指定的数开始方法

    自增字段,一定要设置为primary key. 以指定从1000开始为例. 1 创建表的时候就设置: CREATE TABLE `Test` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(50) NOT NULL, `SEX` varchar(2) NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=MEMORY AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 CHECKSU

  • mysql把主键定义为自动增长标识符类型

    1.把主键定义为自动增长标识符类型 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: create table customers(id int auto_increment primary key notnull, name varchar(15)); insert into customers(name) values("name1"),("name2"); 一旦把id设为auto_increment类型,my

随机推荐