1.MySQL中事務默認隔離級別是什麼?
- REPEATABLE READ (可重複讀)
2.MySQL中有哪幾種鎖? 你能列舉死鎖的場景嗎?
鎖類型 | 開銷 | 加鎖範圍 | 是否會出現死鎖 | 併發性能 |
---|---|---|---|---|
表 級 鎖 | 開銷最小的策略,加鎖速度快 | 鎖定整張表 | 不會出現死鎖 | 併發度最低 |
行 級 鎖 | 開銷大,加鎖速度慢 | 鎖定一行數據 | 會出現死鎖 | 併發讀最 高 |
頁 級 鎖 | 介於表鎖和行鎖之間 | 鎖定一頁數據 | 會出現死鎖 | 介於表鎖和行鎖之間 |
死鎖是指兩個或多個事務在同一資源上相互佔用,並請求鎖定對方佔用的資源,從而導致惡性循環的 現象。多個事
務同時鎖定同一個資源時,也會產生死鎖。如下:
事 務 1 :
START TRANSACTION;
UPDATE account SET balance= balance-1000 WHERE card_id=1;
UPDATE account SET balance= balance+1000 WHERE card_id=2;
COMMIT;
事 務 2 :
START TRANSACTION;
UPDATE account SET balance= balance-1000 WHERE card_id=2;
UPDATE account SET balance= balance+1000 WHERE card_id=1;
COMMIT;
如果剛好兩個事務都執行了第一個條update語句,更新了一行數據,同時也鎖定了該行數據。接着兩 個事務都
嘗試去執行第二條update語句,發現該行數據已經被對方鎖定,然後兩個事務都等待對方釋放鎖, 同時又持有
對方需要的鎖,則陷入了死鎖。
3.簡單描述MySQL的MVCC是什麼
- MVCC是通過在每行記錄後面保存兩個隱藏的列來實現的。這兩個列,一個保存了行的創建時間,一個保存行的過期時間(或刪除時間)。當然存儲的並不是實際的時間值,而是系統版本號(system version number)。每開始一個新的事務,系統版本號都會自動遞增。事務開始時刻的系統版本號會作爲事務的版本號,用來和查詢到的每行記錄的版本號進行比較。
4.MySQL中索引有哪幾種類型?
- Mysql中根據各個索引的特性主要分爲:普通索引、唯一索引、主鍵索引、組合索引、全文索引。
5.你能說說InnoDB和MyISAM存儲引擎的區別嗎?
- InnoDB
– 支持事務,支持事務的四種隔離級別。
– 支持行級鎖,不支持表級鎖。
– InnoDB支持外鍵。
一 個 InnoDb 引 擎 存 儲 在 一 個 文 件 空 間 ( 共 享 表 空 間 , 表 大 小 不 受 操 作 系 統 控 制 ,
一個表可能分佈在多個文件裏),也有可能爲多個(設置爲獨立表空,表大小受
操 作 系 統 文 件 大 小 限 制 , 一 般 爲 2G) , 受 操 作 系 統 文 件 大 小 的 限 制 ;
主鍵索引採用聚集索引(索引的數據域存儲數據文件本身),輔索引的數據域存
儲主鍵的值;因此從輔索引查找數據,需要先通過輔索引找到主鍵值,再訪問輔
索 引 ; 最 好 使 用 自 增 主 鍵 , 防 止 插 入 數 據 時 , 爲 維 持 B+樹 結 構 , 文 件 的 大 調 整 。
- MyISAM
–不支持事務。
–支持表級鎖,不支持行級鎖。
–MyISAM引擎不支持外鍵。
一 個 MYISAM 表 有 三 個 文 件 : 索 引 文 件 、 表 結 構 文 件 、 數 據 文 件 ;
採用菲聚集索引,索引文件的數據域存儲指向數據文件的指針。輔索引與主索引
基本一致,但是輔索引不用保證唯一性。
6.MySQL 中 InnoDB 支持的四種事務隔離級別名稱,以及之間的區別?
SQL 標 準 定 義 的 四 個 隔 離 級 別 爲 :
- read uncommited : 讀未提交。多事務場景,允許一個事務讀到另一個事務未提交的數據。
- read committed: 讀提交。多事務場景,不允許一個事務讀到另一個事務未提交的數據。
- repeatable read: 可重複讀。一個事務操作時,不允許其他事務修改當前事務操作的數據。
- serializable : 序列化讀,也加串行讀。事務是串行的。
7.myisamchk 是用來做什麼的?
- 它主要用於壓縮MyISAM表,減少磁盤或內存的佔用。
MyISAM Static 和 MyISAM Dynamic 有 什 麼 區 別 ?
在 MyISAM Static 上 的 所 有 字 段 有 固 定 寬 度 。 動 態 MyISAM 表 將 具 有 像 TEXT,
BLOB 等 字 段 , 以 適 應 不 同 長 度 的 數 據 類 型 。
MyISAM Static 在 受 損 情 況 下 更 容 易 恢 復 。
8.如何查看指定表上定義了哪些索引?
- SHOW INDEX FROM 表名;
9. 主鍵字段類型爲bigint ,設置爲 AUTO INCREMENT 時 , 如果達到最大值會發生什麼?
- 任何進一步的插入都將產生錯誤,因爲密鑰已被使用。
ERROR 1467 (HY000): Failed to read auto-increment value from storage engine mysql>
10. MySQL中的慢查詢日誌作用是什麼?
-mysql的慢查詢日誌是msyql提供的一種日誌記錄,它用來記錄在msyql中響應時間超過閥值的語句,比如具體指運行時間超過long_query_time值的sql,則會被記錄到慢查詢日誌中。
未完… 資料整理自網絡各處