mysql 创建sequence

Mysql下载安装:http://blog.csdn.net/yuxiangaaaaa/article/details/54018907

mysql不能像db2和Oracle那样直接create sequence 。

MySQL自增长与Oracle序列的区别: 
自增长只能用于表中的其中一个字段 
自增长只能被分配给固定表的固定的某一字段,不能被多个表共用. 
自增长会把一个未指定或NULL值的字段自动填上.
 

  1. CREATE TABLE Test(  
  2. id   INT NOT NULL AUTO_INCREMENT,  
  3. name VARCHAR(60) NOT NULL,  
  4. PRIMARY KEY (id)  
  5. ) ENGINE=InnoDB;
INSERT INTO Movie (name) VALUES ( 'Liruid' ); 

Oracle、DB2可以这样

  1. CREATE TABLE Test(  
  2. id       INT NOT NULL,  
  3. name     VARCHAR2(60) NOT NULL,    
  4. PRIMARY KEY (id)  
  5. );  
  6. CREATE SEQUENCE TestSeq; 
  1. INSERT INTO Test(id,name,released) VALUES (TestSeq.NEXTVAL,'Liruid');  

下面来看一下mysql下实现sequence:
首先创建sequence表
CREATE TABLE
    tbl_sequence
    (
        seq_name VARCHAR(50) NOT NULL,
        minvalue INT NOT NULL,
        maxvalue INT NOT NULL,
        current_val INT NOT NULL,
        increment_val INT DEFAULT '1' NOT NULL,
        PRIMARY KEY (seq_name)
    )
    ENGINE=MyISAM DEFAULT CHARSET=utf8;


分别对应: seq_name-序列名称,minvalue-最小值,maxvalue-最大值,current_val-当前值,increment_val-增长步数
插入一条数据:
insert into tbl_sequence (seq_name, minvalue, maxvalue, current_val, increment_val) values ('seq_no', 1, 99999999, 1, 1);

创建function _nextval() 用于获取当前序列号
DELIMITER //
create function _nextval(name varchar(50)) 
returns integer   
begin  
declare _cur int;
declare _maxvalue int;  -- 接收最大值
declare _increment int; -- 接收增长步数
set _increment = (select increment_val from tbl_sequence where seq_name = name);
set _maxvalue = (select maxvalue from tbl_sequence where seq_name = name);
set _cur = (select current_val from tbl_sequence where seq_name = name);  
update tbl_sequence                      -- 更新当前值
 set current_val = _cur + increment_val  
 where seq_name = name ;  
if(_cur + _increment >= _maxvalue) then  -- 判断是都达到最大值
      update tbl_sequence  
        set current_val = minvalue  
        where seq_name = name ;
end if;
return _cur;  
end;  
//
DELIMITER ;


说明: DELIMITER //修改sql执行结束标识;
     当前序列达到最大值时,重新刷新到最小值开始,实现sequence循环使用。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值