`

MySQL---ORACLE序列解决方案

    博客分类:
  • JAVA
 
阅读更多
MySQL自增长与Oracle序列的区别:
自增长只能用于表中的其中一个字段
自增长只能被分配给固定表的固定的某一字段,不能被多个表共用.
自增长会把一个未指定或NULL值的字段自动填上.

在mysql中添加序列,请看下面的实例:
在MYSQL里有这样一张表:


CREATE TABLE Movie(    
id            INT NOT NULL AUTO_INCREMENT,    
name      VARCHAR(60) NOT NULL,    
released YEAR NOT NULL,    
PRIMARY KEY (id)    
) ENGINE=InnoDB;   

CREATE TABLE Movie(
id           INT NOT NULL AUTO_INCREMENT,
name     VARCHAR(60) NOT NULL,
released YEAR NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;


INSERT INTO Movie (name,released) VALUES ('Gladiator',2000);    
INSERT INTO Movie (id,name,released) VALUES (NULL,'The Bourne Identity',1998);   



在ORACLE是这样的:


CREATE TABLE Movie(    
id           INT NOT NULL,    
name      VARCHAR2(60) NOT NULL,    
released INT NOT NULL,    
PRIMARY KEY (id)    
);    

CREATE SEQUENCE MovieSeq;

INSERT INTO Movie (id,name,released) VALUES (MovieSeq.NEXTVAL,'Gladiator',2000); 



在oracle下为表添加一个触发器,就可以实现mysql自增长功能:


CREATE OR REPLACE TRIGGER BRI_MOVIE_TRG    
BEFORE INSERT ON Movie    
FOR EACH ROW    
BEGIN    
   SELECT MovieSeq.NEXTVAL INTO :new.id FROM DUAL;    
END BRI_MOVIE_TRG;    
.    
RUN;   


INSERT INTO Movie (name,released) VALUES ('The Lion King',1994);   



这样,插件记录就可以成为MYSQL风格:


下面我们来看看如何在mysql数据里使用Oracle序列语法.NEXTVAL 和 .CURVAL.
我们假设在mysql中序列的语法是:


NEXTVAL(’sequence’);
CURRVAL(’sequence’);
SETVAL(’sequence’,value);


下面就是CURRRVAL的实现方案:


DROP TABLE IF EXISTS sequence;    
CREATE TABLE sequence (    
name               VARCHAR(50) NOT NULL,    
current_value INT NOT NULL,    
increment        INT NOT NULL DEFAULT 1,    
PRIMARY KEY (name)    
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

INSERT INTO sequence VALUES ('PROPOSAL_NO',100000,1); 

DROP FUNCTION IF EXISTS currval;    
DELIMITER $    
CREATE FUNCTION currval (seq_name VARCHAR(50))    
RETURNS INTEGER    
CONTAINS SQL    
BEGIN    
   DECLARE value INTEGER;    
   SET value = 0;    
   SELECT current_value INTO value    
   FROM sequence    
   WHERE name = seq_name;    
   RETURN value;    
END$    
DELIMITER ;  

demo: SELECT currval('PROPOSAL_NO'); 

DROP FUNCTION IF EXISTS nextval;    
DELIMITER $    
CREATE FUNCTION nextval (seq_name VARCHAR(50))    
RETURNS INTEGER    
CONTAINS SQL    
BEGIN    
    UPDATE sequence    
    SET           current_value = current_value + increment    
    WHERE name = seq_name;    
    RETURN currval(seq_name);    
END$    
DELIMITER ;  


demo :  select nextval('PROPOSAL_NO');     

DROP FUNCTION IF EXISTS setval;    
DELIMITER $    
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)    
RETURNS INTEGER    
CONTAINS SQL    
BEGIN    
    UPDATE sequence    
    SET           current_value = value    
    WHERE name = seq_name;    
    RETURN currval(seq_name);    
END$    
DELIMITER ; 

demo: select setval('PROPOSAL_NO',150);      

分享到:
评论

相关推荐

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

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

    从 Oracle 合并到 MySQL - NPR 实例分析

    从 Oracle 合并到 MySQL 的 NPR 实例分析深入解析了国家公共广播电台(NPR)在数据库迁移过程中遇到的关键挑战及解决方案。本文将基于提供的标题、描述和部分内容,详细阐述数据库迁移过程中的核心知识点。 ### ...

    MySQL生成Oracle序列参考案例

    通过上述方法,即使MySQL原生不支持序列对象,我们也能够通过一些创造性的解决方案来实现类似Oracle的序列功能。这个案例不仅展示了数据库迁移时的技巧,同时也提供了使用MySQL进行高级数据库操作的例证,对于希望在...

    MySQL实现类似Oracle序列的方案

    这种方式灵活性较高,可以根据需要定制序列的行为,为迁移数据库或在MySQL中实现Oracle序列特性提供了解决方案。通过这种方式,我们可以确保在MySQL中实现类似于Oracle序列的逻辑,从而更好地适应各种业务场景。

    flinkcdc-mysql自定义反序列化器.pdf

    这样的灵活性大大增强了Flink CDC解决方案的适用范围和集成能力。 ### 自定义反序列化器的多种应用场景 在Flink CDC环境中,自定义反序列化器的应用场景非常广泛。它可以用于处理不同类型的数据库,例如除了MySQL...

    mysql数据库转oracle数据库工具

    MySQL到Oracle数据库转换工具是一种专门用于将数据从MySQL数据库系统迁移至Oracle数据库系统的软件解决方案。在数据库管理系统领域,这样的工具非常关键,因为不同的DBMS(数据库管理系统)可能有着不同的数据结构、...

    从Oracle迁移到MySQL的那些坑.pdf

    本文将深入探讨这个过程中的挑战和解决方案,重点关注数据迁移工具的选择及其优缺点。 首先,从Oracle到MySQL的迁移需要考虑的首要问题是选择合适的替代数据库。MySQL和PostgreSQL都是常见的选项,但MySQL因为其...

    C++ Qt 基于数据库Mysql学生信息管理系统.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    oracle到mysql的迁移

    解决方案是确保MySQL的数据库名与Oracle的大小写一致,表名和应用程序中的SQL字符串保持一致,对于字段名,如果在应用程序中使用了双引号,应确保SQL中的大小写与双引号内的字符相同。 2. **保留字问题**:Oracle...

    Mysql和oracle数据库分析.pdf

    Oracle,作为数据库领域的领导者,提供了一套全面的数据库解决方案,包括企业级的数据库产品。Oracle 数据库以其高度的兼容性、可移植性、可连接性和生产效率而闻名。它支持标准 SQL,并能在各种硬件和操作系统平台...

    Oracle至PostgreSQL数据库迁移方案.pptx

    Oracle至PostgreSQL数据库迁移方案是使用Ora2PG工具实现的,该工具是一个Perl语言编写的开源工具,用于将Oracle或MySQL数据库迁移到PostgreSQL数据库。下面是该方案的详细知识点: 一、Ora2PG简介 Ora2PG是一个...

    超详细Oracle教程.pdf

    Sun在高性能数据库技术方面的优势,特别是针对大型数据库的应用,与Oracle的结合为信息官提供了极具吸引力的解决方案。 - **云计算与数据**:随着云计算的兴起,数据成为其核心。Sun展示的云计算环境为Oracle提供了...

    SQLServer,MySQL,Oracle三者的区别.pdf

    Oracle以其高度的开放性著称,允许客户根据需求选择最佳解决方案。Oracle并行服务器技术使得Windows NT平台的扩展性得以提升,同时在UNIX平台上也有很高的集成度。Oracle在性能、兼容性、可移植性、可连接性和高生产...

    mysql 数据移植到oracle

    4. **序列和自增ID**:MySQL的自动递增ID在Oracle中可使用SEQUENCE来实现。 5. **字符集兼容**:确保两个数据库的字符集匹配,避免编码问题。 四、工具和技术: 1. **Oracle SQL Developer Data Pump**:Oracle官方...

    利用mysql实现的雪花算法案例

    例如,MySQL通过`autoincrement`实现自增,Oracle则使用序列。但这些方法在分表后不再适用,因此需要寻找新的解决方案。 2. 解决方案对比 - 数据库表维护:在特定数据库中维护一个自增ID表,每次需要ID时加锁更新,...

    MySQL与Oracle SQL语言差异比较一览

    MySQL和Oracle都是广泛使用的SQL数据库管理系统,它们在SQL语法上存在一些显著的差异。下面将详细探讨这些差异,以...在实际应用中,还需要考虑性能、安全性、扩展性和其他特定需求,以选择最适合的数据库解决方案。

    cnn-bi-lstm-mysql安装配置教程笔记

    MySQL以其高效、稳定和易用性著称,是许多网站和应用程序首选的数据库解决方案。 **MySQL的安装步骤:** 1. **下载MySQL安装包**:访问MySQL官方网站,根据你的操作系统(Windows、Linux或macOS)选择合适的版本...

    dom4j-1.6.1.jar和ojdbc14_g.jar包

    《dom4j-1.6.1.jar与ojdbc14_g.jar:解析与应用》 在Java开发中,库文件扮演着至关重要的角色,它们提供了丰富的功能,帮助...在实际开发中,开发者应根据项目需求,合理选择和利用这些资源,以实现最优的解决方案。

Global site tag (gtag.js) - Google Analytics