首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

mysql 仿照oracle的sequence功能

2012-08-26 
mysql模仿oracle的sequence功能第一步:创建表 DROP TABLE IF EXISTS `seq` CREATE TABLE `seq` (`id` BIG

mysql 模仿oracle的sequence功能





第一步:创建表

DROP TABLE IF EXISTS `seq`; CREATE TABLE `seq` (   `id` BIGINT(11) NOT NULL AUTO_INCREMENT,   `name` VARCHAR(255) NOT NULL COMMENT 'sequence名称',   `max` BIGINT(11) NOT NULL DEFAULT '1' COMMENT '最大id',   `length`INT(2) NOT NULL DEFAULT '1' COMMENT '生成序列后的长度,以0补全',   `next` INT(2) NOT NULL DEFAULT '1' COMMENT '增长的长度',   `rules` VARCHAR(255) DEFAULT NULL COMMENT '规则以###max_id###做为替换',   PRIMARY KEY (`id`),   UNIQUE KEY `fk_name` (`name`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 




第二步:创建function bj
DROP FUNCTION IF EXISTS nextval; DELIMITER $ CREATE FUNCTION nextval (seq_name VARCHAR(50)) RETURNS VARCHAR(20) CONTAINS SQL BEGIN UPDATE seq SET `max` = `max` + NEXT WHERE NAME = seq_name; RETURN bj(seq_name); END$ DELIMITER ;


第四步: 插入两个seq
INSERT INTO `seq` (`name`,`max`,`length`,`next`,`rules`) VALUES ('complaint_seq_b', '0', '7', '1', 'B###max_id###' ); INSERT INTO `seq` (`name`,`max`,`length`,`next`,`rules`) VALUES ('complaint_seq_a', '0', '7', '1','A###max_id###'); 


第五步:测试

SELECT nextval('complaint_seq_b'); SELECT nextval('complaint_seq_a'); 

热点排行