"MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持"
這是網上對MyISAM和InnoDB的解釋,很抽象吧,我們用白話的方式解釋一下
其實也比較簡單
所謂事務處理,就是原子性操作。
打個比方,支持事務處理的Innodb表,建設一個論壇中,發帖是給積分的。你發了一個帖子執行一個insert語句,來插入帖子內容,插入後就要執行一個update語句來增加你的積分。假設一種特殊情況突然發生,insert成功了,update操作卻沒有被執行。也就是說你發了帖子卻沒有增加相應的積分。這就會造成用戶不滿。如果使用了事務處理,insert和update都放入到事務中去執行,這個時候,只有當insert和update兩條語句都執行生成的時候才會將數據更新、寫入到數據庫中,如果其中任何一條語句失敗,那麼就會回滾為初始狀態,不執行寫入。這樣就保證了insert和update肯定是一同執行的。
mysiam表不支持事務處理,同時mysiam表不支持外鍵。外鍵不用說了吧?不知道的話,去網上查吧。
同時,在執行數據庫寫入的操作(insert,update,delete)的時候,mysiam表會鎖表,而innodb表會鎖行。通俗點說,就是你執行了一個update語句,那麼mysiam表會將整個表都鎖住,其他的insert和delete、update都會被拒之門外,等到這個update語句執行完成後才會被依次執行。
而鎖行,就是說,你執行update語句是,mysql只會將這一條記錄進行鎖定,只有針對這條記錄的其他寫入、更新操作會被阻塞並等待這條update語句執行完畢後再執行,針對其他記錄的寫入操作不會有影響。
因此,當你的數據庫有大量的寫入、更新操作而查詢比較少或者數據完整性要求比較高的時候就選擇innodb表。當你的數據庫主要以查詢為主,相比較而言更新和寫入比較少,並且業務方面數據完整性要求不那麼嚴格,就選擇mysiam表。因為mysiam表的查詢操作效率和速度都比innodb要快