mysql 创建sequence

来源:互联网 发布:酷狗铃声制作专家 mac 编辑:程序博客网 时间:2024/05/01 02:57

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循环使用。

1 0
原创粉丝点击