搜尋
首頁資料庫mysql教程關於Mysql事務性

關於Mysql事務性

Oct 13, 2017 am 10:30 AM
mysql關於

1》事務指的是什麼?
          事務可以看做一個業務邏輯處理單元,這個單元要麼執行,要麼不執行;
2》ACID的原則:
       (Consistency)
            A 帳戶有3000塊, B 帳戶2000快,
             --〠 --和B帳戶總和是5000快
           事物執行之前和執行之後,這個總和這個狀態,應該一致的。
       (3)隔離性(Lsolation)
              A帳戶從3000               A賬戶從3000    ##                select sun() A B 之間總和
      (4)持久性(Durability)
              保證持久性:
           事務之前將資料寫入到磁碟上去了,如果要撤回呢?資料從磁碟上撤回?速度很慢?很痛苦?怎麼辦?
             2>結合事務志來完成
                   與資料區存在時它與存在什麼區別文件?
                 區別:事務誌產生的是順序I/O,而磁碟資料檔案是隨機I/O 事務日誌每一個操作都是次序寫到磁碟上一個連續的儲存區塊裡面去的,而我們的資料檔案並非如此。
                       (1)東西日誌:順序IO
            隨機輸出 系統             將事務寫入到事務日誌當中,過一會之後事物後台或相關的進程將事務當中的資料重新落地到資料檔當中,這樣我們保證事物所操作的資料的持久性。

3》事務的狀態.
      (1)要麼是活動事務
              事務正在執行當中#  我們知道事務要麼執行,要麼不執行,哪什麼叫做部分提交呢?
              就是事務已經執行,一部分已經寫入磁碟,另一部分正在執行當中,最後一條執行語句正在寫的過程當中,我們把它叫做提交了,但是並沒有達到目的,叫做失敗的事務
      (4)中止的事務

              中止的是叫做沒有提交,或者走一半就提前結束了,叫做中止。  

      (5)提交的事務
              健康提交完成的事務,我們的事務一定是存在這5種狀態中的某一中,一旦提交,就無法在事務中提交,就無法撤銷事務。

4》事務的同時與調度
       事務的同時:
            1>提高吞吐量與資源使用率##〠     1>          事務之間提交為了降低彼此之間的影響,我們的需要事務進行隔離,如果隔離呢?這要靠事務調度來完成,任何一個資料庫系統本身在事務調度上都有這複雜           調度方法集合很多的策略來完成調度的,一般來講為了保證事務的隔離性和原子性,他們需要通過事務調度來完成,而調度通常的策略有2種:
         

          事務調度:
              1>可恢復調度
     〠  時候,任何兩個事務的交叉執行都不會導致另一個事務的狀態改變,我們將它稱為:可恢復調度

              2>無級聯調度
                 結束後恢復中恢復的任何行為和行為之後的可恢復狀態之後的任何可恢復狀況?影響,尤其是在事務回滾的時候還是會影響,在事務進行回滾的時候還是會                    影響,所以為了避免回滾的時候產生影響還可以實行所謂的叫做:無級聯調度。

