mysql 5.5以前默認(rèn)的引擎是myisam,5.5以后是innodb,引擎可以在創(chuàng)建表的時(shí)候指定,如下:
10年的潘集網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整潘集建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“潘集網(wǎng)站設(shè)計(jì)”,“潘集網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
Ceate table test
(id int,name varchar(10))
engine innodb;
修改:
alter table test type=innodb;
如果想設(shè)置缺省引擎可以在配置文件的mysqld添加一行:
default-storage-engine=INNODB;
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/webDb //連結(jié)的dburl
username: root //db用戶名
password:
jpa:
hibernate:
ddl-auto: update
show-sql: true
存儲(chǔ)引擎是什么?
MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲(chǔ)在文件(或者內(nèi)存)中 這些技術(shù)中的每一種技術(shù)都使用不同的存儲(chǔ)機(jī)制 索引技巧 鎖定水平并且最終提供廣泛的不同的功能和能力 通過選擇不同的技術(shù) 你能夠獲得額外的速度或者功能 從而改善你的應(yīng)用的整體功能
例如 如果你在研究大量的臨時(shí)數(shù)據(jù) 你也許需要使用內(nèi)存存儲(chǔ)引擎 內(nèi)存存儲(chǔ)引擎能夠在內(nèi)存中存儲(chǔ)所有的表格數(shù)據(jù) 又或者 你也許需要一個(gè)支持事務(wù)處理的數(shù)據(jù)庫(以確保事務(wù)處理不成功時(shí)數(shù)據(jù)的回退能力)
這些不同的技術(shù)以及配套的相關(guān)功能在MySQL中被稱作存儲(chǔ)引擎(也稱作表類型) MySQL默認(rèn)配置了許多不同的存儲(chǔ)引擎 可以預(yù)先設(shè)置或者在MySQL服務(wù)器中啟用 你可以選擇適用于服務(wù)器 數(shù)據(jù)庫和表格的存儲(chǔ)引擎 以便在選擇如何存儲(chǔ)你的信息 如何檢索這些信息以及你需要你的數(shù)據(jù)結(jié)合什么性能和功能的時(shí)候?yàn)槟闾峁┳畲蟮撵`活性
選擇如何存儲(chǔ)和檢索你的數(shù)據(jù)的這種靈活性是MySQL為什么如此受歡迎的主要原因 其它數(shù)據(jù)庫系統(tǒng)(包括大多數(shù)商業(yè)選擇)僅支持一種類型的數(shù)據(jù)存儲(chǔ) 遺憾的是 其它類型的數(shù)據(jù)庫解決方案采取的 一個(gè)尺碼滿足一切需求 的方式意味著你要么就犧牲一些性能 要么你就用幾個(gè)小時(shí)甚至幾天的時(shí)間詳細(xì)調(diào)整你的數(shù)據(jù)庫 使用MySQL 我們僅需要修改我們使用的存儲(chǔ)引擎就可以了
在這篇文章中 我們不準(zhǔn)備集中討論不同的存儲(chǔ)引擎的技術(shù)方面的問題(盡管我們不可避免地要研究這些因素的某些方面) 相反 我們將集中介紹這些不同的引擎分別最適應(yīng)哪種需求和如何啟用不同的存儲(chǔ)引擎 為了實(shí)現(xiàn)這個(gè)目的 在介紹每一個(gè)存儲(chǔ)引擎的具體情況之前 我們必須要了解一些基本的問題
如何確定有哪些存儲(chǔ)引擎可用
你可以在MySQL(假設(shè)是MySQL服務(wù)器 以上版本)中使用顯示引擎的命令得到一個(gè)可用引擎的列表
mysql?show?engines; ?? + + + + ?? |?Engine?????|?Support?|?Comment????????????????????????????????????????????????????| ?? + + + + ?? |?MyISAM?????|?DEFAULT?|?Default?engine?as?of?MySQL? ?with?great?performance?????| ?? |?HEAP???????|?YES?????|?Alias?for?MEMORY???????????????????????????????????????????| ?? |?MEMORY?????|?YES?????|?Hash?based ?stored?in?memory ?useful?for?temporary?tables??| ?? |?MERGE??????|?YES?????|?Collection?of?identical?MyISAM?tables??????????????????????| ?? |?MRG_MYISAM?|?YES?????|?Alias?for?MERGE????????????????????????????????????????????| ?? |?ISAM???????|?NO??????|?Obsolete?storage?engine ?now?replaced?by?MyISAM????????????| ?? |?MRG_ISAM???|?NO??????|?Obsolete?storage?engine ?now?replaced?by?MERGE?????????????| ?? |?InnoDB?????|?YES?????|?Supports?transactions ?row level?locking ?and?foreign?keys?| ?? |?INNOBASE???|?YES?????|?Alias?for?INNODB???????????????????????????????????????????| ?? |?BDB????????|?NO??????|?Supports?transactions?and?page level?locking???????????????| ?? |?BERKELEYDB?|?NO??????|?Alias?for?BDB??????????????????????????????????????????????| ?? |?NDBCLUSTER?|?NO??????|?Clustered ?fault tolerant ?memory based?tables?????????????| ?? |?NDB????????|?NO??????|?Alias?for?NDBCLUSTER???????????????????????????????????????| ?? |?EXAMPLE????|?NO??????|?Example?storage?engine?????????????????????????????????????| ?? |?ARCHIVE????|?NO??????|?Archive?storage?engine?????????????????????????????????????| ?? |?CSV????????|?NO??????|?CSV?storage?engine?????????????????????????????????????????| ?? + + + + ?? ?rows?in?set?( ?sec)??
這個(gè)表格顯示了可用的數(shù)據(jù)庫引擎的全部名單以及在當(dāng)前的數(shù)據(jù)庫服務(wù)器中是否支持這些引擎
對(duì)于MySQL 以前版本 可以使用mysql show variables like have_% (顯示類似 have_% 的變量):
mysql?show?variables?like? have_% ;? ?? + + +? ?? |?Variable_name????|?Value????|? ?? + + +? ?? |?have_bdb?????????|?YES??????|? ?? |?have_crypt???????|?YES??????|? ?? |?have_innodb??????|?DISABLED?|? ?? |?have_isam????????|?YES??????|? ?? |?have_raid????????|?YES??????|? ?? |?have_symlink?????|?YES??????|? ?? |?have_openssl?????|?YES??????|? ?? |?have_query_cache?|?YES??????|? ?? + + +? ?? ?rows?in?set?( ?sec)? ??
你可以通過修改設(shè)置腳本中的選項(xiàng)來設(shè)置在MySQL安裝軟件中可用的引擎 如果你在使用一個(gè)預(yù)先包裝好的MySQL二進(jìn)制發(fā)布版軟件 那么 這個(gè)軟件就包含了常用的引擎 然而 需要指出的是 如果你要使用某些不常用的引擎 特別是CSV RCHIVE(存檔)和BLACKHOLE(黑洞)引擎 你就需要手工重新編譯MySQL源碼
使用一個(gè)指定的存儲(chǔ)引擎
你可以使用很多方法指定一個(gè)要使用的存儲(chǔ)引擎 最簡單的方法是 如果你喜歡一種能滿足你的大多數(shù)數(shù)據(jù)庫需求的存儲(chǔ)引擎 你可以在MySQL設(shè)置文件中設(shè)置一個(gè)默認(rèn)的引擎類型(使用storage_engine 選項(xiàng))或者在啟動(dòng)數(shù)據(jù)庫服務(wù)器時(shí)在命令行后面加上 default storage engine或 default table type選項(xiàng)
更靈活的方式是在隨MySQL服務(wù)器發(fā)布同時(shí)提供的MySQL客戶端時(shí)指定使用的存儲(chǔ)引擎 最直接的方式是在創(chuàng)建表時(shí)指定存儲(chǔ)引擎的類型 向下面這樣:
CREATE TABLE mytable (id int title char( )) ENGINE = INNODB
你還可以改變現(xiàn)有的表使用的存儲(chǔ)引擎 用以下語句:
ALTER TABLE mytable ENGINE = MyISAM
然而 你在以這種方式修改表格類型的時(shí)候需要非常仔細(xì) 因?yàn)閷?duì)不支持同樣的索引 字段類型或者表大小的一個(gè)類型進(jìn)行修改可能使你丟失數(shù)據(jù) 如果你指定一個(gè)在你的當(dāng)前的數(shù)據(jù)庫中不存在的一個(gè)存儲(chǔ)引擎 那么就會(huì)創(chuàng)建一個(gè)MyISAM(默認(rèn)的)類型的表
各存儲(chǔ)引擎之間的區(qū)別
為了做出選擇哪一個(gè)存儲(chǔ)引擎的決定 我們首先需要考慮每一個(gè)存儲(chǔ)引擎提供了哪些不同的核心功能 這種功能使我們能夠把不同的存儲(chǔ)引擎區(qū)別開來 我們一般把這些核心功能分為四類:支持的字段和數(shù)據(jù)類型 鎖定類型 索引和處理 一些引擎具有能過促使你做出決定的獨(dú)特的功能 我們一會(huì)兒再仔細(xì)研究這些具體問題
字段和數(shù)據(jù)類型
雖然所有這些引擎都支持通用的數(shù)據(jù)類型 例如整型 實(shí)型和字符型等 但是 并不是所有的引擎都支持其它的字段類型 特別是BLOG(二進(jìn)制大對(duì)象)或者TEXT文本類型 其它引擎也許僅支持有限的字符寬度和數(shù)據(jù)大小
這些局限性可能直接影響到你可以存儲(chǔ)的數(shù)據(jù) 同時(shí)也可能會(huì)對(duì)你實(shí)施的搜索的類型或者你對(duì)那些信息創(chuàng)建的索引產(chǎn)生間接的影響 這些區(qū)別能夠影響你的應(yīng)用程序的性能和功能 因?yàn)槟惚仨氁鶕?jù)你要存儲(chǔ)的數(shù)據(jù)類型選擇對(duì)需要的存儲(chǔ)引擎的功能做出決策
鎖定
數(shù)據(jù)庫引擎中的鎖定功能決定了如何管理信息的訪問和更新 當(dāng)數(shù)據(jù)庫中的一個(gè)對(duì)象為信息更新鎖定了 在更新完成之前 其它處理不能修改這個(gè)數(shù)據(jù)(在某些情況下還不允許讀這種數(shù)據(jù))
鎖定不僅影響許多不同的應(yīng)用程序如何更新數(shù)據(jù)庫中的信息 而且還影響對(duì)那個(gè)數(shù)據(jù)的查詢 這是因?yàn)椴樵兛赡芤L問正在被修改或者更新的數(shù)據(jù) 總的來說 這種延遲是很小的 大多數(shù)鎖定機(jī)制主要是為了防止多個(gè)處理更新同一個(gè)數(shù)據(jù) 由于向數(shù)據(jù)中插入信息和更新信息這兩種情況都需要鎖定 你可以想象 多個(gè)應(yīng)用程序使用同一個(gè)數(shù)據(jù)庫可能會(huì)有很大的影響
不同的存儲(chǔ)引擎在不同的對(duì)象級(jí)別支持鎖定 而且這些級(jí)別將影響可以同時(shí)訪問的信息 得到支持的級(jí)別有三種:表鎖定 塊鎖定和行鎖定 支持最多的是表鎖定 這種鎖定是在MyISAM中提供的 在數(shù)據(jù)更新時(shí) 它鎖定了整個(gè)表 這就防止了許多應(yīng)用程序同時(shí)更新一個(gè)具體的表 這對(duì)應(yīng)用很多的多用戶數(shù)據(jù)庫有很大的影響 因?yàn)樗舆t了更新的過程
頁級(jí)鎖定使用Berkeley DB引擎 并且根據(jù)上載的信息頁( KB)鎖定數(shù)據(jù) 當(dāng)在數(shù)據(jù)庫的很多地方進(jìn)行更新的時(shí)候 這種鎖定不會(huì)出現(xiàn)什么問題 但是 由于增加幾行信息就要鎖定數(shù)據(jù)結(jié)構(gòu)的最后 KB 當(dāng)需要增加大量的行 也別是大量的小型數(shù)據(jù) 就會(huì)帶來問題
行級(jí)鎖定提供了最佳的并行訪問功能 一個(gè)表中只有一行數(shù)據(jù)被鎖定 這就意味著很多應(yīng)用程序能夠更新同一個(gè)表中的不同行的數(shù)據(jù) 而不會(huì)引起鎖定的問題 只有InnoDB存儲(chǔ)引擎支持行級(jí)鎖定
建立索引
建立索引在搜索和恢復(fù)數(shù)據(jù)庫中的數(shù)據(jù)的時(shí)候能夠顯著提高性能 不同的存儲(chǔ)引擎提供不同的制作索引的技術(shù) 有些技術(shù)也許會(huì)更適合你存儲(chǔ)的數(shù)據(jù)類型
有些存儲(chǔ)引擎根本就不支持索引 其原因可能是它們使用基本表索引(如MERGE引擎)或者是因?yàn)閿?shù)據(jù)存儲(chǔ)的方式不允許索引(例如FEDERATED或者BLACKHOLE引擎)
事務(wù)處理
事務(wù)處理功能通過提供在向表中更新和插入信息期間的可靠性 這種可靠性是通過如下方法實(shí)現(xiàn)的 它允許你更新表中的數(shù)據(jù) 但僅當(dāng)應(yīng)用的應(yīng)用程序的所有相關(guān)操作完全完成后才接受你對(duì)表的更改 例如 在會(huì)計(jì)處理中每一筆會(huì)計(jì)分錄處理將包括對(duì)借方科目和貸方科目數(shù)據(jù)的更改 你需要要使用事務(wù)處理功能保證對(duì)借方科目和貸方科目的數(shù)據(jù)更改都順利完成 才接受所做的修改 如果任一項(xiàng)操作失敗了 你都可以取消這個(gè)事務(wù)處理 這些修改就不存在了 如果這個(gè)事務(wù)處理過程完成了 我們可以通過允許這個(gè)修改來確認(rèn)這個(gè)操作
lishixinzhi/Article/program/MySQL/201311/29301
MySQL有多種存儲(chǔ)引擎,每種存儲(chǔ)引擎有各自的優(yōu)缺點(diǎn),可以擇優(yōu)選擇使用:
MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
MySQL支持?jǐn)?shù)個(gè)存儲(chǔ)引擎作為對(duì)不同表的類型的處理器。MySQL存儲(chǔ)引擎包括處理事務(wù)安全表的引擎和處理非事務(wù)安全表的引擎:
· MyISAM管理非事務(wù)表。它提供高速存儲(chǔ)和檢索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默認(rèn)的存儲(chǔ)引擎,除非你配置MySQL默認(rèn)使用另外一個(gè)引擎。
· MEMORY存儲(chǔ)引擎提供“內(nèi)存中”表。MERGE存儲(chǔ)引擎允許集合將被處理同樣的MyISAM表作為一個(gè)單獨(dú)的表。就像MyISAM一樣,MEMORY和MERGE存儲(chǔ)引擎處理非事務(wù)表,這兩個(gè)引擎也都被默認(rèn)包含在MySQL中。
注釋:MEMORY存儲(chǔ)引擎正式地被確定為HEAP引擎。
· InnoDB和BDB存儲(chǔ)引擎提供事務(wù)安全表。BDB被包含在為支持它的操作系統(tǒng)發(fā)布的MySQL-Max二進(jìn)制分發(fā)版里。InnoDB也默認(rèn)被包括在所 有MySQL 5.1二進(jìn)制分發(fā)版里,你可以按照喜好通過配置MySQL來允許或禁止任一引擎。
· EXAMPLE存儲(chǔ)引擎是一個(gè)“存根”引擎,它不做什么。你可以用這個(gè)引擎創(chuàng)建表,但沒有數(shù)據(jù)被存儲(chǔ)于其中或從其中檢索。這個(gè)引擎的目的是服務(wù),在 MySQL源代碼中的一個(gè)例子,它演示說明如何開始編寫新存儲(chǔ)引擎。同樣,它的主要興趣是對(duì)開發(fā)者。
· NDB Cluster是被MySQL Cluster用來實(shí)現(xiàn)分割到多臺(tái)計(jì)算機(jī)上的表的存儲(chǔ)引擎。它在MySQL-Max 5.1二進(jìn)制分發(fā)版里提供。這個(gè)存儲(chǔ)引擎當(dāng)前只被Linux, Solaris, 和Mac OS X 支持。在未來的MySQL分發(fā)版中,我們想要添加其它平臺(tái)對(duì)這個(gè)引擎的支持,包括Windows。
一般情況下,mysql會(huì)默認(rèn)提供多種存儲(chǔ)引擎,你可以通過下面的查看:
看你的mysql現(xiàn)在已提供什么存儲(chǔ)引擎:
mysql
show
engines;
看你的mysql當(dāng)前默認(rèn)的存儲(chǔ)引擎:
mysql
show
variables
like
'%storage_engine%';
你要看某個(gè)表用了什么引擎(在顯示結(jié)果里參數(shù)engine后面的就表示該表當(dāng)前用的存儲(chǔ)引擎):
mysql
show
create
table
表名;
1:查看MYSQL默認(rèn)的存儲(chǔ)引擎:show engines。
Support列, YES表示當(dāng)前版本支持這個(gè)存儲(chǔ)引擎, DEFAULT表示該引擎是默認(rèn)的引擎。NO表示不支持該存儲(chǔ)引擎。如下所示,InnoDB是默認(rèn)的存儲(chǔ)引擎。
2:
修改my.cnf,在配置文件里面增加參數(shù)default-storage-engine,然后重啟數(shù)據(jù)庫服務(wù)。
[mysqld]
default-storage-engine=MyISAM
然后檢查默認(rèn)存儲(chǔ)引擎,就會(huì)看到MyISAM為默認(rèn)存儲(chǔ)引擎了。