开发过程中使用MySQL和Oracle的差异

前言

小型项目中使用MySQL的占比还是相对较高的,但是也不排除随着项目的扩大,产品的丰富,或者甲方的财大气粗,有可能会有MySQL换成Oracle。那么这两者对于开发者而言,有什么差异化的地方呢。

官方文档

  • MySQL5.7 https://dev.mysql.com/doc/refman/5.7/en/
  • MySQL8.4 https://dev.mysql.com/doc/refman/8.4/en/
  • Oracle12 https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/
  • Oracle 19 https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/

关键字和保留字

如果表或者字段有关键字或保留字,MySQL用 `KeyWord` 来标识,而Oracle用 “KeyWord” 来标识。
为了不必要的兼容性工作,尽量避免使用这些关键字和保留字。

MySQL关键字:https://dev.mysql.com/doc/refman/8.4/en/keywords.html
Oracle保留字:https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Oracle-SQL-Reserved-Words.html

常用数据类型

数据类型MySQLOracle
字符串VARCHARVARCHAR2
数字BIT, TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT, FLOAT, DOUBLENUMBER
大文本TEXT, MEDIUMTEXT, LONGTEXTCLOB
日期DATETIMEDATE
枚举ENUM-
二进制BLOB, MEDIUMBLOB,LONGBLOBBLOB

常用DDL(仅差异部分)

DDL功能MySQLOracle
自增字段

常用DML(仅差异部分)

DML功能MySQLOracle
数据合并MERGE INTOREPLACE INTO
子查询– 子查询必须指定别名
SELECT * FROM (SELECT * FROM t) t1
– 子查询可以不指定别名
SELECT * FROM (SELECT * FROM t)
TOP n 查询SELECT * FROM t ORDER BY f
LIMIT n
SELECT * FROM(SELECT * FROM t ORDER BY f)
WHERE ROWNUM > n
分页查询SELECT * FROM t ORDER BY f
LIMIT 页号*分页大小, 分页大小
SELECT * FROM(SELECT * FROM t ORDER BY f)
WHERE ROWNUM >= 页号*分页大小
AND ROWNUM < 页号*(分页大小 + 1)
递归查询– tree的列名可以不指定,默认使用root的列名
WITH RECURSIVE tree AS (
 SELECT root.id, root.name, root.parent_id
 FROM t_dept root
 WHERE root.parent_id is null
 UNION ALL
 SELECT sub.id, sub.name, sub.parent_id
 FROM t_dept, tree
 WHERE sub.parent_id = tree.id
)
SELECT * FROM tree;
– tree的列名必须指定
WITH tree (id,name,parent_id) AS (
 SELECT root.id, root.name, root.parent_id
 FROM t_dept root
 WHERE root.parent_id is null
 UNION ALL
 SELECT sub.id, sub.name, sub.parent_id
 FROM t_dept, tree
 WHERE sub.parent_id = tree.id
)
SELECT * FROM tree;

– 使用CONNECT BY实现递归查询
SELECT id, name, parent_id
FROM t_dept
START WITH parent_id is null
CONNECT BY PRIOR id = parent_id

常用函数