5》事務的隔離
         我們知道事務調度,事務可能涉及多個操作,這些操作可以交叉執行,事務調度的存在就是為了更好調度次序使得這些交叉執行彼此之間不會產生過大的影        響,那麼為了進可能降低事務之間的影響,於是我們有所謂的隔離級別,  事務的隔離級別有四個。哪四個?
             1>讀取未提交read uncommitted
           1>讀取未提交read uncommitted
                     〠            與等級好多少,讀取未提交的數            據,也被成為:髒讀(Dirty Read)    
             2>    大多數的資料庫的預設隔離等級(但是Mysql預設等級不是這個),它滿足了隔離的簡單定義:一個事務只能看到見已經提交事務所所做的改變;      
             3>可重讀 repeatable read級別,它確保同一個事務的多個實例在並發讀取資料時,會看到同樣的資料行,不過理論上,這導致另一個問題:幻讀(Phantom                  read) 簡單的說法:幻讀指當作使用者讀取某一範圍的資料行時,另一個事務在該範圍內插入了新一行,當使用者再讀取該範圍的資料行時,會發現新的「幻影行」
         ,Innodb和Falcon引擎透過多重版本並發控制(MVCC)機制解決了這個問題。

         4>可串列serializable

                  這就最高層級的隔離機制,它透過強迫事務排序,使其步能相互衝突、簡單的幻說:從而解決了它在步能相互衝突的問題排序,使其步能相互衝突、從而解決了幻話每個讀取資料行加上了一個共享鎖定,在這個級別,            可能導致大量的逾時現象和鎖定競爭.

                一般來講我們的並發控制一般來實現隔離我們的等級,一般意義來實現隔離我們的等級,一般意義來實現隔離我們的等級,一般意義來實現隔離我們的等級,一般意義來實現隔離我們的等級,一般意義來實現隔離我們的等級,一般意義來實現隔離我們的程度。並發控制來實現,而我們的並發控制即時
                  技術依賴於幾種技術:
          1 鎖定鎖定「鎖定」與鎖定時鎖定「鎖定」.                    (2).時間戳,必須記錄每筆事務的啟動時間和執行時間
                    (3).多重版本與快照隔離

 㠀    ).        事務的餓死狀態(鎖飢餓):
                   當一個事務申請一種類型的鎖,為了實現並發控制,它肯需要這道鎖,但是由於事務調度的結果,導致它一直得不到該鎖,所產生的結果就是:# 。除此之外還有一種鎖叫做:死鎖

6》啟動事務與回滾

     一般來說啟動事務的操作:
            1&  
            2>事務回滾
                 〠        〠  〠  #             3>提交事務
                  commit
      gt;啟動一個事務
                  start transaction;
          〠2&F 刪除其中一個# 中的資訊;   delete from student where num='4'
           3>如果進行資料復原?事務回滾。猜對了。
                  rollback;
           4>檢查驗證,4是否恢復回來了?
                  select * from student;
           
           1>啟動一個事務
               〠 start〠
o                  delete from student where num='4'
         commit ;

           4>再嘗試回滾

               
                 select * from student;
                      例如:一個事務裡面有一個百個操作,100個操作語句,我執行到第80條的時候,才發現第75個出錯了執行錯了,這時候是不是要回滾,前80個都撤                  回,而這時候於怎時辦呢? 保存點的作用就出來。例如:我每10個作業保存一次:    
          ---->10(做保存點1)------>20(存檔點2)

  做一個啟動一個啟動   1 事務
                start transaction;
          2> delete from student where name='cuihua'
                  保存一個事務點
     ##           3>刪除其中一個student表中的"西門吹牛"的信息
              chun delete from students         savepoint yyb    
          4>刪除其中一個student表的"牛二"的訊息

                delete from student where name='niuer'

           point  〠〠〠〠   5>好了開始恢復
                如果想恢復西門吹雪
     什麼是yya這個保存點呢?      
          6>檢查是否恢復成功
                select * from student;#

          6.3 事務的自動提交
          1>查詢mysql事務自動提交
                   mysql> select @@autocommit;
                  〠       ----+
                             | @@autocommit |
      | @@autocommit |
                                  +-------- ------+
                             1 row in set (0.00 sec)
2#             set autocommit=0;

          3>測試驗證
                 delete from student where name='ximenchuniu'
             〠〠   是否恢復回來?而且我們沒有明確啟動一個事務把?事務支援DML語句回滾.DDL為隱試提交,所以很遺憾不支援。

   驗證讀取未提交:
           查詢隔離等級select @@tx_isolation;
         一個mysql,開兩個窗口,雙方交叉啟動一個交易
   視窗二共同的操作:

             1.select @@tx_isolation;

         > 是 tg_Lad solation);
         > 視窗1作業:
            1.start transaction; 啟動一個交叉的事務
              2.update student set age='70'  where d_id='1010';#>一個交叉的事務
              2.select * 從 student;兩個窗口,雙方交叉啟動一個事務
   窗口1和窗口2共同的操作:
             1.select @@tx_isolation;##〠 td
#             窗口1操作:
             1.start  transaction;啟動一個交叉的事務
             2.update student set      2.update student set      2.update student 1         3.commit; 只有這裡提交了,在2視窗第三步驟才會重新看到所提交的資料

           視窗2動作
             student;   未看到1窗口更新資料
             3.select * from student;   當A視窗執行了3步驟提交後,才能看到更新數據,避免髒讀        

   驗證可重讀
            一個mysql,開兩個窗口,雙方交叉啟動一個事務
   幻影讀:
           12段一個交易同一天查詢語句得到記錄數量都不同稱為幻影讀

            視窗1與視窗2共同的操作:
             㠀  㠀1.select @x   2.set tx_isolation='repeatable-read ';

            視窗1操作
              1.start transaction age='60' where num='10';
              3.commit ;

            視窗2操作
              1.start  transaction; 啟動一個〠與含 含〠)未看到1視窗所更新資料
              3.select * from student ;   1commit;後依舊未看到1視窗所更新資料
              4.commit;    2視窗提交後才可看到1視窗索取兩個窗口,雙方交叉啟動一個事務
             視窗1與視窗2共同的操作:
              2.set tx_isolation='serializable';

             窗口。操作之後,才能執行!


             視窗2操作
                提交了,1視窗的update 方能執行成功。這個就是可串行!
             原因:
                兩個事務同時交叉執行的相同資料,而一方必須先提交。否則讀寫會互相阻塞。

以上是關於Mysql事務性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL的位置:數據庫和編程MySQL的位置:數據庫和編程Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

MySQL:從小型企業到大型企業MySQL:從小型企業到大型企業Apr 13, 2025 am 12:17 AM

MySQL適合小型和大型企業。 1)小型企業可使用MySQL進行基本數據管理,如存儲客戶信息。 2)大型企業可利用MySQL處理海量數據和復雜業務邏輯,優化查詢性能和事務處理。

幻影是什麼讀取的,InnoDB如何阻止它們(下一個鍵鎖定)?幻影是什麼讀取的,InnoDB如何阻止它們(下一個鍵鎖定)?Apr 13, 2025 am 12:16 AM

InnoDB通過Next-KeyLocking機制有效防止幻讀。 1)Next-KeyLocking結合行鎖和間隙鎖,鎖定記錄及其間隙,防止新記錄插入。 2)在實際應用中,通過優化查詢和調整隔離級別,可以減少鎖競爭,提高並發性能。

mysql:不是編程語言,而是...mysql:不是編程語言,而是...Apr 13, 2025 am 12:03 AM

MySQL不是一門編程語言,但其查詢語言SQL具備編程語言的特性:1.SQL支持條件判斷、循環和變量操作;2.通過存儲過程、觸發器和函數,用戶可以在數據庫中執行複雜邏輯操作。

MySQL:世界上最受歡迎的數據庫的簡介MySQL:世界上最受歡迎的數據庫的簡介Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL的重要性:數據存儲和管理MySQL的重要性:數據存儲和管理Apr 12, 2025 am 12:18 AM

MySQL是一個開源的關係型數據庫管理系統,適用於數據存儲、管理、查詢和安全。 1.它支持多種操作系統,廣泛應用於Web應用等領域。 2.通過客戶端-服務器架構和不同存儲引擎,MySQL高效處理數據。 3.基本用法包括創建數據庫和表,插入、查詢和更新數據。 4.高級用法涉及復雜查詢和存儲過程。 5.常見錯誤可通過EXPLAIN語句調試。 6.性能優化包括合理使用索引和優化查詢語句。

為什麼要使用mysql?利益和優勢為什麼要使用mysql?利益和優勢Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

描述InnoDB鎖定機制(共享鎖,獨家鎖,意向鎖,記錄鎖,間隙鎖,下一鍵鎖)。描述InnoDB鎖定機制(共享鎖,獨家鎖,意向鎖,記錄鎖,間隙鎖,下一鍵鎖)。Apr 12, 2025 am 12:16 AM

InnoDB的鎖機制包括共享鎖、排他鎖、意向鎖、記錄鎖、間隙鎖和下一個鍵鎖。 1.共享鎖允許事務讀取數據而不阻止其他事務讀取。 2.排他鎖阻止其他事務讀取和修改數據。 3.意向鎖優化鎖效率。 4.記錄鎖鎖定索引記錄。 5.間隙鎖鎖定索引記錄間隙。 6.下一個鍵鎖是記錄鎖和間隙鎖的組合,確保數據一致性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。