TCL-MySQL

事務控制語言 transaction control language

 

事務:一個或一組SQL語句組成一個執行單元,這個執行單元要麼全部執行要麼全部不執行

 

存儲引擎:

顯示存儲引擎SHOW ENGINES;

InnoDB   默認,支持事務

MyISM   mysql5.5版本之前多用,不支持事務

MEMORY    多用,不支持事務

 

ACID

原子性(Atomicity):事務操作是一個不可分割的單位,事務操作要麼都發生要麼都不發生。

一致性(Consistency):事務必須使數據庫從一個一致性狀態到另一個一致性狀態。

隔離性(Isolation):事務執行不受其他事務干擾(隔離級別)

持久性(Durability):一個事務一旦被提交,數據庫的改變是永久的

 

事務創建

1、隱式事務:沒有開啓和結束標誌

如insert、update、delete

2、顯式事務

前提:設置自動提交功能禁用

 

步驟1:開啓事務

set  autocommit =0;當前回話有效

start transaction;  命令行可不寫,禁用自動提交後自動執行

show  variables  like  ‘autocommit’; 查看事務狀態

 

步驟2:編寫sql語句

語句1;

語句2;

。。。(select,insert,update,delete)

 

步驟3

commit;提交事務

rollback:回滾事務(出現異常使用,truncate刪除後不能回滾)

 

 

隔離級別

沒有隔離機制,會導致各種併發問題;

贓讀

例如:兩個事務T1,T2,T1讀取了T2已經更新但是還沒有提交的字段,T2回滾,T1再讀取的事務結果不一樣,之前讀取的內容就是臨時且無效的(可以扔掉的髒數據)

 

不可重複讀

例如:兩個事務T1,T2,T1從表中去讀字段,T2更新後,T1再讀,值不同

 

幻讀

例如:兩個事務T1,T2,T1讀取後T2插入數據,T1再讀出現了多幾行

 

 

數據庫四種隔離級別

read uncommitted  讀未提交

read commit  讀已提交

repeatable read 可重複讀

serializable  串行化

 

Oracle支持兩種事務隔離級別:read commit(默認)、serializable

Mysql支持四種事務隔離級別:repeatable read(默認)

 

命令行操作:

select @@tx_isolation;  查詢隔離級別

set  session  transaction  isolation  level  隔離級別; 設置隔離級別

set  name  字符集; 改變字符集

savepoint 別名:保存點,回滾到某點

 

read uncommitted:都不能避免

read commit:避免贓讀

repeatable read:避免贓讀,不可重複讀

serializable:都避免

 

 

發佈了22 篇原創文章 · 獲贊 1 · 訪問量 8001
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章