<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Mysql事務處理問題_MySQL

        來源:懂視網 責編:小采 時間:2020-11-09 19:10:13
        文檔

        Mysql事務處理問題_MySQL

        Mysql事務處理問題_MySQL:今天和同學討論起數據庫事務處理的問題,感覺討論中明白了一些,有些知識看過了,但是沒有實際使用還是不理解。事務處理就是將一系列操作當做一個原子操作,要么全部執行成功,如果執行失敗則保留執行期的狀態。通過提交和回滾機制來實現操作,如果全部執行成
        推薦度:
        導讀Mysql事務處理問題_MySQL:今天和同學討論起數據庫事務處理的問題,感覺討論中明白了一些,有些知識看過了,但是沒有實際使用還是不理解。事務處理就是將一系列操作當做一個原子操作,要么全部執行成功,如果執行失敗則保留執行期的狀態。通過提交和回滾機制來實現操作,如果全部執行成

        今天和同學討論起數據庫事務處理的問題,感覺討論中明白了一些,有些知識看過了,但是沒有實際使用還是不理解。

        事務處理就是將一系列操作當做一個原子操作,要么全部執行成功,如果執行失敗則保留執行期的狀態。通過提交和回滾機制來實現操作,如果全部執行成功通過提交執行commit結果就會記錄到數據庫中,如果執行失敗通過回滾操作rollback將發生錯誤之前的所有錯誤消除,回退到原來狀態。

        事務都應該具備ACID特征。所謂ACID是Atomic(原子性),Consistent(一致性),Isolated(隔離性),Durable(持續性)四個詞的首字母所寫,下面以“銀行轉帳”為例來分別說明一下它們的含義:

        原子性:組成事務處理的語句形成了一個邏輯單元,不能只執行其中的一部分。換句話說,事務是不可分割的最小單元。比如:銀行轉帳過程中,必須同時從一個帳戶減去轉帳金額,并加到另一個帳戶中,只改變一個帳戶是不合理的。

        一致性:在事務處理執行前后,數據庫是一致的。也就是說,事務應該正確的轉換系統狀態。比如:銀行轉帳過程中,要么轉帳金額從一個帳戶轉入另一個帳戶,要么兩個帳戶都不變,沒有其他的情況。

        隔離性:一個事務處理對另一個事務處理沒有影響。就是說任何事務都不可能看到一個處在不完整狀態下的事務。比如說,銀行轉帳過程中,在轉帳事務沒有提交之前,另一個轉帳事務只能處于等待狀態。

        持續性:事務處理的效果能夠被永久保存下來。反過來說,事務應當能夠承受所有的失敗,包括服務器、進程、通信以及媒體失敗等等。比如:銀行轉帳過程中,轉帳后帳戶的狀態要能被保存下來。

        注意Mysql支持的存儲引擎中,默認為MyISAM,是不支持事務處理的,一般都有InnoDB,是支持事務型的。

        (1)如果對一個表進行操作的時候需要事務支持,需要配置存儲引擎為InnoDB等支持事務型的。

        create table XX() engine=InnoDB;

        (2)默認情況下,mysql是自動提交模式(autocommit=1),此時會在每一條語句執行完畢后將所做修改立即提交,此時的commit相當于沒用的,rollback只對前一句語句起作用,其實也沒用,一條mysql語句默認也是原子操作,沒必要。

        如果設置默認事務處理,需要將自動提交模式關閉即將autocommit設置為0.

        set autocommit=0; 設置模式為關閉

        select @@autocommit; 查看值是否已經改變

        注意,如果在客戶端設置的話,設置完,之后斷掉連接后再重連又恢復默認設置。每個客戶端只能設置客戶自己的。

        (3)如果自動提交模式是打開的,則需使用語句:

        start transaction; 開始事務處理

        XX1;

        XX2;

        commit; / rollback;

        來開始事務處理;而如果設置為關閉,則無需使用start transaction,連續語句就為事務指導rollback或者commit。

        (4)注意創建、改變、刪除數據庫或者其中的數據定義語言以及鎖有關的都不能成為事務的一部分,如下面:

        start transaction;insert into test1 values("8"); create table test2(i int); insert into test1 values("8");rollback;

        執行一個事務處理,當執行到要創建表時,mysql會自動提交,然后再執行創建語句。如果test1的i為主鍵,則第三條語句出錯,回滾時test1還是插入成功,且創建了表test2.

        (5)python中使用數據庫,最好采用這種形式,

        import MySQLdbtry: conn = MySQLdb.connect(host="localhost",user="root",passwd="your passwd",db="dbName") except MySQLdb.Error,e: print "Mysql Error %d: %s" % (e.args[0], e.args[1])else: pass #conn.close() 
        try: cur=conn.cursor() cur.execute('set autocommit=0') #cur.execute('start transaction') cur.execute('insert into test1 values("8")') cur.execute('insert into test1 values("8")') except MySQLdb.Error,e: conn.rollback() print "Mysql Error %d: %s" % (e.args[0], e.args[1])else: conn.commit() cur.close() conn.close()

        (6)并行處理問題

        Mysql是一個多用戶的系統,有多用戶在同一時間訪問統一數據表,MySIAM采用的是數據表級的鎖定標記,來保證同一時間只有一個用戶訪問此表;Innodb采用了數據行級的訪問機制,即兩個用戶可以對同一個表中不同行的數據同時進行修改,而如果是同一行,則先來的用戶先鎖住此行,操作結束釋放鎖后,下一個用戶才能操作。

        (7)事務處理的隔離性問題

        InnoDB默認的隔離級別是repeatable read,如果某個用戶兩次執行同一個select語句,其結果是可重復的,如果在事務期間有用戶對所要讀取的數據進行了操作,那么也不會有顯示,比如一個存儲引擎為innodb的表,如果有一個客戶用事務來select讀取表數據,另一個用戶此時對表做了一個插入之類的操作,第一個用戶再進行同樣的select讀取時,顯示數據是沒有變化的。

        (8)多語句操作非原子操作

        如上面(6)中會出現一個問題,如果是一個事務操作,讀取數據后,想對數據進行操作,但是可能有另外一個人對此做了操作,那再對此數據進行操作就不對了。

        此時需要明確加鎖來鎖住表,防止別人更改數據,執行結束后釋放鎖。

        lock tables XX write;

        XXXXXX;

        unlock tables;

        也可以使用相對更新代替絕對更新,相對于當前值進行更新,不根據上次的值算出一個絕對值進行更新。這樣避免了多條語句的非原子操作。

        set a = a - 3 XXXXXXXXXXX;

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Mysql事務處理問題_MySQL

        Mysql事務處理問題_MySQL:今天和同學討論起數據庫事務處理的問題,感覺討論中明白了一些,有些知識看過了,但是沒有實際使用還是不理解。事務處理就是將一系列操作當做一個原子操作,要么全部執行成功,如果執行失敗則保留執行期的狀態。通過提交和回滾機制來實現操作,如果全部執行成
        推薦度:
        標簽: 知識 解決 問題
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 成年免费大片黄在线观看com| 亚洲精品美女在线观看播放| 亚洲欧美日韩久久精品| 成年人免费视频观看| 国产精品亚洲自在线播放页码| 999久久久免费精品国产 | 国产一级淫片a免费播放口| 亚洲日韩在线中文字幕第一页| www免费插插视频| 亚洲一区精品无码| 18禁超污无遮挡无码免费网站| 午夜亚洲AV日韩AV无码大全| 99热在线观看免费| 亚洲国产情侣一区二区三区| 好先生在线观看免费播放| 亚洲精品自偷自拍无码| 又黄又大又爽免费视频| 99久久免费国产精精品| 久久精品九九亚洲精品| 国产成人免费爽爽爽视频| 亚洲av片在线观看| 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲AV无码成人精品区天堂| 91制片厂制作传媒免费版樱花| 亚洲国产视频网站| 永久免费无码网站在线观看 | 国内永久免费crm系统z在线| 亚洲最大福利视频网站| 99精品全国免费观看视频| 色偷偷亚洲第一综合| 亚洲成AV人片在线播放无码| 黄页网站在线看免费| 高h视频在线免费观看| 久久青青草原亚洲AV无码麻豆| 91频在线观看免费大全| 国产亚洲视频在线观看| 亚洲AV一宅男色影视| 日本高清免费中文字幕不卡| 国内精品一级毛片免费看| 国产成人亚洲综合网站不卡| 久久综合亚洲色HEZYO国产|