十八、MySQL之TCL事务控制语言(详解)
TCL :
Transaction Control Language 事務控制語言
零、MySQL 中的存儲引擎
1、概念:在mysql中的數據用各種不同的技術存儲在文件(或內存)中。
2、通過show engines;來查看mysql支持的存儲引擎。
3、 在mysql中用的最多的存儲引擎有:innodb,myisam ,memory 等。其中innodb支持事務,而myisam、memory等不支持事務
一、事務:
事務由單獨單元的一個或多個SQL語句組成,在這個單元中,每個MySQL語句是相互依賴的。而整個單獨單元作為一個不可分割的整體,如果單元中某條SQL語句一旦執行失敗或產生錯誤,整個單元將會回滾。所有受到影響的數據將返回到事物開始以前的狀態;如果單元中的所有SQL語句均執行成功,則事物被順利執行。
一個或一組sql語句組成一個執行單元,這個執行單元要么全部執行,要么全部不執行。
案例:轉賬
張三豐 1000 郭襄 1000
update 表 set 張三豐的余額=500 where name=‘張三豐’
意外
update 表 set 郭襄的余額=1500 where name=‘郭襄’
事務的特性:ACID
1. 原子性:一個事務不可再分割,要么都執行要么都不執行
2. 一致性:一個事務執行會使數據從一個一致狀態切換到另外一個一致狀態
3. 隔離性:一個事務的執行不受其他事務的干擾
4. 持久性:一個事務一旦提交,則會永久的改變數據庫的數據.
二、事務的創建
隱式事務:事務沒有明顯的開啟和結束的標記
比如insert、update、delete語句
delete from 表 where id =1;
顯式事務:事務具有明顯的開啟和結束的標記
前提:必須先設置自動提交功能為禁用
set autocommit=0;
三、事務的隔離級別:
| read uncommitted | √ | √ | √ |
| read committed | X | √ | √ |
| repeatable read | X | X | √ |
| serializable | X | X | X |
對于同時運行的多個事務, 當這些事務訪問數據庫中相同的數據時, 如果沒
有采取必要的隔離機制, 就會導致各種并發問題:
數據庫事務的隔離性: 數據庫系統必須具有隔離并發運行各個事務的能力, 使它們不會相互影響, 避免各種并發問題.
一個事務與其他事務隔離的程度稱為隔離級別. 數據庫規定了多種事務隔
離級別, 不同隔離級別對應不同的干擾程度, 隔離級別越高, 數據一致性就
越好, 但并發性越弱.
數據庫提供的 4 種事務隔離級別:
Oracle 支持的 2 種事務隔離級別:READ COMMITED, SERIALIZABLE。 Oracle 默認的事務是第二個隔離級別為: READ COMMITED
Mysql 支持 4 種事務隔離級別. Mysql 默認的事務是第三個隔離級別為: REPEATABLE READ
select @@tx_isolation;
set session|global transaction isolation level 隔離級別;
update 表 set 張三豐的余額=500 where name=‘張三豐’
update 表 set 郭襄的余額=1500 where name=‘郭襄’
結束事務的語句;
每啟動一個 mysql 程序, 就會獲得一個單獨的數據庫連接. 每個數據庫連接都有一個全局變量 @@tx_isolation, 表示當前的事務隔離級別.
- 查看當前的隔離級別: SELECT @@tx_isolation;
- 設置當前 mySQL 連接的隔離級別:
set transaction isolation level read committed; - 設置數據庫系統的全局的隔離級別:
set global transaction isolation level read committed;
四、代碼演示
SHOW VARIABLES LIKE 'autocommit'; SHOW ENGINES;1.演示事務的使用步驟
#開啟事務 SET autocommit=0; START TRANSACTION; #編寫一組事務的語句 UPDATE account SET balance = 1000 WHERE username='張無忌'; UPDATE account SET balance = 1000 WHERE username='趙敏';#結束事務 ROLLBACK; #commit;SELECT * FROM account;
2. 演示事務對于delete和truncate的處理的區別:
在事務中,delete 刪除表是支持rollback回滾的;
但是,truncate 刪除表是不支持rollback回滾的
總結
以上是生活随笔為你收集整理的十八、MySQL之TCL事务控制语言(详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 函数式编程包_python
- 下一篇: 使用pymysql进行数据库的增删改查