oracle转mysql总结

oracle转mysql总结

ares-sdk初始开发测试使用的是oracle数据库,由于宁波通商的特殊需要,必须把数据库环境从oracle转向mysql。 现对转换过程中出现的问题及经验总结如下:

主键生成策略

创建一个专门记录序列的表sequence,记录有当前序列号,序列的间隔如+1

创建记录当前序列的表
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;
INSERT INTO sequence VALUES (‘MovieSeq‘,3,5);

创建一个获取当前序列的function
DROP FUNCTION IF EXISTS currval;
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;

获取下一个数值..先在sequence里面调用update当前最大数值+1然后再调用currval获得当前数值
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 ;

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 ;

如果以上语句执行有异常请先执行这句:set global logbintrustfunctioncreators=TRUE;

插入时的主键生成:
mysql:  SELECT MMC.NEXTVAL(‘SEQ_MD_ENTITY_ATTRIBUTE‘)
oracle: select MMC.SEQ_MD_ENTITY_ATTRIBUTE.nextval from dual

日期处理

mysql : DATE_FORMAT(NOW(),‘%Y-%m-%d  %H:%i:%s‘)
oracle:  TO_CHAR(SYSDATE,‘YYYY-MM-DD hh24:mi:ss‘)

nvl函数

mysql: ifnull(A.USER_KPI,0)
oracle: NVL(A.USER_KPI,0)

to_number

oracle 的 to_number
mysql不需要

关键字、保留字

涉及到关键字,mysql关键字需要加上``号
mysql:  PARA_VALUE as `KEY`
oracle : PARA_VALUE as KEY

rownum

Unknown column ‘rownum‘ in ‘where clause‘
oracle自定义sql中如果使用了rownum=1   mysql中可以写成limit 1

大小写问题

在oracle中一般情况下不区分大小写
但在MySQL中,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。
解决的办法是把mysql的数据库名和oracle的大小写保持一致,
表名与应用程序中sql字符串中的表名保持一致,
如果应用程序中字段名用了双引号,那请把sql中的字段名大小写与双引号里的字符保持一致。
如果你的应用程序所引用的表名、字段没有统一大小写,那麻烦就大了。

字符串截取

mysql:
截取log_data从逗号开始之后的字符:
SELECT substring_index(log_data,‘,‘,-1)
  FROM nbts.log where event_id=‘150002‘ and log_id =‘a2a421734c7e47dd8a8b‘;

截取log_data从逗号开始之前的字符:
SELECT substring_index(log_data,‘,‘,1)
  FROM nbts.log where event_id=‘150002‘ and log_id =‘a2a421734c7e47dd8a8b‘;

oracle :
截取log_data从逗号开始之后的字符:
SELECT SUBSTR(log_data, INSTR(log_data, ‘,‘, 1, 1) +1) AS app_ver_id
  FROM nbts.log where event_id=‘150002‘ and log_id =‘a2a421734c7e47dd8a8b‘;

截取log_data从逗号开始之前的字符:
SELECT SUBSTR(log_data,0,INSTR(log_data, ‘,‘, 1, 1) - 1) AS app_ver_id
  FROM nbts.log where event_id=‘150002‘ and log_id =‘a2a421734c7e47dd8a8b‘;

字符串格式化

mysql:CONCAT
oracle:TO_CHAR

主键长度问题

在迁移到mysql后可能会出现主键长度太短,需要增加长度。
时间: 2024-10-18 20:42:52

oracle转mysql总结的相关文章

oracle、mysql时区设置对timestamp的不同影响

因最近国际去Oracle上MySQL,这就不可避免的涉及到时区和timestamp问题.做一下实验,总结一下. Oracle 首先看下oracle concepts对timestamp的定义: The TIMESTAMP data type is an extension of the DATE data type. It stores fractional seconds in addition to the information stored in the DATE data type.

Oracle也Mysql的区别

Mysql与Oracle区别总结如下:1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高.2. Oracle支持大并发,大访问量,是OLTP最好的工具.3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能.4.Oracle也Mysql操作上的一些区别①主键Mysql一般使用自动增长类型,在创

数据库笔试面试题库(Oracle、MySQL等)

