第一步:创建表
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 bj;
DELIMITER $
CREATE FUNCTION bj (seq_name VARCHAR(50))
RETURNS VARCHAR(20)
CONTAINS SQL
BEGIN
DECLARE seq_rules VARCHAR(255);
DECLARE seq_length INT(2);
DECLARE seq_max BIGINT(20);
DECLARE max_id_length INT(20);
DECLARE max_id VARCHAR(20);
SELECT rules,seq.`length`,`max` INTO seq_rules, seq_length,seq_max FROM seq WHERE NAME = seq_name ;
SET max_id = seq_max;
SET max_id_length = CHARACTER_LENGTH(max_id);
#长度不够补0
WHILE seq_length > max_id_length DO
SET max_id = CONCAT('0',max_id);
SET max_id_length = CHARACTER_LENGTH(max_id);
END WHILE;
#替换规则
IF seq_rules IS NOT NULL AND INSTR(seq_rules,'###max_id###') > 0 THEN
SET max_id = REPLACE(seq_rules,'###max_id###',max_id);
END IF;
RETURN max_id;
END$
DELIMITER ;
第三步:创建function nextval
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');
分享到:
相关推荐
在Oracle数据库移植过程中,sequence可能失效,本资源可使失效的sequence重新恢复作用
Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍 很有用哦
oracle中sequence介绍及应用
oracle GoldenGate 同步oracle sequence的步骤
教你如何使用oracle中的sequence,实现主键自动增长
在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢? 事务回滚引起的跳号 不管序列有...
Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的; 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、是否循环等;若需要迁移数据库,...
Sql Server 数据库,插入操作时可以设置,自动编号。但是ORACLE 数据库,具有里一个东西SEQUENCE,在这儿介绍
mysql中实现sequence.pdf
1、在Oracle sequence首先创建sequence create sequence seq_idminvalue 1start with 1increment by 1cache 20; 2、在你的hbm.xml中的配置 seq_id 这样再插入数据的时候,Hibernate会自动生成如下语句: ...
mysql实现sequence功能 1.建立sequence记录表 CREATE TABLE `sys_sequence` ( `seq_name` varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, `min_value` int(11) NOT NULL, `max_value` int(11)...
Oracle自增长主键自动生成类 public static int nextID String table { if table null return 1; table table toLowerCase ; String strKey table; if sequences containsKey strKey { ...
今天从oracle迁移数据到mysql碰到个需求:原先的主键字段需要改成mysql中的自增字段,而且原先数据的值不能变,以后新插入的值从原先数据最大的值开始自增。 解决办法: 构建环境: mysql> CREATE TABLE test -> ( ...
在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。 1、Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。 创建语句如下: CREATE SEQUENCE seqTest INCREMENT...
在开发过程中,可能会用到oracle sequence语句,本文以oracle sequence语句如何重置进行介绍,需要的朋友可以参考下Oracle重置sequence语句1 Sql代码 代码如下: DECLARE n NUMBER(10 ); tsql VARCHAR2(100 ); p_...
oracle 主键自增 给你个例子吧:看看肯定明白了!!! 首先,你要有一张表! CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME VARCHAR(25), PHONE VARCHAR(10), ADDRESS VARCHAR(50) ); ...
sequence-generator简介类似于oracle的sequence,但更加强大支持分布式环境下sequence的生成使用乐观锁和AtomicLong确保sequence的唯一性使用及其简单db scriptCREATE TABLE sequence_database.sequence ( name ...