mysql中實現(xiàn)類似oracle中的nextval函數(shù)
我們知道m(xù)ysql中是不支持sequence的,一般是建表的時間使這個字段自增。
如 create table table_name(id int auto_increment primary key, ...);
或者alter table table_ame add id int auto_increment primary key //字段,一定設(shè)置為primary key
或者重設(shè)自增字段的起步值 alter table table_name AUTO_INCREMENT=n
但是我們在oracle中經(jīng)常使用sequence_name.nextval,或者在程序中我們使用先select sequence_name.value from dual.如果我們的開發(fā)框架要同時支持oracle和mysql。一般會把取sequence提出來。如果在mysql中提供一個類似的函數(shù),這樣提出來會比較方便些。這是一種使用的場景。下面就說說怎么在mysql中實現(xiàn)一個nextval函數(shù)吧。
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.然后建立函數(shù)
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') ; 搞定。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com