函数MySQLOracle说明
逻辑判断IF(expr1,expr2,expr3)-expr1为true,返回expr2,否则返回expr3
空值判断IFNULL(a, b) 或 COALESCE(a, b, c)NVL(a,b) 或 COALESCE(a, b, c)返回第一个不为null的值
同值判断NULLIF(a, b)NULLIF(a, b)如果两个值相同,返回null,如果不同,返回a
字符串截取SUBSTR(ch, pos, length)
SUBSTRING(ch, pos, length)
SUBSTR(ch, pos, length)截取ch,从pos开始,共length位
字符串查找LOCATE(substr, str)INSTR(str, substr)在str中查找substr的位置,如果结果为0,说明找不到
字符串长度CHAR_LENGTH(str)
LENGTH(str)
LENGTH(str)MySQL的LENGTH(chr)表示字节长度:
CHAR_LENGTH(‘A’) = 1
LENGTH(‘A’) = 1
CHAR_LENGTH(‘我’) = 1
LENGTH(‘我’) = 3
而Oracle中:
LENGTH(‘我’) = 1
大小写转换UPPER(string)、LOWER(string)UPPER(string)、LOWER(string)
向上取整CEILING(f)
CEIL(f)
CEIL(f)CEIL(110.01) = 111
向下取整FLOOR(f)FLOOR(f)FLOOR(110.99) = 110
数字精度TRUNC(f, p)TRUNC(f, p)TRUNC(15.79,1) = 15.7
四舍五入ROUND(f, p)ROUND(f, p)ROUND(15.153,1) = 15.2
获取当前时间NOW()
SYSDATE()
CURDATE()
CURTIME()
CURRENT_DATE()
CURRENT_DATE
CURRENT_TIME()
CURRENT_TIME
CURRENT_TIMESTAMP()
CURRENT_TIMESTAMP
SYSDATE
CURRENT_DATE
CURRENT_TIMESTAMP
NOW()表示整个SQL语句(包含存储过程)执行的时间
SYSDATE()表示该函数调用时的时间
日期转字符DATE_FORMAT(date,format)TO_CHARDATE_FORMAT(NOW(), ‘%Y-%m-%d %H:%i:%s’)
TO_CHAR(SYS_DATE, ‘yyyy-mm-dd hh24:mi:ss’)
日期加减DATE_ADD(date, days)
DATE_SUB(date, days)
ADDDATE(date, days)
SUBDATE(expr, days)
ADDTIME(expr1, expr2)
SUBTIME(expr1, expr2)
DATE +/- N/ ADD_MONTHS
日期互减DATEDIFF(expr1, expr2)
TIMEDIFF(expr1,expr2)
-
时间截取YEAR(date)
MONTH(date)
DAYOFWEEK(date)
DAYOFMONTH(date)
WEEK(date[,mode])
DAY(date)
HOUR(time)
MINUTE(time)
TRUNC(date, fmt)
时间抽取YEAREXTRACT
字符转日期STR_TO_DATE, CAST(XX AS DATE)TO_DATE
字符转整数CAST(XX AS SIGNED INTEGER)TO_NUMBER
字符转时间戳STR_TO_DATETO_TIMESTAMP
编码取字符STR_TO_DATETO_TIMESTAMP
正则匹配替换-REGEXP_REPLACE
记录聚合GROUP_CONCATLISTAGG
行号ROW_NUMBER() OVER (ORDER BY col1)ROWNUM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

weblogic简介

WebLogic是美国Oracle公司出品的一个Application Server&#xff0c;它是一个基于JAVA EE架构的中间件。WebLogic主要用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。它将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的…

什么是安全左移如何实现安全左移

文章目录 一、传统软件开发面临的安全挑战二、什么是安全左移四、安全左移与安全开发生命周期&#xff08;SDL&#xff09;三、安全左移对开发的挑战五、从DevOps到DevSecOps六、SDL与DevSecOps 一、传统软件开发面临的安全挑战 传统软件开发面临的安全挑战主要包括以下几个方…

yarn常用命令

Yarn 是一个快速、可靠且安全的依赖管理工具&#xff0c;用于替代 npm。以下是一些常用的 Yarn 命令&#xff0c;用于不同的包管理和项目依赖安装场景&#xff1a; 初始化一个新的项目 yarn init这个命令会引导你创建一个 package.json 文件。 安装依赖 yarn add [package]…

抄表:现代生活中的数据采集关键

1.界定与发源 抄表&#xff0c;简单的说&#xff0c;指从各种各样计量机器设备(如智能水表、电度表、天然气表等)载入做好记录使用量的全过程。这一概念自工业化时代至今就出现了&#xff0c;最初由人工进行&#xff0c;伴随着科技创新&#xff0c;如今已经演化出自动化和远程…

Java中的时间戳【详解】

一.何为Java时间戳 在Java中&#xff0c;时间戳通常指的是自1970年1月1日午夜&#xff08;UTC&#xff09;以来的毫秒数。 这个概念在Java中主要通过java.util.Date类和java.sql.Timestamp类来表示 而在Java 8及以后的版本中&#xff0c;引入了新的日期时间API&#xff0c;即…

给大家分享一套非常棒的python机器学习课程

给大家分享一套非常棒的python机器学习课程——《AI小天才&#xff1a;让小学生轻松掌握机器学习》&#xff0c;2024年5月完结新课&#xff0c;提供配套的代码笔记软件包下载&#xff01;学完本课程&#xff0c;可以轻松掌握机器学习的全面应用&#xff0c;复杂特征工程&#x…

【C++刷题】优选算法——递归第三辑

