資料庫:事務
目錄
一、儲存引擎
1.什麼是儲存引擎?
資料庫儲存引擎是資料底層軟體組織,規範了資料底層的組織方式、鎖水平、索引策略等。不同的儲存引擎提供不同的儲存機制、索引技巧、鎖定水平等功能,使用不同的儲存引擎還可以獲得特定的功能。
資料庫管理系統(DBMS)使用資料儲存引擎進行建立、查詢、更新和刪除資料。
mysql的核心就是儲存引擎。mysql是外掛式資料庫,支援外掛式儲存引擎,mysql5.5之後預設使用InnoDB儲存引擎。什麼是外掛式?可以切換功能元件,比如mysql可以切換儲存引擎。
2.常見的儲存引擎有哪些?
InnoDB:事務型資料庫首選的儲存引擎,安全效能高,支援行鎖定,支援外來鍵。
myisam:插入速度和查詢效率較高,但不支援事務。
memory:資料儲存於記憶體,查詢效率高。
功能 | myisam | memory | InnoDB | Archive |
---|---|---|---|---|
儲存限制 | 256TB | RAM | 64TB | None |
支援事務 | No | No | Yes | No |
支援全文索引 | Yes | No | No | No |
支援數索引 | Yes | Yes | Yes | No |
支援雜湊索引 | No | Yes | No | No |
支援資料快取 | No | N/A | Yes | No |
支援外來鍵 | No | No | Yes | No |
3.如何檢視和設定儲存引擎?
#檢視索引
show engines;
#在mysql配置檔案my.ini中修改,如下,然後重啟mysql服務即可生效
default-storage-engine=INNODB
二、mysql字符集編碼
1.檢視字符集編碼
#character_set_client
#character_set_connection
#character_set_database
#character_set_filesystem
#character_set_results
#character_set_server
#character_set_system
show variables like '%char%';
2.修改字符集編碼
步驟:
- 關閉mysql服務:net stop mysql(windows命令)
- 修改my.ini配置檔案:
- [client] default-character-set=utf8
- [mysql] default-character-set=utf8
- [mysqld] character-set-server=utf8 和 collation-server=utf8_general_ci
- 啟動mysql服務:net start mysql
三、事務
1.什麼是事務?
一組DML操作要麼同時成功,要麼同時失敗。
2.開啟和提交事務?
語法格式:
#關閉mysql自動提交事務
set autocommit = 0;
#開啟事務
start transaction;
#業務
……
commit;#提交:將事務持久化到資料庫
rollback;#回滾:恢復到開始事務之前的狀態
注意事項:
- dml操作必須在事務環境執行。
- mysql預設自動提交事務,比如單句DML操作就是這樣。
- set autocommit=0; #關閉mysql自動提交事務。
3.事務的ACID特性(面試經常問)
原子性:事務內的DML操作必須整體成功或整體失敗。
一致性:事務執行前後整體狀態變,比如表結構,欄位約束等。
隔離性:併發事務之間不能產生干擾。
永續性:事務提交後將持久化到資料庫。
4.併發事務產生的問題
多個執行緒開啟各自的事務操作資料庫中的資料時,資料庫系統要負責隔離操作,以保證各個執行緒在獲取資料時的準確性。如果不考慮隔離性,可能會引發如下問題:
髒讀:一個事務讀(t1)到另一個事務(t2)提交的資料,則t1髒讀了資料。針對同一條記錄。
不可重複讀:一個事務(t1)在可讀範圍內,多次讀取發現數據不一致,原因是另一個事務(t2)在此過程中修改了該資料並提交了事務,則t1重複讀了資料。針對同一條記錄。重點在於修改。
幻讀:一個事務(t1)可讀範圍內,多次讀取發現數據新增或減少,原因是另一個事務(t2)在此過程中新增或刪除記錄並提交事務,則t1出現幻讀。針對多條記錄。重點在於插入或刪除。
5.設定事務隔離級別
資料庫定義了4中隔離級別:
Read uncommitted(讀未提交):最低級別,以上情況均無法保證,不能解決任何問題。
Read committed(讀已提交):可避免髒讀情況發生。
Repeatable read(可重複讀):可避免髒讀、不可重複讀情況的發生。
Serializable(序列化):可避免髒讀、不可重複讀、幻讀情況的發生。
Oracle支援2種事務隔離級別:Read committed 和 Serializable,預設是Read committed。
mysql支援4種事務隔離級別,預設是Repeatable read。
6.檢視和修改事務隔離級別
#檢視
select @@tx_isoation;
#修改
set session transaction isoaiton level 值;