關(guān)系型數(shù)據(jù)庫(kù)介紹和初識(shí)Oracle

Q:什么是關(guān)系型數(shù)據(jù)庫(kù)?
【拓展】簡(jiǎn)述關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系型數(shù)據(jù)庫(kù)(Relational DataBase Management System),簡(jiǎn)稱 RDBMS。說(shuō)起關(guān)系型數(shù)據(jù)庫(kù),我們腦海中會(huì)立即浮現(xiàn)出 Oracle、MySQL、SQLServer 等數(shù)據(jù)庫(kù),這些都是我們常用的關(guān)系型數(shù)據(jù)庫(kù)。

關(guān)系型數(shù)據(jù)庫(kù),是指采用了關(guān)系模型來(lái)組織數(shù)據(jù)的數(shù)據(jù)庫(kù),其以行和列的形式存儲(chǔ)數(shù)據(jù),以便于用戶理解,關(guān)系型數(shù)據(jù)庫(kù)這一系列的行和列被稱為表,一組表組成了數(shù)據(jù)庫(kù)。用戶通過(guò)查詢來(lái)檢索數(shù)據(jù)庫(kù)中的數(shù)據(jù),而查詢是一個(gè)用于限定數(shù)據(jù)庫(kù)中某些區(qū)域的執(zhí)行代碼。關(guān)系模型可以簡(jiǎn)單理解為二維表格模型,而一個(gè)關(guān)系型數(shù)據(jù)庫(kù)就是由二維表及其之間的關(guān)系組成的一個(gè)數(shù)據(jù)組織。

關(guān)系型數(shù)據(jù)庫(kù)最大的特點(diǎn)就是在其關(guān)系這個(gè)詞,它可以保存數(shù)據(jù)庫(kù)中的各種關(guān)系。那么這個(gè)關(guān)系如何理解呢?我們就拿公司這個(gè)組織來(lái)講吧。

在公司里,我們有部門、小組、員工這幾個(gè)實(shí)體,而這幾個(gè)實(shí)體之間都是有一定關(guān)系的。例如:一個(gè)部門能有多個(gè)小組,一個(gè)小組有多個(gè)員工,所以部門和小組之間的關(guān)系是N:N的關(guān)系。于此類似,小組與員工也是N:N的關(guān)系。

關(guān)系型數(shù)據(jù)庫(kù)的發(fā)展歷程
在1979年,Larry Ellison 使用匯編和C語(yǔ)言主導(dǎo)開發(fā)了第一個(gè)商用關(guān)系型數(shù)據(jù)庫(kù) Oracle。在此之后的接近16年內(nèi)的時(shí)間,Oracle 數(shù)據(jù)庫(kù)一路奔跑,成為了世界上最流行的關(guān)系型數(shù)據(jù)庫(kù)。

在1989年,微軟(Microsoft)也發(fā)布了一個(gè)關(guān)系型數(shù)據(jù)庫(kù) SQL Server,但其同樣也是一個(gè)收費(fèi)的商業(yè)型數(shù)據(jù)庫(kù)。

直到1995年,瑞典公司MySQL AB發(fā)布了 MySQL 數(shù)據(jù)庫(kù)的第一個(gè)版本,從此終結(jié)了關(guān)系型數(shù)據(jù)庫(kù)只能用 Oracle、SQL Server 這些收費(fèi)軟件的神話。

在 MySQL 誕生后,因?yàn)槠溟_源、免費(fèi)的特性,所以其得到了眾多中小使用者的擁護(hù),其用戶量增長(zhǎng)迅猛。而在這期間,MySQL的主人也幾易其手。

在2008年,Sun 公司收購(gòu)了 MySQL AB 公司,同時(shí)也獲得了 MySQL 數(shù)據(jù)庫(kù)的管理權(quán)。在 2010 年的時(shí)候,Oracle 公司收購(gòu)了 Sun 公司,獲得了 MySQL 的管理權(quán)。

而就在 Oracle 收購(gòu) Sun 公司的當(dāng)天,因?yàn)閾?dān)心被 Oracle 收購(gòu)后MySQL的前景會(huì)受到限制,被稱為 MySQL 之父的 Michael Widenius fork 了 MySQL 的一個(gè)分支,啟動(dòng)了 MariaDB 項(xiàng)目。

