八股文

鲍宪立發表於2024-04-15

八股文

資料庫

MySQL

常見問題總結

1、什麼是MySQL?

MySQL 是⼀種關係型資料庫,在Java企業級開發中⾮常常⽤,因為 MySQL 是開源免費的,並 且⽅便擴充套件。阿⾥巴巴資料庫系統也⼤量⽤到了 MySQL,因此它的穩定性是有保障的。MySQL 是開放原始碼的,因此任何⼈都可以在 GPL(General Public License) 的許可下下載並根據個性 化的需要對其進⾏修改。MySQL的預設端⼝號是3306。

2、儲存引擎

⼀些常⽤命令

檢視MySQL提供的所有儲存引擎

show engines;

MyISAM和InnoDB區別

MyISAM是MySQL的預設資料庫引擎(5.5版之前)。雖然效能極佳,⽽且提供了⼤量的特性, 包括全⽂索引、壓縮、空間函式等,但MyISAM不⽀持事務和⾏級鎖,⽽且最⼤的缺陷就是崩潰 後⽆法安全恢復。不過,5.5版本之後,MySQL引⼊了InnoDB(事務性資料庫引擎),MySQL 5.5版本後預設的儲存引擎為InnoDB。 ⼤多數時候我們使⽤的都是 InnoDB 儲存引擎,但是在某些情況下使⽤ MyISAM 也是合適的⽐如 讀密集的情況下。(如果你不介意 MyISAM 崩潰恢復問題的話)。

兩者的對⽐:

  1. 是否⽀持⾏級鎖 : MyISAM 只有表級鎖(table-level locking),⽽InnoDB ⽀持⾏級鎖(row-level locking)和表級鎖,預設為⾏級鎖。
  2. 是否⽀持事務和崩潰後的安全恢復: MyISAM強調的是效能,每次查詢具有原⼦性,其執⾏ 速度⽐InnoDB型別更快,但是不提供事務⽀持。但是InnoDB 提供事務⽀持事務,外部鍵等 ⾼級資料庫功能。 具有事務(commit)、回滾(rollback)和崩潰修復能⼒(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表。
  3. 是否⽀持外來鍵: MyISAM不⽀持,⽽InnoDB⽀持。
  4. 是否⽀持MVCC :僅 InnoDB ⽀持。應對⾼併發事務, MVCC⽐單純的加鎖更⾼效;MVCC只 在 READ COMMITTED 和 REPEATABLE READ 兩個隔離級別下⼯作;MVCC可以使⽤ 樂 觀(optimistic)鎖 和 悲觀(pessimistic)鎖來實現;各資料庫中MVCC實現並不統⼀。

相關文章