floodfill篇 图像渲染 unordered_multimap<int, int> direction {{0, 1},{0, -1},{1, 0},{-1, 0} }; void dfs(vector<vector<int>>& image, int sr, int sc, int color, int val) {image[sr][sc] color;for(auto& e : direction){int x sr e.…

关于微服务的一点感悟和过往经验的思考

一、为什么有微服务 解决单体应用的局限性 随着业务发展&#xff0c;业务逻辑复杂、关联方多&#xff0c;导致业务系统的代码臃肿、难于做迭代或者维护&#xff0c;导致很多的问题&#xff0c;如&#xff1a;bug多、难于维护修复、每次需要评估改动服务接口影响的范围&#xf…

碰撞器触发事件(OnTriggerEnter/OnTriggerStay/OnTriggerExit)

碰撞器触发事件&#xff08;OnTriggerEnter/OnTriggerStay/OnTriggerExit&#xff09;简介 在Unity中&#xff0c;触发器事件是当一个游戏对象进入、停留或离开另一个游戏对象的触发器碰撞器时发生的事件。这些事件分别是: OnTriggerEnter: 当其他Collider首次进入触发器时调用…

服务端Web资源缓存

1.前言 虽然客户端缓存效果很好&#xff0c;但它有一个核心问题&#xff1a;要在本地提供资源&#xff0c;必须先将其存储在缓存中。因此&#xff0c;每个客户端都需要其缓存的资源。如果请求的资源需要大量计算&#xff0c;则无法扩展。服务器端缓存背后的理念是计算一次资源…

【CAN】libsocketcan库详解

1、简介 libsocketcan是用户空间通过SocketCAN操作CAN的接口。 源码:https://github.com/linux-can/libsocketcan 2、API详解 2.1 can_do_restart 1)说明:重启CAN接口 2)原型: int can_do_restart(const char *name);3)参数: name:CAN接口名,比如:can0、can1,…

继续分析开发人员容易被骗的原因和防范措施

继续分析开发人员容易被骗的原因和防范措施&#xff0c;可以深入探讨一些具体的技术细节和实际操作建议&#xff0c;以更全面地理解和应对这一问题。 技术细节&#xff1a; 未加密的敏感数据传输&#xff1a; 原因&#xff1a;开发人员可能忽视了数据传输过程中的安全性&#…

第10章 软件架构的演化和维护

软件架构周期&#xff1a;初始设计、实际使用、修改完善(这就是演化)、退化弃用。 演化和维护的目的&#xff1a;为了使软件能够适应环境的变化而进行的纠错性修改和完善性修改等&#xff0c;而且这个过程是一个不断迭代的过程。 架构演化的重要性、演化过程、演化分类、演化…

Vary HTTP 标头

1.前言 服务器端 Web 资源缓存的想法是在客户端和上游之间设置一个组件来缓存先前计算的结果&#xff0c;以避免后者过载。根据您的基础架构和要求&#xff0c;此组件可以是反向代理或 API 网关。HTTP 提供Cache-Control标头来自定义缓存的不同方面&#xff0c;例如&#xff0…

Java——通过方法交换实参值

想写一个方法来交换main函数中的两个变量值&#xff0c;代码如下&#xff1a; public class Test {public static void swap(int x,int y) {int tmp x;x y;y tmp;}public static void main(String[] args) {int a 10;int b 20;System.out.println("交换前&#xff1…

Autodesk Maya 2025软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; Autodesk Maya 2025是一款领先的三维动画设计软件&#xff0c;界面直观且功能丰富。它集成了全球领先的3D设计技术&#xff0c;提供了多种创意功能&a…

深度学习 --- stanford cs231 编程作业(如何在chrome中安装colab)

stanford cs231 编程作业(如何开始你的colab编程&#xff09; 斯坦福231n的所有作业都要求在colab里面做&#xff0c;colab可以为你提供免费的云计算。实际上在他的官网中也有关于如何安装colab的详细说明视频。 https://youtu.be/DsGd2e9JNH4https://youtu.be/DsGd2e9JNH4 我…

2831.找出最长等值子数组(哈希表+滑动窗口法)

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 如果子数组中所有元素都相等&#xff0c;则认为子数组是一个 等值子数组 。注意&#xff0c;空数组是 等值子数组 。 从 nums 中删除最多 k 个元素后&#xff0c;返回可能的最长等值子数组的长度。 子数组 是数组中一个连…

电路笔记 :元器件焊接相关 酒精灯松香浴加热取芯片

记录一下只使用松香和小火源加热&#xff08;如酒精灯、小蜡烛&#xff09;从电路板中取芯片。 过程 多放松香 让松香淹没芯片尽量均匀加热&#xff0c;等芯片旁边的松香开始从芯片里冒细小的“泡泡”&#xff0c;就差不多了 注&#xff1a;这种方法也可以用于焊接&#xff0…

Qt QString详细用法

一.基础用法 1.创建QString对象 QString str1 "Hello, World!"; QString str2("This is a QString object."); //一个是等号的重载&#xff0c;一个是拷贝构造&#xff0c;本质上是等价的 2.获取字符串长度 int length str1.length(); // 返回字符串…