果不其然,在被收購(gòu)不久后,MySQL隨即推出了相關(guān)的收費(fèi)版本。雖然原來(lái)的免費(fèi)版本仍然可以使用,但在可預(yù)見的未來(lái),Oracle 投入到 MySQL 中的精力可能很有限。畢竟Oracle是一個(gè)商業(yè)公司,也是要養(yǎng)家糊口的。

現(xiàn)在我們可以了解到現(xiàn)在主流關(guān)系型數(shù)據(jù)庫(kù)的誕生和發(fā)展概況,主要可以分為下面幾個(gè)階段:

  • 1979年,Oracle 數(shù)據(jù)庫(kù)誕生;
  • 1989年,SQL Server 數(shù)據(jù)庫(kù)誕生;
  • 1995年,MySQL 數(shù)據(jù)庫(kù)誕生;
    ……

Q:你認(rèn)為的關(guān)系型數(shù)據(jù)庫(kù)的市場(chǎng)份額排名?
https://db-engines.com/en/ranking

DB-Engines上數(shù)據(jù)庫(kù)排名

Q:為什么使用Oracle?
MySQL這么好,為什么還有人用Oracle?
為什么大部分公司的數(shù)據(jù)庫(kù)系統(tǒng)仍然要用Oracle?我認(rèn)為Oracle之所以能占有這么大的市場(chǎng)份額,是因?yàn)槠湓诤A繑?shù)據(jù)的處理上更具有優(yōu)勢(shì),并且能提供一整套的數(shù)據(jù)存儲(chǔ)解決方案。

在一些非常大的企業(yè)里,這些企業(yè)通常擁有龐大的資金能力,所以它們會(huì)選擇用錢購(gòu)買解決方案,而不是自己雇傭人員使用 MySQL 去維護(hù)(當(dāng)然現(xiàn)在也有很多大廠傾向去Oracle而使用MySQL)。
總的來(lái)說(shuō),Oracle比起MySQL具有下面的優(yōu)點(diǎn):

  • 眾多的數(shù)據(jù)庫(kù)特性,能滿足企業(yè)的多樣性需求;
  • 海量數(shù)據(jù)處理的優(yōu)勢(shì),性能高(保持開放平臺(tái)下TPC-D和TPC-C世界記錄);
  • 一整套數(shù)據(jù)解決方案;
  • 更加安全(最高認(rèn)證級(jí)別的ISO標(biāo)準(zhǔn)認(rèn)證)
    ……

因?yàn)镺racle有上面這些特性,所以O(shè)racle更加適合那些大型企業(yè)。因?yàn)檫@些企業(yè)資金充足,能承擔(dān)得起Oracle的昂貴費(fèi)用。另一方面,這些企業(yè)的數(shù)據(jù)量也是非常龐大,它們更注重?cái)?shù)據(jù)的安全性和高效存儲(chǔ),并且關(guān)心的出現(xiàn)問(wèn)題的時(shí)候能快速解決,Oracle提供的一系列服務(wù)正好符合它們的需求。在國(guó)內(nèi),金融機(jī)構(gòu)、政府部門、銀行、醫(yī)院等機(jī)構(gòu)常選擇使用Oracle。

而對(duì)于一些中小型企業(yè)或者個(gè)人使用者來(lái)說(shuō),一方面Oracle軟件非常笨重,另一方面Oracle授權(quán)費(fèi)用昂貴,對(duì)于它們來(lái)說(shuō)無(wú)法承受。而它們的數(shù)據(jù)庫(kù)又恰好不是特別大,所以對(duì)于這些使用者來(lái)說(shuō),使用MySQL已經(jīng)能夠解決它們的需求了。那么也就無(wú)需去付費(fèi)使用Oracle的數(shù)據(jù)庫(kù)了。如果單純從(關(guān)系型)數(shù)據(jù)庫(kù)性能來(lái)進(jìn)行比較的話,Oracle無(wú)疑是最牛逼的,畢竟Oracle比MySQL誕生早了10多年,歷史地位在這里擺著呢,所以學(xué)習(xí)掌握Oracle是很有必要的。


Oracle常用的數(shù)據(jù)庫(kù)字段類型如下:

