剛進公司接觸到了Oracle,記錄一下他們的區別,面試的時候也有問到過,而且上來就是千萬級別的數據調優,嘻嘻,我只是一個3年java。題外話,甚至有一些公司會問我java跟C、python的區別,以及具體區別的例子,然後我如果回答上來了,他們會告訴我,這邊只做後端而且只用java,笑嘻了 就本人最近 ...
剛進公司接觸到了Oracle,記錄一下他們的區別,面試的時候也有問到過,而且上來就是千萬級別的數據調優,嘻嘻,我只是一個3年java。題外話,甚至有一些公司會問我java跟C、python的區別,以及具體區別的例子,然後我如果回答上來了,他們會告訴我,這邊只做後端而且只用java,笑嘻了
就本人最近的使用和瞭解,整理了一下:
基本區別、大小寫敏感、事務、時間日期、分頁、常用欄位類型
基本區別
資料庫類型:
Oracle是對象關係資料庫管理系統(ORDBMS => 基於對象模型,存儲數據及其方法,數據存儲在對象中,用於存儲複雜的數據)
MySQL是開源的關係資料庫管理系統(RDBMS => 基於關係模型, 存儲數據,數據存儲在實體裡面,用於處理比較簡單的數據)
預設埠和用戶名:
Oracle預設埠:1521 預設用戶:system
MySQL預設埠:3306 預設用戶:root
安全:
Oracle使用了許多安全功能(本地身份驗證,外部身份驗證,高級安全增強等)
MySQL使用三個參數來驗證用戶,即用戶名,密碼和位置
性能:
MySQL在讀取和寫入方面性能通常比Oracle高
併發:
Oracle支持大併發訪問量,是OLTP(聯機事務處理 => 事務性非常高的系統,一般都是高可用的線上系統。比如銀行、電商)最好的工具
MySQL併發小,面對大訪問量可以做分表分庫優化
臨時表:
Oracle預設所有會話內可見(可設置當前會話內或事務內可見),創建後需要顯式刪除。
MySQL只在當前會話可見,一旦會話關閉就自動刪除。
大小寫敏感
Oracle預設是大寫,在雙引號""下,大小寫敏感
MySQL預設是小寫,大小寫不敏感
事務
Oracle預設不自動提交,需要用戶手動提交
提交命令:
BEGIN:事務塊開始的標誌(要麼全部執行成功,要麼全部失敗回滾)
COMMIT:提交事務(對資料庫的修改是可見的)
ROLLBACK:取消尚未提交的事務,將資料庫恢復到事務開始之前的狀態
SAVEPOINT:在事務中創建一個保存點,在事務執行過程中可以回滾到該保存點
SET TRANSACTION:設置事務的屬性(事務的隔離級別、讀寫許可權等)
MySQL中innoDB支持事務,預設自動提交(關閉事務提交命令 => set AutoCommit = 0)
提交命令:
START TRANSACTION:開始事務
COMMIT:手動提交
時間日期
Oracle使用 DATE 數據類型來存儲日期和時間
# 獲取當前DATE
SELECT SYSDATE
# 格式 'yyyy-mm-dd hh24:mi:ss'
SELECT TO_CHAR(createDate, 'yyyy-mm-dd hh24:mi:ss') FROM tableName;
MySQL日期和時間通常使用 DATE,DATETIME,TIMESTAMP 數據類型存儲
# 獲取當前時間戳
select unix_timestamp()
# 獲取當前日期 格式 'YYYY-MM-DD'
select date(now())
# 獲取當前日期時間,格式 'YYYY-MM-DD hh:mm:ss'
select now()
分頁
Oracle
# rownum從1開始
select * from
(select rownum rn, t.* from (select * from tableName order by id desc) t )
where rn>=1 and rn<=5;
MySQL
# 從第0條開始,取5條數據
select * from tableName order by id desc limit 0,5
常用欄位類型
Oracle | MySQL | |
---|---|---|
數字 | NUMBER | int、bigint、decimal |
字元串 | CHAR、NCHAR、VARCHAR2、NVARCHAR2 | char、varchar |
日期 | DATE | date、time、datetime、timestamp |