"MyISAM類型不支持事務(wù)處理等高級(jí)處理,而InnoDB類型支持"
?
這是網(wǎng)上對(duì)MyISAM和InnoDB的解釋,很抽象吧,我們用白話的方式解釋一下
?
其實(shí)也比較簡單
?
所謂事務(wù)處理,就是原子性操作。
打個(gè)比方,支持事務(wù)處理的Innodb表,建設(shè)一個(gè)table,發(fā)帖是給積分的。你發(fā)了一個(gè)帖子執(zhí)行一個(gè)insert語句,來插入帖子內(nèi)容,插入后就要執(zhí)行一個(gè)update語句來增加你的積分。假設(shè)一種特殊情況突然發(fā)生,insert成功了,update操作卻沒有被執(zhí)行。也就是說你發(fā)了帖子卻沒有增加相應(yīng)的積分。這就會(huì)造成用戶不滿。如果使用了事務(wù)處理,insert和update都放入到事務(wù)中去執(zhí)行,這個(gè)時(shí)候,只有當(dāng)insert和update兩條語句都執(zhí)行生成的時(shí)候才會(huì)將數(shù)據(jù)更新、寫入到table,如果其中任何一條語句失敗,那么就會(huì)回滾為初始狀態(tài),不執(zhí)行寫入。這樣就保證了insert和update肯定是一同執(zhí)行的。
?
?
myisam表不支持事務(wù)處理,同時(shí)myisam表不支持外鍵。外鍵不用說了吧?不知道的話,去網(wǎng)上查吧。
同時(shí),在執(zhí)行數(shù)據(jù)庫寫入的操作(insert,update,delete)的時(shí)候,myisam表會(huì)鎖表,而innodb表會(huì)鎖行。通俗點(diǎn)說,就是你執(zhí)行了一個(gè)update語句,那么myisam表會(huì)將整個(gè)表都鎖住,其他的insert和delete、update都會(huì)被拒之門外,等到這個(gè)update語句執(zhí)行完成后才會(huì)被依次執(zhí)行。
?
?
而鎖行,就是說,你執(zhí)行update語句是,只會(huì)將這一條記錄進(jìn)行鎖定,只有針對(duì)這條記錄的其他寫入、更新操作會(huì)被阻塞并等待這條update語句執(zhí)行完畢后再執(zhí)行,針對(duì)其他記錄的寫入操作不會(huì)有影響。
?
?
因此,當(dāng)你的數(shù)據(jù)庫有大量的寫入、更新操作而查詢比較少或者數(shù)據(jù)完整性要求比較高的時(shí)候就選擇innodb表。當(dāng)你的數(shù)據(jù)庫主要以查詢?yōu)橹鳎啾容^而言更新和寫入比較少,并且業(yè)務(wù)方面數(shù)據(jù)完整性要求不那么嚴(yán)格,就選擇myisam表。因?yàn)閙yisam表的查詢操作效率和速度都比innodb要快
這是網(wǎng)上對(duì)MyISAM和InnoDB的解釋,很抽象吧,我們用白話的方式解釋一下
?
其實(shí)也比較簡單
?
所謂事務(wù)處理,就是原子性操作。
打個(gè)比方,支持事務(wù)處理的Innodb表,建設(shè)一個(gè)table,發(fā)帖是給積分的。你發(fā)了一個(gè)帖子執(zhí)行一個(gè)insert語句,來插入帖子內(nèi)容,插入后就要執(zhí)行一個(gè)update語句來增加你的積分。假設(shè)一種特殊情況突然發(fā)生,insert成功了,update操作卻沒有被執(zhí)行。也就是說你發(fā)了帖子卻沒有增加相應(yīng)的積分。這就會(huì)造成用戶不滿。如果使用了事務(wù)處理,insert和update都放入到事務(wù)中去執(zhí)行,這個(gè)時(shí)候,只有當(dāng)insert和update兩條語句都執(zhí)行生成的時(shí)候才會(huì)將數(shù)據(jù)更新、寫入到table,如果其中任何一條語句失敗,那么就會(huì)回滾為初始狀態(tài),不執(zhí)行寫入。這樣就保證了insert和update肯定是一同執(zhí)行的。
?
?
myisam表不支持事務(wù)處理,同時(shí)myisam表不支持外鍵。外鍵不用說了吧?不知道的話,去網(wǎng)上查吧。
同時(shí),在執(zhí)行數(shù)據(jù)庫寫入的操作(insert,update,delete)的時(shí)候,myisam表會(huì)鎖表,而innodb表會(huì)鎖行。通俗點(diǎn)說,就是你執(zhí)行了一個(gè)update語句,那么myisam表會(huì)將整個(gè)表都鎖住,其他的insert和delete、update都會(huì)被拒之門外,等到這個(gè)update語句執(zhí)行完成后才會(huì)被依次執(zhí)行。
?
?
而鎖行,就是說,你執(zhí)行update語句是,只會(huì)將這一條記錄進(jìn)行鎖定,只有針對(duì)這條記錄的其他寫入、更新操作會(huì)被阻塞并等待這條update語句執(zhí)行完畢后再執(zhí)行,針對(duì)其他記錄的寫入操作不會(huì)有影響。
?
?
因此,當(dāng)你的數(shù)據(jù)庫有大量的寫入、更新操作而查詢比較少或者數(shù)據(jù)完整性要求比較高的時(shí)候就選擇innodb表。當(dāng)你的數(shù)據(jù)庫主要以查詢?yōu)橹鳎啾容^而言更新和寫入比較少,并且業(yè)務(wù)方面數(shù)據(jù)完整性要求不那么嚴(yán)格,就選擇myisam表。因?yàn)閙yisam表的查詢操作效率和速度都比innodb要快
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
