mysql--数据库剧本指令操作
mysql三:存儲(chǔ)引擎
閱讀目錄
- 一 什么是存儲(chǔ)引擎
- 二 mysql支持的存儲(chǔ)引擎
- 三 使用存儲(chǔ)引擎
一 什么是存儲(chǔ)引擎
mysql中建立的庫(kù)===>文件夾
庫(kù)中建立的表===>文件
現(xiàn)實(shí)生活中我們用來(lái)存儲(chǔ)數(shù)據(jù)的文件應(yīng)該有不同的類(lèi)型:比如存文本用txt類(lèi)型,存表格用excel,存圖片用png等
數(shù)據(jù)庫(kù)中的表也應(yīng)該有不同的類(lèi)型,表的類(lèi)型不同,會(huì)對(duì)應(yīng)mysql不同的存取機(jī)制,表類(lèi)型又稱(chēng)為存儲(chǔ)引擎。
?
存儲(chǔ)引擎說(shuō)白了就是如何存儲(chǔ)數(shù)據(jù)、如何為存儲(chǔ)的數(shù)據(jù)建立索引和如何更新、查詢(xún)數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方
法。因?yàn)樵陉P(guān)系數(shù)據(jù)庫(kù)中數(shù)據(jù)的存儲(chǔ)是以表的形式存儲(chǔ)的,所以存儲(chǔ)引擎也可以稱(chēng)為表類(lèi)型(即存儲(chǔ)和
操作此表的類(lèi)型)
在Oracle 和SQL Server等數(shù)據(jù)庫(kù)中只有一種存儲(chǔ)引擎,所有數(shù)據(jù)存儲(chǔ)管理機(jī)制都是一樣的。而MySql
數(shù)據(jù)庫(kù)提供了多種存儲(chǔ)引擎。用戶(hù)可以根據(jù)不同的需求為數(shù)據(jù)表選擇不同的存儲(chǔ)引擎,用戶(hù)也可以根據(jù)
自己的需要編寫(xiě)自己的存儲(chǔ)引擎
?
SQL 解析器、SQL 優(yōu)化器、緩沖池、存儲(chǔ)引擎等組件在每個(gè)數(shù)據(jù)庫(kù)中都存在,但不是每 個(gè)數(shù)據(jù)庫(kù)都有這么多存儲(chǔ)引擎。MySQL 的插件式存儲(chǔ)引擎可以讓存儲(chǔ)引擎層的開(kāi)發(fā)人員設(shè) 計(jì)他們希望的存儲(chǔ)層,例如,有的應(yīng)用需要滿(mǎn)足事務(wù)的要求,有的應(yīng)用則不需要對(duì)事務(wù)有這 么強(qiáng)的要求 ;有的希望數(shù)據(jù)能持久存儲(chǔ),有的只希望放在內(nèi)存中,臨時(shí)并快速地提供對(duì)數(shù)據(jù) 的查詢(xún)。?
回到頂部二 mysql支持的存儲(chǔ)引擎
MariaDB [(none)]> show engines\G #查看所有支持的存儲(chǔ)引擎 MariaDB [(none)]> show variables like 'storage_engine%'; #查看正在使用的存儲(chǔ)引擎MySQL存儲(chǔ)引擎介紹
#InnoDB 存儲(chǔ)引擎 支持事務(wù),其設(shè)計(jì)目標(biāo)主要面向聯(lián)機(jī)事務(wù)處理(OLTP)的應(yīng)用。其 特點(diǎn)是行鎖設(shè)計(jì)、支持外鍵,并支持類(lèi)似 Oracle 的非鎖定讀,即默認(rèn)讀取操作不會(huì)產(chǎn)生鎖。 從 MySQL 5.5.8 版本開(kāi)始是默認(rèn)的存儲(chǔ)引擎。 InnoDB 存儲(chǔ)引擎將數(shù)據(jù)放在一個(gè)邏輯的表空間中,這個(gè)表空間就像黑盒一樣由 InnoDB 存儲(chǔ)引擎自身來(lái)管理。從 MySQL 4.1(包括 4.1)版本開(kāi)始,可以將每個(gè) InnoDB 存儲(chǔ)引擎的 表單獨(dú)存放到一個(gè)獨(dú)立的 ibd 文件中。此外,InnoDB 存儲(chǔ)引擎支持將裸設(shè)備(row disk)用 于建立其表空間。 InnoDB 通過(guò)使用多版本并發(fā)控制(MVCC)來(lái)獲得高并發(fā)性,并且實(shí)現(xiàn)了 SQL 標(biāo)準(zhǔn) 的 4 種隔離級(jí)別,默認(rèn)為 REPEATABLE 級(jí)別,同時(shí)使用一種稱(chēng)為 netx-key locking 的策略來(lái) 避免幻讀(phantom)現(xiàn)象的產(chǎn)生。除此之外,InnoDB 存儲(chǔ)引擎還提供了插入緩沖(insert buffer)、二次寫(xiě)(double write)、自適應(yīng)哈希索引(adaptive hash index)、預(yù)讀(read ahead) 等高性能和高可用的功能。 對(duì)于表中數(shù)據(jù)的存儲(chǔ),InnoDB 存儲(chǔ)引擎采用了聚集(clustered)的方式,每張表都是按 主鍵的順序進(jìn)行存儲(chǔ)的,如果沒(méi)有顯式地在表定義時(shí)指定主鍵,InnoDB 存儲(chǔ)引擎會(huì)為每一 行生成一個(gè) 6 字節(jié)的 ROWID,并以此作為主鍵。 InnoDB 存儲(chǔ)引擎是 MySQL 數(shù)據(jù)庫(kù)最為常用的一種引擎,Facebook、Google、Yahoo 等 公司的成功應(yīng)用已經(jīng)證明了 InnoDB 存儲(chǔ)引擎具備高可用性、高性能以及高可擴(kuò)展性。對(duì)其 底層實(shí)現(xiàn)的掌握和理解也需要時(shí)間和技術(shù)的積累。如果想深入了解 InnoDB 存儲(chǔ)引擎的工作 原理、實(shí)現(xiàn)和應(yīng)用,可以參考《MySQL 技術(shù)內(nèi)幕:InnoDB 存儲(chǔ)引擎》一書(shū)。#MyISAM 存儲(chǔ)引擎 不支持事務(wù)、表鎖設(shè)計(jì)、支持全文索引,主要面向一些 OLAP 數(shù) 據(jù)庫(kù)應(yīng)用,在 MySQL 5.5.8 版本之前是默認(rèn)的存儲(chǔ)引擎(除 Windows 版本外)。數(shù)據(jù)庫(kù)系統(tǒng) 與文件系統(tǒng)一個(gè)很大的不同在于對(duì)事務(wù)的支持,MyISAM 存儲(chǔ)引擎是不支持事務(wù)的。究其根 本,這也并不難理解。用戶(hù)在所有的應(yīng)用中是否都需要事務(wù)呢?在數(shù)據(jù)倉(cāng)庫(kù)中,如果沒(méi)有 ETL 這些操作,只是簡(jiǎn)單地通過(guò)報(bào)表查詢(xún)還需要事務(wù)的支持嗎?此外,MyISAM 存儲(chǔ)引擎的 另一個(gè)與眾不同的地方是,它的緩沖池只緩存(cache)索引文件,而不緩存數(shù)據(jù)文件,這與 大多數(shù)的數(shù)據(jù)庫(kù)都不相同。#NDB 存儲(chǔ)引擎 2003 年,MySQL AB 公司從 Sony Ericsson 公司收購(gòu)了 NDB 存儲(chǔ)引擎。 NDB 存儲(chǔ)引擎是一個(gè)集群存儲(chǔ)引擎,類(lèi)似于 Oracle 的 RAC 集群,不過(guò)與 Oracle RAC 的 share everything 結(jié)構(gòu)不同的是,其結(jié)構(gòu)是 share nothing 的集群架構(gòu),因此能提供更高級(jí)別的 高可用性。NDB 存儲(chǔ)引擎的特點(diǎn)是數(shù)據(jù)全部放在內(nèi)存中(從 5.1 版本開(kāi)始,可以將非索引數(shù) 據(jù)放在磁盤(pán)上),因此主鍵查找(primary key lookups)的速度極快,并且能夠在線添加 NDB 數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)(data node)以便線性地提高數(shù)據(jù)庫(kù)性能。由此可見(jiàn),NDB 存儲(chǔ)引擎是高可用、 高性能、高可擴(kuò)展性的數(shù)據(jù)庫(kù)集群系統(tǒng),其面向的也是 OLTP 的數(shù)據(jù)庫(kù)應(yīng)用類(lèi)型。#Memory 存儲(chǔ)引擎 正如其名,Memory 存儲(chǔ)引擎中的數(shù)據(jù)都存放在內(nèi)存中,數(shù)據(jù)庫(kù)重 啟或發(fā)生崩潰,表中的數(shù)據(jù)都將消失。它非常適合于存儲(chǔ) OLTP 數(shù)據(jù)庫(kù)應(yīng)用中臨時(shí)數(shù)據(jù)的臨時(shí)表,也可以作為 OLAP 數(shù)據(jù)庫(kù)應(yīng)用中數(shù)據(jù)倉(cāng)庫(kù)的維度表。Memory 存儲(chǔ)引擎默認(rèn)使用哈希 索引,而不是通常熟悉的 B+ 樹(shù)索引。#Infobright 存儲(chǔ)引擎 第三方的存儲(chǔ)引擎。其特點(diǎn)是存儲(chǔ)是按照列而非行的,因此非常 適合 OLAP 的數(shù)據(jù)庫(kù)應(yīng)用。其官方網(wǎng)站是 http://www.infobright.org/,上面有不少成功的數(shù)據(jù) 倉(cāng)庫(kù)案例可供分析。#NTSE 存儲(chǔ)引擎 網(wǎng)易公司開(kāi)發(fā)的面向其內(nèi)部使用的存儲(chǔ)引擎。目前的版本不支持事務(wù), 但提供壓縮、行級(jí)緩存等特性,不久的將來(lái)會(huì)實(shí)現(xiàn)面向內(nèi)存的事務(wù)支持。#BLACKHOLE 黑洞存儲(chǔ)引擎,可以應(yīng)用于主備復(fù)制中的分發(fā)主庫(kù)。MySQL 數(shù)據(jù)庫(kù)還有很多其他存儲(chǔ)引擎,上述只是列舉了最為常用的一些引擎。如果 你喜歡,完全可以編寫(xiě)專(zhuān)屬于自己的引擎,這就是開(kāi)源賦予我們的能力,也是開(kāi)源的魅 力所在。 View Code? 回到頂部三 使用存儲(chǔ)引擎
方法1:建表時(shí)指定
MariaDB [db1]> create table innodb_t1(id int,name char)engine=innodb; MariaDB [db1]> create table innodb_t2(id int)engine=innodb; MariaDB [db1]> show create table innodb_t1; MariaDB [db1]> show create table innodb_t2;?
?
方法2:在配置文件中指定默認(rèn)的存儲(chǔ)引擎
/etc/my.cnf [mysqld] default-storage-engine=INNODB innodb_file_per_table=1?
查看
[root@egon db1]# cd /var/lib/mysql/db1/ [root@egon db1]# ls db.opt innodb_t1.frm innodb_t1.ibd innodb_t2.frm innodb_t2.ibd?
?
練習(xí)
創(chuàng)建四個(gè)表,分別使用innodb,myisam,memory,blackhole存儲(chǔ)引擎,進(jìn)行插入數(shù)據(jù)測(cè)試
MariaDB [db1]> create table t1(id int)engine=innodb; MariaDB [db1]> create table t2(id int)engine=myisam; MariaDB [db1]> create table t3(id int)engine=memory; MariaDB [db1]> create table t4(id int)engine=blackhole; MariaDB [db1]> quit [root@egon db1]# ls /var/lib/mysql/db1/ #發(fā)現(xiàn)后兩種存儲(chǔ)引擎只有表結(jié)構(gòu),無(wú)數(shù)據(jù) db.opt t1.frm t1.ibd t2.MYD t2.MYI t2.frm t3.frm t4.frm#memory,在重啟mysql或者重啟機(jī)器后,表內(nèi)數(shù)據(jù)清空 #blackhole,往表內(nèi)插入任何數(shù)據(jù),都相當(dāng)于丟入黑洞,表內(nèi)永遠(yuǎn)不存記錄轉(zhuǎn)載于:https://www.cnblogs.com/52forjie/p/7513148.html
總結(jié)
以上是生活随笔為你收集整理的mysql--数据库剧本指令操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: eNSP RIP协议
- 下一篇: mysql语法错误文件_Flyway M