-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
數(shù)據(jù)庫引擎有哪些(數(shù)據(jù)庫引擎有哪些,有什么區(qū)別)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于數(shù)據(jù)庫引擎有哪些的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、計(jì)算機(jī)工藝設(shè)計(jì)動態(tài)數(shù)據(jù)庫有哪些
SQLite3的數(shù)據(jù)類型-動態(tài)數(shù)據(jù)類型,選擇了數(shù)據(jù)結(jié)構(gòu),算法也隨之確定,是數(shù)據(jù)而不是算法是系統(tǒng)構(gòu)造的關(guān)鍵因素。這種洞見導(dǎo)致了許多種軟件設(shè)計(jì)方法和程序設(shè)計(jì)語言的出現(xiàn),面向?qū)ο蟮某绦蛟O(shè)計(jì)語言就是其中之一。
1. SQLite中的數(shù)據(jù)類型
大多數(shù)sql數(shù)據(jù)庫引擎(除了SQLite之外的每個SQL數(shù)據(jù)庫引擎,據(jù)我們所知)都使用靜態(tài),嚴(yán)格的類型。使用靜態(tài)類型時,列的數(shù)據(jù)類型由其容器(存儲值的特定列)確定。
SQLite使用更通用的動態(tài)類型系統(tǒng)。在SQLite中,值的數(shù)據(jù)類型與值本身相關(guān)聯(lián),而不是與其容器相關(guān)聯(lián)。SQLite的動態(tài)類型系統(tǒng)向后兼容其他數(shù)據(jù)庫引擎的更常見的靜態(tài)類型系統(tǒng),因?yàn)樵陟o態(tài)類型數(shù)據(jù)庫上工作的SQL語句應(yīng)該在SQLite中以相同的方式運(yùn)行。但是,SQLite中的動態(tài)類型允許它執(zhí)行傳統(tǒng)的剛性類型數(shù)據(jù)庫中無法實(shí)現(xiàn)的操作。
2. 存儲類和數(shù)據(jù)類型
存儲在SQLite數(shù)據(jù)庫中(或由數(shù)據(jù)庫引擎操縱)的每個值都是以下存儲類之一:
NULL。該值為NULL值。
INTEGER。該值是有符號整數(shù),存儲為1,2,3,4,6或8個字節(jié),具體取決于值的大小。
REAL。該值是浮點(diǎn)值,存儲為8字節(jié)IEEE浮點(diǎn)數(shù)。
TEXT。該值是一個文本字符串,使用數(shù)據(jù)庫編碼(UTF-8,UTF-16BE或UTF-16LE)存儲。
BLOB。該值是一個數(shù)據(jù)塊,可以二進(jìn)制的形式存儲任何數(shù)據(jù)。
存儲類比數(shù)據(jù)類型更通用。例如,INTEGER存儲類包括6種不同長度的不同整數(shù)數(shù)據(jù)類型。這在磁盤上有所不同。但是一旦從磁盤讀取INTEGER值并進(jìn)入內(nèi)存進(jìn)行處理,它們就會轉(zhuǎn)換為最通用的數(shù)據(jù)類型(8字節(jié)有符號整數(shù))。因此,在大多數(shù)情況下,“存儲類”與“數(shù)據(jù)類型”無法區(qū)分,并且這兩個術(shù)語可以互換使用。
除了INTEGER PRIMARY KEY列之外,SQLite版本3數(shù)據(jù)庫中的任何列都可用于存儲任何存儲類的值。
SQL語句中的所有值,無論是嵌入在SQL語句文本中的文字還是綁定到預(yù)編譯SQL語句的參數(shù), 都具有隱式存儲類。在下面描述的情況下,數(shù)據(jù)庫引擎可以在查詢執(zhí)行期間在數(shù)值存儲類(INTEGER和REAL)和TEXT之間轉(zhuǎn)換值。
(1) 布爾數(shù)據(jù)類型
SQLite沒有單獨(dú)的布爾存儲類。相反,布爾值存儲為整數(shù)0(假)和1(真)。
(2) 日期和時間數(shù)據(jù)類型
SQLite沒有為存儲日期和/或時間而預(yù)留的存儲類。相反,SQLite 的內(nèi)置日期和時間函數(shù)能夠?qū)⑷掌诤蜁r間存儲為TEXT,REAL或INTEGER值:
TEXT為ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
REAL如朱利安日數(shù),根據(jù)公歷4714年11月24日格林威治中午以來的天數(shù)。
INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以來的秒數(shù)。
應(yīng)用程序可以選擇以任何這些格式存儲日期和時間,并使用內(nèi)置的日期和時間函數(shù)在格式之間自由轉(zhuǎn)換 。
3. Type Affinity
使用嚴(yán)格類型的SQL數(shù)據(jù)庫引擎通常會嘗試自動將值轉(zhuǎn)換為適當(dāng)?shù)臄?shù)據(jù)類型??紤]一下:
CREATE TABLE t1(a INT, b VARCHAR(10));
INSERT INTO t1(a,b) VALUES('123',456);
在執(zhí)行插入之前,剛性類型的數(shù)據(jù)庫將字符串'123'轉(zhuǎn)換為整數(shù)123,將整數(shù)456轉(zhuǎn)換為字符串'456'。
為了最大化SQLite和其他數(shù)據(jù)庫引擎之間的兼容性,上面的示例將像在其他SQL數(shù)據(jù)庫引擎上一樣對SQLite起作用,SQLite支持列上的“類型親和性”概念。列的類型親緣關(guān)系是存儲在該列中的數(shù)據(jù)的推薦類型。這里的重要思想是建議使用類型,而不是必需的。任何列仍然可以存儲任何類型的數(shù)據(jù)。根據(jù)選擇,某些列更傾向于使用一個存儲類而不是另一個存儲類。列的首選存儲類稱為“親和性”。
SQLite 3數(shù)據(jù)庫中的每一列都分配了以下類型之一:
TEXT
NUMERIC
INTEGER
REAL
BLOB
(歷史記錄:“BLOB”類型的親和力曾被稱為“NULL”。但該術(shù)語容易與“無親和力”混淆,因此它被重命名。)
具有TEXT親緣關(guān)系的列使用存儲類NULL,TEXT或BLOB存儲所有數(shù)據(jù)。如果將數(shù)值數(shù)據(jù)插入到具有TEXT親和力的列中,則在存儲之前將其轉(zhuǎn)換為文本形式。
具有NUMERIC親緣關(guān)系的列可能包含使用所有五個存儲類的值。當(dāng)文本數(shù)據(jù)插入NUMERIC列時,如果此類轉(zhuǎn)換是無損且可逆的,則文本的存儲類將轉(zhuǎn)換為INTEGER或REAL(按優(yōu)先順序)。對于TEXT和REAL存儲類之間的轉(zhuǎn)換,如果保留數(shù)字的前15個有效十進(jìn)制數(shù)字,SQLite認(rèn)為轉(zhuǎn)換是無損且可逆的。如果無法將TEXT無損轉(zhuǎn)換為INTEGER或REAL,則使用TEXT存儲類存儲該值。不嘗試轉(zhuǎn)換NULL或BLOB值。
字符串可能看起來像帶有小數(shù)點(diǎn)和/或指數(shù)表示法的浮點(diǎn)字面值,但只要該值可以表示為整數(shù),NUMERIC親和關(guān)系就會將其轉(zhuǎn)換為整數(shù)。因此,字符串'3.0e + 5'存儲在具有NUMERIC親和度作為整數(shù)300000的列中,而不是作為浮點(diǎn)值300000.0。
使用INTEGER關(guān)聯(lián)的列與具有NUMERIC關(guān)聯(lián)的列的行為相同。INTEGER和NUMERIC親和力之間的區(qū)別僅在CAST表達(dá)式中很明顯。
具有REAL親和性的列的行為類似于具有NUMERIC親和力的列,除了它將整數(shù)值強(qiáng)制為浮點(diǎn)表示形式。(作為內(nèi)部優(yōu)化,沒有小數(shù)組件并存儲在具有REAL關(guān)聯(lián)性的列中的小浮點(diǎn)值將作為整數(shù)寫入磁盤,以便占用更少的空間,并在讀取值時自動轉(zhuǎn)換回浮點(diǎn)。優(yōu)化在SQL級別完全不可見,只能通過檢查數(shù)據(jù)庫文件的原始位來檢測。)
具有關(guān)聯(lián)性BLOB的列不優(yōu)選一個存儲類而不是另一個存儲類,并且不會嘗試將數(shù)據(jù)從一個存儲類強(qiáng)制轉(zhuǎn)換為另一個存儲類。
在許多類型的程序的設(shè)計(jì)中,數(shù)據(jù)結(jié)構(gòu)的選擇是一個基本的設(shè)計(jì)考慮因素。許多大型系統(tǒng)的構(gòu)造經(jīng)驗(yàn)表明,系統(tǒng)實(shí)現(xiàn)的困難程度和系統(tǒng)構(gòu)造的質(zhì)量都嚴(yán)重的依賴于是否選擇了最優(yōu)的數(shù)據(jù)結(jié)構(gòu)。許多時候,確定了數(shù)據(jù)結(jié)構(gòu)后,算法就容易得到了。有些時候事情也會反過來,我們根據(jù)特定算法來選擇數(shù)據(jù)結(jié)構(gòu)與之適應(yīng)。不論哪種情況,選擇合適的數(shù)據(jù)結(jié)構(gòu)都是非常重要的。
二、access,mysql,mssql,oracle這四數(shù)據(jù)庫引擎分別是什么?在哪兒能找到它們的數(shù)據(jù)庫引擎文件?
access mssql是微軟的數(shù)據(jù)庫,access適合小型的數(shù)據(jù)庫,mssqlserver現(xiàn)在已經(jīng)是微軟主流的方案了,這兩種軟件在網(wǎng)上都可以download下來。ORACLE是世界上最大的數(shù)據(jù)庫公司,在官網(wǎng)能下載軟件的,MYSQL現(xiàn)在也是ORACLE的了,資料和軟件在ORACLE官網(wǎng)都有
三、如何查看mysql數(shù)據(jù)庫的引擎
一般情況下,mysql會默認(rèn)提供多種存儲引擎,你可以通過下面的查看:
看你的mysql現(xiàn)在已提供什么存儲引擎:
mysql> show engines;
看你的mysql當(dāng)前默認(rèn)的存儲引擎:
mysql> show variables like '%storage_engine%';
你要看某個表用了什么引擎(在顯示結(jié)果里參數(shù)engine后面的就表示該表當(dāng)前用的存儲引擎):
mysql> show create table 表名;
MySQL數(shù)據(jù)庫引擎詳解
作為Java程序員,MySQL數(shù)據(jù)庫大家平時應(yīng)該都沒少使用吧,對MySQL數(shù)據(jù)庫的引擎應(yīng)該也有所了解,這篇文章就讓我詳細(xì)的說說MySQL數(shù)據(jù)庫的Innodb和MyIASM兩種引擎以及其索引結(jié)構(gòu)。也來鞏固一下自己對這塊知識的掌握。
Innodb引擎
Innodb引擎提供了對數(shù)據(jù)庫ACID事務(wù)的支持,并且實(shí)現(xiàn)了SQL標(biāo)準(zhǔn)的四種隔離級別,關(guān)于數(shù)據(jù)庫事務(wù)與其隔離級別的內(nèi)容請見數(shù)據(jù)庫事務(wù)與其隔
離級別這篇文章。該引擎還提供了行級鎖和外鍵約束,它的設(shè)計(jì)目標(biāo)是處理大容量數(shù)據(jù)庫系統(tǒng),它本身其實(shí)就是基于MySQL后臺的完整數(shù)據(jù)庫系統(tǒng),MySQL
運(yùn)行時Innodb會在內(nèi)存中建立緩沖池,用于緩沖數(shù)據(jù)和索引。但是該引擎不支持FULLTEXT類型的索引,而且它沒有保存表的行數(shù),當(dāng)SELECT
COUNT(*) FROM
TABLE時需要掃描全表。當(dāng)需要使用數(shù)據(jù)庫事務(wù)時,該引擎當(dāng)然是首選。由于鎖的粒度更小,寫操作不會鎖定全表,所以在并發(fā)較高時,使用Innodb引擎
會提升效率。但是使用行級鎖也不是絕對的,如果在執(zhí)行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表。
MyIASM引擎
MyIASM是MySQL默認(rèn)的引擎,但是它沒有提供對數(shù)據(jù)庫事務(wù)的支持,也不支持行級鎖和外鍵,因此當(dāng)INSERT(插入)或UPDATE(更
新)數(shù)據(jù)時即寫操作需要鎖定整個表,效率便會低一些。不過和Innodb不同,MyIASM中存儲了表的行數(shù),于是SELECT COUNT(*)
FROM
TABLE時只需要直接讀取已經(jīng)保存好的值而不需要進(jìn)行全表掃描。如果表的讀操作遠(yuǎn)遠(yuǎn)多于寫操作且不需要數(shù)據(jù)庫事務(wù)的支持,那么MyIASM也是很好的選
擇。
兩種引擎的選擇
大尺寸的數(shù)據(jù)集趨向于選擇InnoDB引擎,因?yàn)樗С质聞?wù)處理和故障恢復(fù)。數(shù)據(jù)庫的大小決定了故障恢復(fù)的時間長短,InnoDB可以利用事務(wù)日志
進(jìn)行數(shù)據(jù)恢復(fù),這會比較快。主鍵查詢在InnoDB引擎下也會相當(dāng)快,不過需要注意的是如果主鍵太長也會導(dǎo)致性能問題,關(guān)于這個問題我會在下文中講到。大
批的INSERT語句(在每個INSERT語句中寫入多行,批量插入)在MyISAM下會快一些,但是UPDATE語句在InnoDB下則會更快一些,尤
其是在并發(fā)量大的時候。
Index——索引
索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。MyIASM和Innodb都使用了樹這種數(shù)據(jù)結(jié)構(gòu)做為索引,關(guān)于樹我也曾經(jīng)寫過一篇文章樹是一種偉大的數(shù)據(jù)結(jié)構(gòu),只是自己的理解,有興趣的朋友可以去閱讀。下面我接著講這兩種引擎使用的索引結(jié)構(gòu),講到這里,首先應(yīng)該談一下B-Tree和B+Tree。
B-Tree和B+Tree
B+Tree是B-Tree的變種,那么我就先講B-Tree吧,相信大家都知道紅黑樹,這是我前段時間學(xué)《算法》一書時,實(shí)現(xiàn)的一顆紅黑樹,大家
可以參考。其實(shí)紅黑樹類似2,3-查找樹,這種樹既有2叉結(jié)點(diǎn)又有3叉結(jié)點(diǎn)。B-Tree也與之類似,它的每個結(jié)點(diǎn)做多可以有d個分支(叉),d稱為B-
Tree的度,如下圖所示,它的每個結(jié)點(diǎn)可以有4個元素,5個分支,于是它的度為5。B-Tree中的元素是有序的,比如圖中元素7左邊的指針指向的結(jié)點(diǎn)
中的元素都小于7,而元素7和16之間的指針指向的結(jié)點(diǎn)中的元素都處于7和16之間,正是滿足這樣的關(guān)系,才能高效的查找:首先從根節(jié)點(diǎn)進(jìn)行二分查找,找
到就返回對應(yīng)的值,否則就進(jìn)入相應(yīng)的區(qū)間結(jié)點(diǎn)遞歸的查找,直到找到對應(yīng)的元素或找到null指針,找到null指針則表示查找失敗。這個查找是十分高效
的,其時間復(fù)雜度為O(logN)(以d為底,當(dāng)d很大時,樹的高度就很低),因?yàn)槊看螜z索最多只需要檢索樹高h(yuǎn)個結(jié)點(diǎn)。
接下來就該講B+Tree了,它是B-Tree的變種,如下面兩張圖所示:
vcHLx/i85LLp0a/Qp8LKoaM8L3A+DQo8aDMgaWQ9"myisam引擎的索引結(jié)構(gòu)">MyISAM引擎的索引結(jié)構(gòu)
MyISAM引擎的索引結(jié)構(gòu)為B+Tree,其中B+Tree的數(shù)據(jù)域存儲的內(nèi)容為實(shí)際數(shù)據(jù)的地址,也就是說它的索引和實(shí)際的數(shù)據(jù)是分開的,只不過是用索引指向了實(shí)際的數(shù)據(jù),這種索引就是所謂的非聚集索引。
Innodb引擎的索引結(jié)構(gòu)
MyISAM引擎的索引結(jié)構(gòu)同樣也是B+Tree,但是Innodb的索引文件本身就是數(shù)據(jù)文件,即B+Tree的數(shù)據(jù)域存儲的就是實(shí)際的數(shù)據(jù),這種索引就是聚集索引。這個索引的key就是數(shù)據(jù)表的主鍵,因此InnoDB表數(shù)據(jù)文件本身就是主索引。
因?yàn)镮nnoDB的數(shù)據(jù)文件本身要按主鍵聚集,所以InnoDB要求表必須有主鍵(MyISAM可以沒有),如果沒有顯式指定,則MySQL系統(tǒng)會自動選擇一個可以唯一標(biāo)識數(shù)據(jù)記錄的列作為主鍵,如果不存在這種列,則MySQL自動為InnoDB表生成一個隱含字段作為主鍵,這個字段長度為6個字節(jié),類型為長整形。
并且和MyISAM不同,InnoDB的輔助索引數(shù)據(jù)域存儲的也是相應(yīng)記錄主鍵的值而不是地址,所以當(dāng)以輔助索引查找時,會先根據(jù)輔助索引找到主
鍵,再根據(jù)主鍵索引找到實(shí)際的數(shù)據(jù)。所以Innodb不建議使用過長的主鍵,否則會使輔助索引變得過大。建議使用自增的字段作為主鍵,這樣B+Tree的
每一個結(jié)點(diǎn)都會被順序的填滿,而不會頻繁的分裂調(diào)整,會有效的提升插入數(shù)據(jù)的效率。
四、請問MSSQL,ORACLE,數(shù)據(jù)庫引擎是什么?
各類數(shù)據(jù)庫管理系統(tǒng)的設(shè)計(jì)都有其獨(dú)特之處。在Oracle上也是有存儲引擎的,但Oracle官方從來都不這么提,只說存儲架構(gòu)。按功能上來看,InnoDB在設(shè)計(jì)之初參考了Oracle的設(shè)計(jì)(如表空間,extent,塊等)。MSSQL -- 不知道。
以上就是關(guān)于數(shù)據(jù)庫引擎有哪些相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
數(shù)據(jù)共享數(shù)據(jù)開放重要意義(數(shù)據(jù)共享數(shù)據(jù)開放重要意義ppt)
如何查看抖店銷售數(shù)據(jù)(抖音店鋪怎么查看銷售額)
足彩AI大數(shù)據(jù)分析預(yù)測(足彩ai大數(shù)據(jù)分析預(yù)測)
大專那個專業(yè)比較好就業(yè)(大專那個專業(yè)比較好就業(yè)女生)
文章代寫(文章代寫收費(fèi)標(biāo)準(zhǔn))