14、mysql中事务的应用
是什么
事務是一種保護連續(xù)操作同時滿足(實現(xiàn))的一種機制,用來保護數(shù)據(jù)的完整性,只適用于數(shù)據(jù)操作,不適用于結構操作,只有
innodb引擎的表具有事務安全的機制。就是說,在一個事務中做一系列的sql操作,當且僅當一系列sql都執(zhí)行成功時,才會對數(shù)據(jù)
庫的數(shù)據(jù)進行對應的持久化
事務的特性
事務有四大特性:ACID
| A:atomic | 原子性,事務的整個操作是一個整體,不可分割,要么全部成功,要么全部失敗 |
| C:consistency | 一致性,事務操作前后,數(shù)據(jù)表中的數(shù)據(jù)沒有變化 |
| I:isolation | 隔離性,事務操作是互相隔離不受影響的 |
| D:durability | 持久性,數(shù)據(jù)一旦提交,不可改變,永久的改變數(shù)據(jù)表數(shù)據(jù) |
事務的分類
事務可分為自動事務和手動事務,mysql中默認是自動事務
事務通過autocommit變量控制,當autocommit = off/0 時表示手動事務,下邊介紹一下查看自動事務是否開啟和開啟事務
| 操作 | 查看事務 |
| sql | show variables like 'autocommit'; |
| 結果 |
| 操作 | 開啟或關閉事務 |
| sql | set autocommit = 0; set autocommit = 1; |
| 結果 |
事務的操作
# 使用事務 -- 開啟事務(系統(tǒng)將將要進行的操作不直接寫入到數(shù)據(jù)表,而是現(xiàn)存在事務日志) start transaction;-- 執(zhí)行對應的sql update user set name = 'chaizepeng111' where id=5; update card set card_number = '111111111' where id = 4;-- 提交或者回滾 commit;# 回滾點的設置 savepoint 回滾點名字; savepoint a;-- 回滾到指定的回滾點 rollback to a;事務的原理
事務的實現(xiàn)借助的是一個臨時的日志文件,當開始事務時,發(fā)送的sql會存儲到日志文件中,存儲到日志文件時執(zhí)行sql,將結果
存儲到日志文件,當查詢時,會將返回的結果經(jīng)過日志文件加工后再返回,當commit時,臨時文件中的結果就會同步到數(shù)據(jù)庫
中,而如果rollback時,則會刪除臨時文件,不做任何操作
事務的隔離級別
在并發(fā)環(huán)境下使用事務時,就可能產(chǎn)生問題,問題大致分為3類,如下:
| 臟讀 | 事務A讀到了事務B還未提交的數(shù)據(jù) |
| 不可重復讀 | 在一個事務里面讀取了兩次某個數(shù)據(jù),讀出來的數(shù)據(jù)不一致 |
| 幻讀 | 在一個事務里面的操作中發(fā)現(xiàn)了未被操作的數(shù)據(jù) |
為了解決以上問題,就出現(xiàn)了事務的隔離級別
| DEFAULT | 默認隔離級別 |
| READ_UNCOMMITTED | 讀未提交,即能夠讀取到?jīng)]有被提交的數(shù)據(jù),一般不用 |
| READ_COMMITED | 讀已提交,即能夠讀到那些已經(jīng)提交的數(shù)據(jù),可防止臟讀,一般使用此隔離級別 |
| REPEATABLE_READ | 重復讀取,即在數(shù)據(jù)讀出來之后加鎖,讀取數(shù)據(jù)之后自動加鎖,當前事務為結束之前,其他事務不可訪問,解決了臟讀、不可重復讀的問題 |
| SERLALIZABLE | 串行化,最高的事務隔離級別,一個事務一個事務挨著執(zhí)行,效率低,不用 |
介紹一下mysql下如何查看和設置事務的隔離級別
| 解釋 | 查看事務的隔離級別 |
| sql | select @@tx_isolation; |
| 結果 |
| 解釋 | 設置當前會話的事務隔離級別 |
| sql | SET SESSION TRANSACTION ISOLATION LEVEL Read committed; |
| 結果 |
| 解釋 | 設置全局的事務隔離級別 |
| sql | SET GLOBALTRANSACTION ISOLATION LEVEL Read committed; |
| 結果 |
補充:事務的隔離級別設置時的可選參數(shù):Read uncommitted 、Read committed 、Repeatable read 、Serializable
總結
以上是生活随笔為你收集整理的14、mysql中事务的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑剪辑视频配置要求(电脑剪辑视频配置)
- 下一篇: 16、mysql中函数的创建和使用