日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL之事务管理

發布時間:2025/3/14 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL之事务管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、事務處理(transaction processing)可以用來維護數據庫的完整性,它保證成批的MySQL操作要么完全執行,要么完全不執行。

  注意:并非所有引擎都支持事務處理。MyISAM和InnoDB是兩種最常使用的引擎。前者不支持明確的事務處理管理,而后者支持。

  當在執行數據庫操作的時候,數據庫可能會發生系統故障,導致數據庫中存在不完整的表。為了避免上述的問題,引入事務這一概念。

  事務處理是一種機制,用來管理必須成批執行的MySQL操作,以保證數據庫不包含不完整的操作結果。利用事務處理,可以保證一組操作不會中途停止,它們或者作為整體執行,或者完全不執行(除非明確指示)。如果沒有錯誤發生,整組語句提交給(寫到)數據庫表。如果發生錯誤,則進行回退(撤銷)以恢復數據庫到某個已知且安全的狀態。

  

?是關于事務處理需要知道的幾個術語:

  ? 事務(transaction)指一組SQL語句;

  ? 回退(rollback)指撤銷指定SQL語句的過程;

  ? 提交(commit)指將未存儲的SQL語句結果寫入數據庫表;

  ? 保留點(savepoint)指事務處理中設置的臨時占位符(placeholder),你可以對它發布回退(與回退整個事務處理不同)。

例子:

(1) 檢查數據庫中是否存在相應的客戶,如果不存在,添加他/她。
(2) 提交客戶信息。
(3) 檢索客戶的ID。
(4) 添加一行到orders表。

(5) 如果在添加行到orders表時出現故障,回退。

(6) 檢索orders表中賦予的新訂單ID。
(7) 對于訂購的每項物品,添加新行到orderitems表。

(8) 如果在添加新行到orderitems時出現故障,回退所有添加的orderitems行和orders行。

(9) 提交訂單信息。

二、控制事務

2.1ROLLBACK

SELECT * FROM ordertotals; START TRANSACTION; DELETE FROM ordertotals; SELECT * FROM ordertotals; ROLLBACK; SELECT * FROM ordertotals;

?首先執行一條SELECT以顯示該表不為空。然后開始一個事務處理,用一條DELETE語句刪除ordertotals中的所有行。另一條SELECT語句驗證ordertotals確實為空。這時用一條ROLLBACK語句回退START TRANSACTION之后的所有語句,最后一條SELECT語句顯示該表不為空。

?ROLLBACK只能在一個事務處理內使用(在執行一條STARTTRANSACTION命令之后)。

注意:事務處理用來管理INSERT、UPDATE和DELETE語句,不能回退SELECT語句。

2.2COMMIT

在事務處理塊中,提交不會隱含地進行。為進行明確的提交,使用COMMIT語句

START TRANSACTION; DELETE FROM orderitems WHERE order_num =20010; DELETE FROM orders WHERE order_num =20010; COMMIT;

?

?最后的COMMIT語句僅在不出錯時寫出更改。如果第一條DELETE起作用,但第二條失敗,則DELETE不會提交(實際上,它是被自動撤銷的)。

?

隱含事務關閉 當COMMIT或ROLLBACK語句執行后,事務會自動關閉(將來的更改會隱含提交)。?

2.3保留點

?簡單的ROLLBACK和COMMIT語句就可以寫入或撤銷整個事務處理。

為了支持回退部分事務處理,必須能在事務處理塊中合適的位置放置占位符。這樣,如果需要回退,可以回退到某個占位符。

這些占位符稱為保留點。為了創建占位符,可如下使用SAVEPOINT語句:

SAVEPOINT delete1;

?

每個保留點都取標識它的唯一名字,以便在回退時,MySQL知道要
回退到何處。為了回退到本例給出的保留點,可如下進行:

ROLLBACK delete1;

?

釋放保留點 保留點在事務處理完成(執行一條ROLLBACK或COMMIT)后自動釋放。自MySQL 5以來,也可以用RELEASESAVEPOINT明確地釋放保留點。

2.4更改默認的提交行為

默認的MySQL行為是自動提交所有更改。換句話說,任何時候你執行一條MySQL語句,該語句實際上都是針對表執行的,而且所做的更改立即生效。為指示MySQL不自動提交更改,需要使用以下語句:

SET autocommit=0;

autocommit標志決定是否自動提交更改,不管有沒有COMMIT語句。設置autocommit為0(假)指示MySQL不自動提交更改(直到autocommit被設置為真為止)。

標志為連接專用 autocommit標志是針對每個連接而不是服務器的。

?

轉載于:https://www.cnblogs.com/mswangblog/p/6593099.html

總結

以上是生活随笔為你收集整理的MySQL之事务管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。