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說明和

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章