開發過程中使用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.pswp.cn/web/13677.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13677.shtml
英文地址,請注明出處:http://en.pswp.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(); // 返回字符串…