Oracle转Mysql汇总

背景:基于Mybatis+Oracle的源码转为Mybatis+Mysql

1、数据库转换

sequnce

CREATE TABLE `sys_sequence` (
  `name` varchar(64) NOT NULL COMMENT '序列名称',
  `value` bigint(20) NOT NULL COMMENT '当前值',
  `MIN_VALUE` bigint(20) NOT NULL COMMENT '最小值',
  `MAX_VALUE` bigint(20) NOT NULL COMMENT '最大值',
  `increment` int(11) NOT NULL DEFAULT '1' COMMENT '步长(跨度) ',
  `nocycle` int(11) NOT NULL DEFAULT '1' COMMENT '不循环',
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
DROP FUNCTION IF EXISTS currval;
DELIMITER $  
CREATE FUNCTION currval (seq_name VARCHAR(64))
             RETURNS BIGINT  
             LANGUAGE SQL  
             DETERMINISTIC  
             CONTAINS SQL  
             SQL SECURITY DEFINER  
             COMMENT ''  
BEGIN
  DECLARE VALUE BIGINT;
  SET VALUE = 0;
  SELECT current_value INTO VALUE
  FROM sys_sequence
  WHERE NAME = seq_name;
  RETURN VALUE;
  END$  
DELIMITER ;  

-- 加锁

DROP FUNCTION IF EXISTS nextval;
DELIMITER $  
CREATE FUNCTION `nextval`(seq_name VARCHAR(64))
RETURNS BIGINT
LANGUAGE SQL  
DETERMINISTIC  
CONTAINS SQL
SQL SECURITY DEFINER  
COMMENT ''  
BEGIN
DECLARE _cur BIGINT;  
SELECT current_value INTO _cur FROM sys_sequence WHERE NAME= seq_name FOR UPDATE;
UPDATE sys_sequence SET current_value = _cur + _increment  
WHERE NAME=seq_name;  
RETURN _cur;
  END$  
DELIMITER ; 

DROP FUNCTION IF EXISTS setval;
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(64), VALUE BIGINT)
RETURNS BIGINT
LANGUAGE SQL  
DETERMINISTIC  
CONTAINS SQL
SQL SECURITY DEFINER  
BEGIN
   UPDATE sys_sequence
   SET          current_value = VALUE
   WHERE NAME = seq_name;
   RETURN currval(seq_name);
END$
DELIMITER ;

插入sequence:

INSERT  INTO `sys_sequence`(`name`,`value`,`MIN_VALUE`,`MAX_VALUE`,`increment`,`nocycle`) VALUES 
('sequence_name',初始值,最小值,最大值,步长,不循环),

日期

https://www.cnblogs.com/caicaizi/p/7813518.html

日期Datetime默认值使用now()函数在mybatis5.7+版本没问题

函数

https://www.cnblogs.com/HondaHsu/p/3641190.html

字段类型

nvarchar --->varchar

Date ---->Datetime

Number

建表脚本

DROP TABLE IF EXISTS table_name;

去掉表空间相关语句描述

表注释:ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='';

字段末尾加注释  TELPHONE         varchar(32) comment  comment ' '

唯一索引:CREATE UNIQUE INDEX  index_name  ON table_name(column_name[,其他字段])

视图:DROP VIEW IF EXISTS  view_name

CREATE VIEW view_name AS  SELECT ...... FROM ....

建主键:

ALTER TABLE table_name ADD(
      CONSTRAINT pk_name
      PRIMARY KEY
      (column_name[,其他字段])
      );

2、mapper文件转换修改

mysql 类似to_char() to_date()函数
  mysql日期和字符相互转换方法
  date_format(date,'%Y-%m-%d') -------------->oracle中的to_char();
  str_to_date(date,'%Y-%m-%d') -------------->oracle中的to_date();
  %Y:代表4位的年份
  %y:代表2为的年份
  %m:代表月, 格式为(01……12)
  %c:代表月, 格式为(1……12)
  %d:代表月份中的天数,格式为(00……31)
  %e:代表月份中的天数, 格式为(0……31)
  %H:代表小时,格式为(00……23)
  %k:代表 小时,格式为(0……23)
  %h: 代表小时,格式为(01……12)
  %I: 代表小时,格式为(01……12)
  %l :代表小时,格式为(1……12)
  %i: 代表分钟, 格式为(00……59)
  %r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)
  %T:代表 时间,格式为24 小时(hh:mm:ss)
  %S:代表 秒,格式为(00……59)
  %s:代表 秒,格式为(00……59)
  SELECT DATE_FORMAT(20130111191640,'%Y-%m-%d %H:%i:%s')

  DATE_FORMAT(20130111191640,'%Y-%m-%d %H:%i:%s')             //没有横杠时其实就是数字了

按照https://www.cnblogs.com/softidea/p/5309299.html说明和

发布了36 篇原创文章 · 获赞 5 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/ccren/article/details/103142790