zoukankan      html  css  js  c++  java
  • [转]MySQL如何设置自动增长序列 SEQUENCE

    原文地址:https://blog.csdn.net/czbqoo01/article/details/70148516

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

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

    说明:

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

    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 声明变量
     
    1.  
    2. DELIMITER //
    3. create function nextval(str varchar(50)) returns integer
    4. begin
    5. declare i int;
    6. set i=(select start_value from emp_seq where name=str);
    7. update emp_seq
    8. set start_value=i+increment_value
    9. where name=str;
    10. return i;
    11. end;
    12. //
    13.  

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

    说明:

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

     
    1. DELIMITER ;
    2.  

    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,再插入一条信息:
     
     
    查看下结果:
     

  • 相关阅读:
    Ubuntu部分命令的使用简介
    向Ubuntu的Dash中添加图标
    Ubuntu下实现gedit支持nesC语法高亮
    zoj 1453 Surround the Trees(凸包求周长)
    fzu 1015 土地划分(判断线段相交+求出交点+找规律)
    zoj 1648 判断线段是否相交
    hdu 1086(计算几何入门题——计算线段交点个数)
    zoj 1081 判断点在多边形内
    判点在直线上,三角形内
    poj 1269 Intersecting Lines(判相交交点与平行)
  • 原文地址:https://www.cnblogs.com/dirgo/p/9566308.html
Copyright © 2011-2022 走看看