数据库迁移,从oracle到mysql的sql修改
Posted haohao1234
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库迁移,从oracle到mysql的sql修改相关的知识,希望对你有一定的参考价值。
1.函数修改
字符串转时间的函数: to_date(#{createEndTime},‘yyyy/mm/dd‘) ===>str_to_date(#{createBeginTime},‘%Y/%m/%d‘)
时间转字符串的函数: to_char(OPERATE_TIME,‘yyyy-MM-dd hh24:mi:ss‘)====> date_format(OPERATE_TIME,‘%Y-%m-%d %H:%i:%S‘)
字符串连接函数: ‘%‘||#{name}||‘%‘ ===== >CONCAT(‘%‘,#{name},‘%‘)
获取当前时间函数: sysdate =========> now()
2.序列
有些主键ID使用序列,mysql没有序列但是有auto_increment字段
2.1 将字段修改为自增
ALTER TABLE T_BLOGROLL_INFO MODIFY id INT AUTO_INCREMENT;
插入时: nextval ----》 null
但是有的insert语句,有两个字段使用了序列, mysql一个表只能主键使用自增,所以考虑模拟序列
2.2 模拟序列
使用表和函数模拟
--新建序列 DROP TABLE IF EXISTS sequence; CREATE TABLE sequence ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, current_value INT NOT NULL, increment INT NOT NULL DEFAULT 1, PRIMARY KEY (name) ) ENGINE=InnoDB; --当前值 DROP FUNCTION IF EXISTS currval; DELIMITER $ CREATE FUNCTION currval (seq_name VARCHAR(50)) RETURNS INTEGER LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT ‘‘ BEGIN DECLARE value INTEGER; SET value = 0; SELECT current_value INTO value FROM sequence WHERE name = seq_name; RETURN value; END $ DELIMITER ; --下个值 DROP FUNCTION IF EXISTS nextval; DELIMITER $ CREATE FUNCTION nextval (seq_name VARCHAR(50)) RETURNS INTEGER LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT ‘‘ 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 LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT ‘‘ BEGIN UPDATE sequence SET current_value = value WHERE name = seq_name; RETURN currval(seq_name); END $ DELIMITER ;
使用
INSERT INTO sequence VALUES (‘TestSeq‘, 0, 1); ----添加一个sequence名称和初始值,以及自增幅度 添加一个名为TestSeq 的自增序列 SELECT SETVAL(‘TestSeq‘, 10); ---设置指定sequence的初始值 这里设置TestSeq 的初始值为10 SELECT CURRVAL(‘TestSeq‘); --查询指定sequence的当前值 这里是获取TestSeq当前值 SELECT NEXTVAL(‘TestSeq‘); --查询指定sequence的下一个值 这里是获取TestSeq下一个值
以上是关于数据库迁移,从oracle到mysql的sql修改的主要内容,如果未能解决你的问题,请参考以下文章
SQL Alchemy - 从 Oracle 迁移到 MySQL 的 Python 脚本
java项目数据库从oracle迁移到mysql 中 java部分的一些修改