`

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 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 重置(失效恢复)

    ### Oracle Sequence 重置(失效恢复) 在进行Oracle数据库移植或维护时,可能会遇到Sequence失效的问题。这种情况通常发生在数据迁移后,原有的Sequence不再与表中的最大值相匹配,导致新记录插入时出现ID冲突或者...

    mysql-oracle数据同步

    在MySQL中,我们通常使用`AUTO_INCREMENT`属性来定义自增主键,而在Oracle中,可使用`SEQUENCE`对象来生成序列号。在数据同步过程中,如果需要保持两个数据库的主键一致,需要在插入Oracle时根据MySQL的最新主键值...

    Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍

    Oracle 创建自增字段方法-ORACLE SEQUENCE 的简单介绍 Oracle SEQUENCE 是一种特殊的数据库对象,用于生成一系列唯一的数值,通常用于...Oracle SEQUENCE 是一种灵活而强大的功能,可以满足各种需要唯一标识的场景。

    java通过Mysql实现类似oracle序列功能序列.rar

    在Java应用程序中,如果需要在MySQL环境中实现类似Oracle序列的功能,我们需要自己设计解决方案。以下是一些关键知识点的详细说明: 1. **Java连接MySQL**: - 首先,你需要使用JDBC(Java Database Connectivity...

    ORACLE SEQUENCE的简单介绍

    ### ORACLE SEQUENCE 的详细介绍与应用 #### 一、概述 在数据库开发和管理中,自动编号是一项常用的功能。在 SQL Server 中,我们可以通过自增字段来实现这一功能。而在 Oracle 数据库中,则使用了一个名为 **...

    oracle中sequence介绍及应用

    ### Oracle中的Sequence...通过以上步骤,我们可以看到Sequence在Oracle数据库中的强大功能和广泛用途,不仅能够方便地实现主键自增,还能灵活生成各种类型的序列号。这对于日常的数据处理工作来说是非常实用的工具。

    Oracle Sql语句转换成Mysql Sql语句

    6. **序列**:Oracle使用序列(SEQUENCE)来生成唯一ID,MySQL则常使用自增(AUTO_INCREMENT)字段。 7. **视图和存储过程**:Oracle的视图和存储过程可能需要在MySQL中重新编写,因为两者的语法和权限管理不同。 ...

    让CoolSQL支持Oracle Sequence的GeneratedKey,懂的入

    总的来说,使CoolSQL支持Oracle Sequence的GeneratedKey需要对数据库操作流程有深入理解,无论是通过扩展工具源码、配置、使用JDBC API还是借助ORM框架,都需要结合具体项目需求和CoolSQL的功能来选择合适的方法。...

    mysql数据库转oracle数据库工具

    4. 序列和自增ID处理:MySQL使用AUTO_INCREMENT关键字为表字段生成自增ID,而Oracle则通过序列(SEQUENCE)实现类似功能。转换工具需要处理这些自增ID,确保在Oracle中保持唯一性和连续性。 5. 权限和安全设置:...

    oracle中的sequence实现主键增长

    Oracle中的Sequence是数据库管理系统提供的一种机制,用于生成序列化的整数,通常用于主键或唯一标识符,确保数据的唯一性和有序性。在Oracle中,Sequence不同于其他数据库系统的自增字段,例如SQL Server中的`...

    mysql转换到oracle数据库

    - **Oracle**:通过序列(sequence)来实现类似功能,但在程序设计时需要特别处理(使用Hibernate等ORM框架时则无需额外处理)。 **2. 分页查询** - **MySQL**:使用`LIMIT`关键字实现分页。 - **Oracle**:利用`...

    分享ORACLE SEQUENCE跳号总结

    在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢?  事务回滚引起的跳号  不管序列有...

    MYSQL到ORACLE程序迁移的注意事项

    我们需要创建一个序列(SEQUENCE)来模拟这一功能。例如: ```sql CREATE SEQUENCE sequence_name INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE; ``` 插入数据时,使用`sequence_name.NEXTVAL...

    Mysql和oracle数据库分析.pdf

    此外,MySQL 有 AUTO_INCREMENT 自动增长数据类型,Oracle 则需要创建序列(SEQUENCE)来实现类似功能。 在选择 MySQL 或 Oracle 时,应考虑项目需求、预算、现有技术栈以及团队的技能。对于小规模、低成本的项目,...

    mysql生成oracle序列

    在数据库领域中,不同数据库管理系统(DBMS)之间存在显著差异,比如Oracle与MySQL在处理序列(sequence)的方式上就有本质的不同。Oracle提供了内置的支持来管理自动递增的数字序列,而MySQL并没有原生支持序列这一特性...

    MySQL实现类似Oracle序列的方案

    Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的; 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、是否循环等;若需要迁移数据库,...

    oracle GoldenGate 同步oracle sequence的步骤

    ### Oracle GoldenGate 同步 Oracle Sequence 的步骤 Oracle GoldenGate 是一款强大的数据复制软件,能够实现跨平台的数据复制。在企业级应用环境中,为了确保数据的一致性和完整性,经常需要将源数据库中的序列...

    mysql和Oracle命令的区别

    为了实现类似功能,需要创建一个序列(SEQUENCE)并将其与触发器(TRIGGER)或默认值(DEFAULT)关联,以便在插入新记录时为字段分配序列的下一个值。 2. 单引号的处理: 在 MySQL 中,字符串可以被双引号或单引号...

    oracle与mysql的区别

    Oracle 与 MySQL 的区别 Oracle 和 MySQL 是两种最流行的关系型数据库管理系统,它们之间有许多相同点和不同点。了解它们的优缺点和使用特点对于选择合适的数据库管理系统非常重要。 相同点 1. 都是关系型数据库...

Global site tag (gtag.js) - Google Analytics