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下一个值
  • 相关阅读:
    C# NewtonJson Serialize and deserialize
    C# bubble sort,selection sort,insertion sort
    C# 7
    C# aggregateexception flatten innerexceptions
    C# monitor keyboard and mouse actions based on MouseKeyHook.
    C# monitor keyboard and print pressed key
    svn命令行
    正则表达式
    对象的浅拷贝跟深拷贝
    conso.log占位符
  • 原文地址:https://www.cnblogs.com/shawWey/p/9760381.html
Copyright © 2011-2022 走看看