字段類型 中文說(shuō)明 限制條件 其他說(shuō)明
CHAR 固定長(zhǎng)度字符串 最大長(zhǎng)度2000 bytes
VARCHAR2 可變長(zhǎng)度的字符串 最大長(zhǎng)度4000 bytes 可做索引的最大長(zhǎng)度749
NCHAR 根據(jù)字符集而定的固定長(zhǎng)度字符串 最大長(zhǎng)度2000 bytes
NVARCHAR2 根據(jù)字符集而定的可變長(zhǎng)度字符串 最大長(zhǎng)度4000 bytes
DATE 日期(日-月-年) DD-MM-YY(HH-MM-SS) 無(wú)千蟲問(wèn)題
TIMESTAMP 時(shí)間戳 可存儲(chǔ)時(shí)區(qū)和秒的小數(shù)位 0-9位小數(shù),默認(rèn)是6位
LONG 超長(zhǎng)字符串 最大長(zhǎng)度2G(231-1)
RAW 固定長(zhǎng)度的二進(jìn)制數(shù)據(jù) 最大長(zhǎng)度2000 bytes 可存放多媒體圖象聲音等
LONG RAW 可變長(zhǎng)度的二進(jìn)制數(shù)據(jù) 最大長(zhǎng)度2G 同上
BLOB 二進(jìn)制數(shù)據(jù) 最大長(zhǎng)度4G
CLOB 字符數(shù)據(jù) 最大長(zhǎng)度4G
NCLOB 根據(jù)字符集而定的字符數(shù)據(jù) 最大長(zhǎng)度4G
BFILE 存放在數(shù)據(jù)庫(kù)外的二進(jìn)制數(shù)據(jù) 最大長(zhǎng)度4G
ROWID 數(shù)據(jù)表中記錄的唯一行號(hào) 10 bytes ********.****.****格式,*為0或1
NROWID 二進(jìn)制數(shù)據(jù)表中記錄的唯一行號(hào) 最大長(zhǎng)度4000 bytes
NUMBER(P,S) 數(shù)字類型 P為總位數(shù),S為小數(shù)位數(shù)
DECIMAL(P,S) 數(shù)字類型 P為總位數(shù),S為小數(shù)位數(shù)
INTEGER 整數(shù)類型 小的整數(shù)
FLOAT 浮點(diǎn)數(shù)類型 NUMBER(38),雙精度
REAL 實(shí)數(shù)類型 NUMBER(63),精度更高

補(bǔ)充:varchar和varchar2區(qū)別

  • varchar是標(biāo)準(zhǔn)sql里面的。 varchar2是Oracle提供的獨(dú)有的數(shù)據(jù)類型;
  • varchar對(duì)于漢字占兩個(gè)字節(jié),對(duì)于英文是一個(gè)字節(jié),占的內(nèi)存??;varchar2當(dāng)字符集為UTF-8時(shí),一個(gè)中文占三個(gè)字節(jié),當(dāng)字符集為ZHS16GBK時(shí),一個(gè)中文占兩個(gè)字節(jié);
  • varchar對(duì)空串不處理,varchar2將空串當(dāng)做null來(lái)處理;
  • varchar存放固定長(zhǎng)度的字符串,最大長(zhǎng)度是2000,varchar2是存放可變長(zhǎng)度的字符串,最大長(zhǎng)度是4000;
  • 如果是要跟換不同的數(shù)據(jù)庫(kù),例如mysql,那么就用varchar,如果就用oracle,那么用varchar2比較好一點(diǎn)。

Oracle和MySQL區(qū)別

  • MySQL查詢語(yǔ)句中可以沒有from,Oracle 必須有;
    eg:MySQL查詢當(dāng)前時(shí)間:SELECT NOW(); Oracle查詢當(dāng)前時(shí)間:SELECT SYSDATE FROM DUAL;
  • MySQL使用單引號(hào)和雙引號(hào)表示字符,Oracle只能使用單引號(hào)(sql標(biāo)準(zhǔn)中也是使用單引號(hào)表示字符);
  • MySQL分頁(yè)使用limit offset,Oracle分頁(yè)得借助rownum關(guān)鍵字;
  • MySQL自動(dòng)增長(zhǎng)auto_increment,Oracle使用序列代替;
  • MySQL 和Oracle group by語(yǔ)法不同;
    ……

其他資料:
Oracle和MySQL的函數(shù)對(duì)比和常用區(qū)別
Oracle 高效分頁(yè)查詢SQL
Oracle數(shù)據(jù)庫(kù)查詢高效分頁(yè)


TODO 處理海量數(shù)據(jù)Oracle和MySQL的性能比較?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容