zoukankan      html  css  js  c++  java
  • Oracle与Mysql操作表序列

    一、Oracle添加表序列

    CREATE SEQUENCE name -- 序列名

    INCREMENT BY -- 每次加几个
    START WITH -- 从几开始计数
    MINVALUE --- 最小值
    MAXVALUE --- 最大值
    NOCACHE --- 没有缓存
    CACHE --- 缓存 默认为20,最少为2个
    NOCYCLE --- 一直累加,不循环

    例如:

    drop  SEQUENCE FILE_SEQ;
    CREATE SEQUENCE FILE_SEQ
    INCREMENT BY 1   
    START WITH 1     
    MINVALUE 1
    MAXVALUE 99999999999999
    NOCYCLE  
    CACHE 2;

    生成后如图:

    获取当前序列

    select 序列名.currval from dual;  //获取序列的当前值,这个值是可变的。

    需要注意的是:        

    数据库连接成功后,初次执行这句话,会报异常,不能用。

    如果不是你的语句单词拼写错误,就是因为没有先执行下边这句sql,

    获取下一个序列

    select 序列名.nextval from dual 

    二、MySql添加表序列

    第一步:创建Sequence管理表 sequence

    DROP TABLE IF EXISTS sequence; 
    CREATE TABLE sequence ( 
    name VARCHAR(50) NOT NULL, 
    current_value INT NOT NULL, 
    increment INT NOT NULL DEFAULT 1, 
    PRIMARY KEY (name) 
    ) ENGINE=InnoDB;

    第二步:创建取当前值的函数 currval

    DROP FUNCTION IF EXISTS currval; 
    DELIMITER $ 
    CREATE FUNCTION currval (seq_name VARCHAR(50)) 
    RETURNS INTEGER
    LANGUAGE SQL 
    DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT ''
    BEGIN
    DECLARE value INTEGER; 
    SET value = 0; 
    SELECT current_value INTO value 
    FROM sequence
    WHERE name = seq_name; 
    RETURN value; 
    END
    $ 
    DELIMITER ;

    第三步:创建取下一个值的函数 nextval

    DROP FUNCTION IF EXISTS nextval; 
    DELIMITER $ 
    CREATE FUNCTION nextval (seq_name VARCHAR(50)) 
    RETURNS INTEGER
    LANGUAGE SQL 
    DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT ''
    BEGIN
    UPDATE sequence
    SET current_value = current_value + increment 
    WHERE name = seq_name; 
    RETURN currval(seq_name); 
    END
    $ 
    DELIMITER ;

    第四步:创建更新当前值的函数 setval

    DROP FUNCTION IF EXISTS setval; 
    DELIMITER $ 
    CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER) 
    RETURNS INTEGER
    LANGUAGE SQL 
    DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT ''
    BEGIN
    UPDATE sequence
    SET current_value = value 
    WHERE name = seq_name; 
    RETURN currval(seq_name); 
    END
    $ 
    DELIMITER ;

    备注:以上sql中DELIMITER与后面的分号有一个空格或者执行会报错 。

    测试:

    INSERT INTO sequence VALUES ('TestSeq', 0, 1);
    ----添加一个sequence名称和初始值,以及自增幅度  添加一个名为TestSeq 的自增序列
    
    SELECT SETVAL('TestSeq', 10);
    ---设置指定sequence的初始值    这里设置TestSeq 的初始值为10
    
    SELECT CURRVAL('TestSeq');  
    --查询指定sequence的当前值   这里是获取TestSeq当前值
    
    SELECT NEXTVAL('TestSeq');  
    --查询指定sequence的下一个值  这里是获取TestSeq下一个值
  • 相关阅读:
    Windows API 之 Windows Service
    揭开Socket编程的面纱 (一)
    开发中“错误: 意外地调用了方法或属性访问。” 和 第一行错误 的IE 两个问题( JQ 进行转义字符 , 分页JS 调用 时参数问题。)
    结合MSDN理解windows service 服务安装的三个类。
    VFW基础知识(一些定义性质的。从CSDN中得到的。)
    初次接触WIN FORM,深入事件、委托、方法 ,深入看不到的C#探索。
    C#: +(特性 ) + Attitude C#(类)前面或者(方法)前面 (中括号)定义
    VFW系列教程经典
    依赖注入
    Windows Service:SC 和 InstallUtil 区别
  • 原文地址:https://www.cnblogs.com/shawWey/p/9760381.html
Copyright © 2011-2022 走看看