Heim > Datenbank > MySQL-Tutorial > mysql中实现类似oracle中的nextval函数_MySQL

mysql中实现类似oracle中的nextval函数_MySQL

WBOY
Freigeben: 2016-06-01 13:36:43
Original
1250 Leute haben es durchsucht

ORACLE函数

bitsCN.com

mysql中实现类似oracle中的nextval函数

 

我们知道mysql中是不支持sequence的,一般是建表的时间使这个字段自增。

  如       create table table_name(id int auto_increment primary key, ...);

 

             或者alter table table_ame add id int auto_increment primary key  //字段,一定设置为primary key

 

             或者重设自增字段的起步值 alter table table_name AUTO_INCREMENT=n

 

但是我们在oracle中经常使用sequence_name.nextval,或者在程序中我们使用先select sequence_name.value from dual.如果我们的开发框架要同时支持oracle和mysql。一般会把取sequence提出来。如果在mysql中提供一个类似的函数,这样提出来会比较方便些。这是一种使用的场景。下面就说说怎么在mysql中实现一个nextval函数吧。

1先建一表

 

Sql代码  

CREATE TABLE `sys_sequence` (  

    `NAME` varchar(50) NOT NULL,  

    `CURRENT_VALUE` int(11) NOT NULL DEFAULT '0',  

    `INCREMENT` int(11) NOT NULL DEFAULT '1',  

    PRIMARY KEY (`NAME`)  

  )  

 

2.然后建立函数    

 

Sql代码  

DELIMITER $$  

DROP FUNCTION IF EXISTS `currval`$$  

CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS INT(11)  

BEGIN  

    DECLARE VALUE INTEGER;  

    SET VALUE=0;  

    SELECT current_value INTO VALUE  

    FROM sys_sequence   

    WHERE NAME=seq_name;  

    RETURN VALUE;  

    END$$  

   

DELIMITER ;  

   

   

CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name varchar(50)) RETURNS int(11)  

 BEGIN  

     UPDATE sys_sequence  

     SET CURRENT_VALUE = CURRENT_VALUE + INCREMENT  

     where  name=seq_name;  

     return currval(seq_name);  

     END  

   

   

CREATE DEFINER=`root`@`%` FUNCTION `setval`(seq_name varchar(50),value integer) RETURNS int(11)  

 BEGIN  

     update sys_sequence   

     set current_value=value  

     where name=seq_name;  

     return currval(seq_name);  

     END  

 

?

 测试下 select nextval('name') ; 搞定。
 

bitsCN.com
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage