首頁 資料庫 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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

MySQL和PhpMyAdmin:核心功能和功能 MySQL和PhpMyAdmin:核心功能和功能 Apr 22, 2025 am 12:12 AM

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

解決數據庫連接問題:使用minii/db庫的實際案例 解決數據庫連接問題:使用minii/db庫的實際案例 Apr 18, 2025 am 07:09 AM

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

laravel框架安裝方法 laravel框架安裝方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

初學者的MySQL:開始數據庫管理 初學者的MySQL:開始數據庫管理 Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

解決MySQL模式問題:TheliaMySQLModesChecker模塊的使用體驗 解決MySQL模式問題:TheliaMySQLModesChecker模塊的使用體驗 Apr 18, 2025 am 08:42 AM

在使用Thelia開發電商網站時,我遇到了一個棘手的問題:MySQL模式設置不當,導致某些功能無法正常運行。經過一番探索,我找到了一個名為TheliaMySQLModesChecker的模塊,它能夠自動修復Thelia所需的MySQL模式,徹底解決了我的困擾。

See all articles