mysql myisam 支持事务吗_第三章(附)mysql表类型MyISAM和InnoDB区别(决定了是否支持事务)...
mysql表類型MyISAM和InnoDB區(qū)別
MyISAM:這個是默認(rèn)類型,它是基于傳統(tǒng)的ISAM類型,ISAM是Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫,它是存儲記錄和文件的標(biāo)準(zhǔn)方法.與其他存儲引擎比較,MyISAM具有檢查和修復(fù)表格的大多數(shù)工具. MyISAM表格可以被壓縮,而且它們支持全文搜索.它們不是事務(wù)安全的,而且也不支持外鍵。如果事物回滾將造成不完全回滾,不具有原子性。如果執(zhí)行大量 的SELECT,MyISAM是更好的選擇。
InnoDB:這種類型是事務(wù)安全的.它與BDB類型具有相同的特性,它們還支持外鍵.InnoDB表格速度很快.具有比BDB還豐富的特性,因此如果需
要一個事務(wù)安全的存儲引擎,建議使用它.如果你的數(shù)據(jù)執(zhí)行大量的INSERT或UPDATE,出于性能方面的考慮,應(yīng)該使用InnoDB表,
對于支持事物的InnoDB類型的標(biāo),影響速度的主要原因是AUTOCOMMIT默認(rèn)設(shè)置是打開的,而且程序沒有顯式調(diào)用BEGIN
開始事務(wù),導(dǎo)致每插入一條都自動Commit,嚴(yán)重影響了速度。可以在執(zhí)行sql前調(diào)用begin,多條sql形成一個事物(即使autocommit打
開也可以),將大大提高性能。
1. 4.0以上mysqld都支持事務(wù),包括非max版本。3.23的需要max版本mysqld才能支持事務(wù)。
2. 創(chuàng)建表時如果不指定type則默認(rèn)為myisam,不支持事務(wù)。
可以用 show create table tablename 命令看表的類型。
2.1 對不支持事務(wù)的表做start/commit操作沒有任何效果,在執(zhí)行commit前已經(jīng)提交,測試:
執(zhí)行一個msyql:
use test;
drop table if exists tn;
create table tn (a varchar(10)) type=myisam;
drop table if exists ty;
create table ty (a varchar(10)) type=innodb;
begin;
insert into tn values(’a');
insert into ty values(’a');
select * from tn;
select * from ty;
都能看到一條記錄
執(zhí)行另一個mysql:
use test;
select * from tn;
select * from ty;
只有tn能看到一條記錄
然后在另一邊
commit;
才都能看到記錄。
3. 可以執(zhí)行以下命令來切換非事務(wù)表到事務(wù)(數(shù)據(jù)不會丟失),innodb表比myisam表更安全:
alter table tablename type=innodb;
3.1 innodb表不能用repair table命令和myisamchk -r table_name
但可以用check table,以及mysqlcheck [OPTIONS] database [tables]
4. 啟動mysql數(shù)據(jù)庫的命令行中添加了以下參數(shù)可以使新發(fā)布的mysql數(shù)據(jù)表都默認(rèn)為使用事務(wù)(
只影響到create語句。)
–default-table-type=InnoDB
測試命令:
use test;
drop table if exists tn;
create table tn (a varchar(10));
show create table tn;
5. 臨時改變默認(rèn)表類型可以用:
set table_type=InnoDB;
show variables like ‘table_type’;
或:
c:mysqlbinmysqld-max-nt –standalone –default-table-type=InnoDB
于mysql來說,最具有代表性的表存儲引擎就是InnoDB和MyISAM.兩者之間最主要的區(qū)別就是是否進(jìn)行:是否進(jìn)行外鍵的數(shù)據(jù)完整性檢查。
InnoDB 存儲引擎支持對外鍵約束的檢查功能,這些約束包括 delete,update,cascade(這個具體是什么含義,留待以后補(bǔ)充) 。
外鍵約束檢查(外鍵增強(qiáng))的好處或者優(yōu)點(diǎn)是:
1?????????? 如果關(guān)聯(lián)設(shè)計恰當(dāng),可以使程序員更難將數(shù)據(jù)不一致性引入數(shù)據(jù)庫
2?????????? 數(shù)據(jù)庫服務(wù)器具有集中式約束檢查功能,就可以不必再應(yīng)用程序一側(cè)對數(shù)據(jù)進(jìn)行該類檢查,從而避免了不同的引用程序使用不同的方式去檢查約束。
3?????????? 使用級聯(lián)更新和刪除,簡化了應(yīng)用程序代碼
4?????????? 設(shè)計欠當(dāng)?shù)年P(guān)聯(lián),有助于使用文檔的方式記錄表間的關(guān)系
但是以上的好處,需要數(shù)據(jù)庫服務(wù)器為執(zhí)行此類檢查花費(fèi)額外的開銷,增加了數(shù)據(jù)庫服務(wù)器的負(fù)擔(dān),進(jìn)而影響數(shù)據(jù)庫的性能。
如果在表中不需要外鍵,也想避免引用完整性的檢查,則可以選擇使用MyISAM存儲
引擎。對于那些只有insert和select的應(yīng)用程序,選擇MyISAM會獲得更好的性能。但是如果使用MyISAM引擎時,如果有外鍵關(guān)聯(lián),那么需要再應(yīng)用程序級的層面上處理這類關(guān)聯(lián),使得數(shù)據(jù)的完整性獲得保證。
DBA(數(shù)據(jù)庫管理員)要創(chuàng)建拓?fù)潢P(guān)聯(lián),這樣會導(dǎo)致恢復(fù)單個表變的困難(加載依賴其他表的表時,MySQL允許你臨時禁止外鍵檢查,從而降低了該難度)。對于存在外鍵的表的,需要注意這個問題。
總結(jié)
以上是生活随笔為你收集整理的mysql myisam 支持事务吗_第三章(附)mysql表类型MyISAM和InnoDB区别(决定了是否支持事务)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手动开启群辉php_如何使用Synolo
- 下一篇: 现代软件工程 作业 个人项目