数据库笔试面试题库(Oracle.MySQL等) ⊙ [DB笔试面试67]在Oracle中,关于表分区下列描述不正确的是()⊙ [DB笔试面试65]在Oracle中,哪一种表分区方式建议的分区数是2的幂(2.4.8等),以获得最平均的数据发布()⊙ [DB笔试面试63]要以NAME's address is ADDR格式返回数据,以下SQL语句正确的是⊙ [DB笔试面试61]以下关于数据模型要求错误的是()⊙ [DB笔试面试59]以下关于视图叙述不正确的是()⊙ [DB笔试面试57]下列关于SQ

数据库迁移之从oracle 到 MySQL

方式一: 手动方式导入导出 手动的方式导入, 就是操作步骤会比较繁琐一些. 对Table 的结构和数据: 1. 使用 SQL Developer 把 oracle 的 table 的schema 和 Data(.sql 和 .xls) 导出 2. 使用 MySQL 的 WorkBench 创建 Table 和导入数据. 这里语法上会稍微有一些不同, 所以需要略微做一些调整. 对于View 来说, 特别是复杂的有子查询的Oracle View 说, 要导入到MySQL 看起来就不是那么容易了. 方

oracle转Mysql中,varchar2(10)和number应该转换为什么类型? (转)

一. varchar2(10)和number应该转换为什么类型? oracle转成mysql时:varchar2(10)可以转成varchar(10)number则要看oracle中存储的具体是什么类型的数据:1.如果是整型,那么mysql中,用int即可:2.如果是带小数位的,那么mysql中可用numeric类型. 注:mysql中没有varchar2(10)和number这两个数据类型 二. Mysql varchar VS Oracle varchar2 mysql和oracle做数据同

oracle迁移mysql数据库注意

oracle转mysql修改: 1. substr() substr( string , 0, 10) 这里测试 必须从 第一位获取 既是 substr(string , 1 , 10)2. to_char() 只能用做oracle的函数,兼容oracle和mysql故 改为concat( … , '');  这里 使用了两个, 一个 是将类似 int 转为 string 3. select * from (select * from table2)   这里 要加别名4. nvl函数 被改为

SqlServer 、Oracle 、MySql 的区别

一.sqlserver 优点: 易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能.与许多其他服务器软件紧密关联的集成性.良好的性价比等: 为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势.从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要.作为一个完备的数据库和数据分析包,SQLServer为快速开发新一代企业级商业应用程序.为企业赢得核心竞争优势打开了胜利之门.作为重要的基准测试可伸缩性和速度奖的记录保持者,SQLS

Oracle、MySql、Sql Server比对

1.    价格 MySql:廉价(部分免费):当前,MySQL採用双重授权(DualLicensed),他们是GPL和MySQLAB制定的商业许可协议.假设你在一个遵循GPL的自由(开源)项目中使用MySQL,那么你能够遵循GPL协议免费使用MySQL.否则,你须要购买MySQLAB制定的那个商业许可协议.Windows $200,Unix或Linux自行安装免费,.Unix或Linux第三方安装$200. Sql Server:适中. SQL 2008 标准版:[1CPU 无限用户 R2 版

Oracle与Mysql主键、索引及分页的区别小结

Oracle与Mysql主键.索引及分页的区别,学习oracle的朋友可以参考下 区别: 1.主键,Oracle不可以实现自增,mysql可以实现自增. oracle新建序列,SEQ_USER_Id.nextval 2.索引: mysql索引从0开始,Oracle从1开始. 3.分页, mysql: select * from user order by desc limit n ,m. 表示,从第n条数据开始查找,一共查找m条数据. Oracle:select * from user sele

mybatis的jdbcType和javaType、oracle,MySQL的对应类型

Mybatis中jdbcType和javaType的对应关系 1 JDBC Type Java Type 2 CHAR String 3 VARCHAR String 4 LONGVARCHAR String 5 NUMERIC java.math.BigDecimal 6 DECIMAL java.math.BigDecimal 7 BIT boolean 8 BOOLEAN boolean 9 TINYINT byte 10 SMALLINT short 11 INTEGER int 12