校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > mysql事務處理用法與實例代碼詳解

mysql事務處理用法與實例代碼詳解

熱門標簽:寶應電信400電話辦理費用 外呼系統服務 外呼系統防封號違法嗎 如何在高德地圖標注新地址 高德地圖標注模式 400電話辦理都選易號網 湘潭電銷機器人咨詢電話 電銷機器人針對的 高德地圖標注中心個人注冊

MySQL的事務支持不是綁定在MySQL服務器本身,而是與存儲引擎相關

1.MyISAM:不支持事務,用于只讀程序提高性能
2.InnoDB:支持ACID事務、行級鎖、并發
3.Berkeley DB:支持事務

一個事務是一個連續的一組數據庫操作,就好像它是一個單一的工作單元進行。換言之,永遠不會是完整的事務,除非該組內的每個單獨的操作是成功的。如果在事務的任何操作失敗,則整個事務將失敗。
實際上,會俱樂部許多SQL查詢到一個組中,將執行所有的人都一起作為事務的一部分。

事務的特性:

事務有以下四個標準屬性的縮寫ACID,通常被稱為:

原子性: 確保工作單元內的所有操作都成功完成,否則事務將被中止在故障點,和以前的操作將回滾到以前的狀態。

一致性: 確保數據庫正確地改變狀態后,成功提交的事務。

隔離性: 使事務操作彼此獨立的和透明的。

持久性: 確保提交的事務的結果或效果的系統出現故障的情況下仍然存在。

在MySQL中,事務開始使用COMMIT或ROLLBACK語句開始工作和結束。開始和結束語句的SQL命令之間形成了大量的事務。

COMMIT ROLLBACK:

這兩個關鍵字提交和回滾主要用于MySQL的事務。

當一個成功的事務完成后,發出COMMIT命令應使所有參與表的更改才會生效。

如果發生故障時,應發出一個ROLLBACK命令返回的事務中引用的每一個表到以前的狀態。

可以控制的事務行為稱為AUTOCOMMIT設置會話變量。如果AUTOCOMMIT設置為1(默認值),然后每一個SQL語句(在事務與否)被認為是一個完整的事務,并承諾在默認情況下,當它完成。 AUTOCOMMIT設置為0時,發出SET AUTOCOMMIT =0命令,在隨后的一系列語句的作用就像一個事務,直到一個明確的COMMIT語句時,沒有活動的提交。

可以通過使用mysql_query()函數在PHP中執行這些SQL命令。

通用事務例子

這一系列事件是獨立于所使用的編程語言,可以建立在任何使用的語言來創建應用程序的邏輯路徑。

可以通過使用mysql_query()函數在PHP中執行這些SQL命令。

BEGIN WORK開始事務發出SQL命令

發出一個或多個SQL命令,如SELECT,INSERT,UPDATE或DELETE

檢查是否有任何錯誤,一切都依據的需要。

如果有任何錯誤,那么問題ROLLBACK命令,否則發出COMMIT命令。

在MySQL中的事務安全表類型:

如果打算使用MySQL事務編程,那么就需要一種特殊的方式創建表。有很多支持事務但最流行的是InnoDB表類型。

從源代碼編譯MySQL時,InnoDB表支持需要特定的編譯參數。如果MySQL版本沒有InnoDB支持,請互聯網服務提供商建立一個版本的MySQL支持InnoDB表類型,或者下載并安裝Windows或Linux/UNIX的MySQL-Max二進制分發和使用的表類型在開發環境中。

如果MySQL安裝支持InnoDB表,只需添加一個的TYPE=InnoDB 定義表創建語句。例如,下面的代碼創建InnoDB表tcount_tbl:

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tcount_tbl
 -> (
 -> tutorial_author varchar(40) NOT NULL,
 -> tutorial_count INT
 -> ) TYPE=InnoDB;
Query OK, 0 rows affected (0.05 sec)

可以使用其他GEMINI或BDB表類型,但它取決于您的安裝,如果它支持這兩種類型。

由于項目設計里面,牽扯到了金錢的轉移,于是就要用到MYSQL的事務處理,來保證一組處理結果的正確性。用了事務,就不可避免的要犧牲一部分速度,來保證數據的正確性。

只有InnoDB支持事務

事務 ACID Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)

1、事務的原子性
一組事務,要么成功;要么撤回。

2、穩定性
有非法數據(外鍵約束之類),事務撤回。

3、隔離性
事務獨立運行。
一個事務處理后的結果,影響了其他事務,那么其他事務會撤回。
事務的100%隔離,需要犧牲速度。

4、可靠性
軟、硬件崩潰后,InnoDB數據表驅動會利用日志文件重構修改。
可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit選項 決定什么時候吧事務保存到日志里。

開啟事務

START TRANSACTION 或 BEGIN

提交事務(關閉事務)

COMMIT

放棄事務(關閉事務)

ROLLBACK

折返點

SAVEPOINT adqoo_1
ROLLBACK TO SAVEPOINT adqoo_1

發生在折返點 adqoo_1 之前的事務被提交,之后的被忽略

事務的終止

設置“自動提交”模式
SET AUTOCOMMIT = 0
每條SQL都是同一個事務的不同命令,之間由 COMMIT 或 ROLLBACK隔開
掉線后,沒有 COMMIT 的事務都被放棄

事務鎖定模式

系統默認: 不需要等待某事務結束,可直接查詢到結果,但不能再進行修改、刪除。
缺點:查詢到的結果,可能是已經過期的。
優點:不需要等待某事務結束,可直接查詢到結果。

需要用以下模式來設定鎖定模式

1、SELECT …… LOCK IN SHARE MODE(共享鎖)
查詢到的數據,就是數據庫在這一時刻的數據(其他已commit事務的結果,已經反應到這里了)
SELECT 必須等待,某個事務結束后才能執行

2、SELECT …… FOR UPDATE(排它鎖)
例如 SELECT * FROM tablename WHERE id200
那么id200的數據,被查詢到的數據,都將不能再進行修改、刪除、SELECT …… LOCK IN SHARE MODE操作
一直到此事務結束
共享鎖 和 排它鎖 的區別:在于是否阻斷其他客戶發出的 SELECT …… LOCK IN SHARE MODE命令

3、INSERT / UPDATE / DELETE
所有關聯數據都會被鎖定,加上排它鎖

4、防插入鎖
例如 SELECT * FROM tablename WHERE id>200
那么id>200的記錄無法被插入

5、死鎖
自動識別死鎖
先進來的進程被執行,后來的進程收到出錯消息,并按ROLLBACK方式回滾
innodb_lock_wait_timeout = n 來設置最長等待時間,默認是50秒

事務隔離模式

SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL
READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE

1、不帶SESSION、GLOBAL的SET命令
只對下一個事務有效

2、SET SESSION
為當前會話設置隔離模式

3、SET GLOBAL
為以后新建的所有MYSQL連接設置隔離模式(當前連接不包括在內)
隔離模式
   READ UNCOMMITTED
不隔離SELECT
其他事務未完成的修改(未COMMIT),其結果也考慮在內
   READ COMMITTED
把其他事務的 COMMIT 修改考慮在內
同一個事務中,同一 SELECT 可能返回不同結果
   REPEATABLE READ(默認)
不把其他事務的修改考慮在內,無論其他事務是否用COMMIT命令提交過
同一個事務中,同一 SELECT 返回同一結果(前提是本事務,不修改)
   SERIALIZABLE
和REPEATABLE READ類似,給所有的SELECT都加上了 共享鎖

出錯處理

根據出錯信息,執行相應的處理

mysql事物處理實例

MYSQL的事務處理主要有兩種方法

1.用begin,rollback,commit來實現

  • begin開始一個事務
  • rollback事務回滾
  • commit 事務確認

2.直接用set來改變mysql的自動提交模式

  • mysql默認是自動提交的,也就是你提交一個query,就直接執行!可以通過
  • set autocommit = 0 禁止自動提交
  • set autocommit = 1 開啟自動提交

來實現事務的處理。

但要注意當用set autocommit = 0 的時候,你以后所有的sql都將作為事務處理,直到你用commit確認或 rollback結束,注意當你結束這個事務的同時也開啟了新的事務!按第一種方法只將當前的做為一個事務!

MYSQL只有 INNODB和BDB類型的數據表才支持事務處理,其他的類型是不支持的!

mysql> use test;
 Database changed
 mysql> CREATE TABLE `dbtest`(
 -> id int(4)
 -> ) TYPE=INNODB;
Query OK, 0 rows affected, 1 warning (0.05 sec)

mysql> select * from dbtest
 -> ;
Empty set (0.01 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest values(5);
Query OK, 1 row affected (0.00 sec)

mysql> insert into dbtest value(6);
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dbtest;
+------+
| id |
+------+
| 5 |
| 6 |
+------+
2 rows in set (0.00 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest values(7);
Query OK, 1 row affected (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dbtest;
+------+
| id |
+------+
| 5 |
| 6 |
+------+
2 rows in set (0.00 sec)

mysql事務處理

php代碼實現事務的處理可以通過PHP預定義類mysqli的以下方法實現。

  • autocommit(boolean):該方法用于限定查詢結果是否自動提交,如果該方法的參數為true則自動提交,如果參數為false則關閉自動提交。MySQL數據庫默認為自動提交。
  • rollback():利用mysqli類中的該方法可以實現事務的回滾。
  • commit():利用該方法可以實現提交所有查詢。
?php
include_once("conn.php");

$id=$_GET[id];
$conn->autocommit(false);
if(!$conn->query("delete from tb_sco where id='".$id."'"))
{
 $conn->rollback();
}
if(!$conn->query("delete from tb_stu where id='".$id."'"))
{
 $conn->rollback();
}
 $conn->commit();
 $conn->autocommit(true);
 echo "ok"
?>

?php
require('connectDB.php'); //建立數據庫連接
mssql_query("BEGIN TRANSACTION DEPS02_DEL"); //開始事務
$delete_dep_sql="DELETE FROM TBLDEPARTMENT WHERE DEPTID='{$_GET[deptid]}'";
// echo $delete_dep_sql."br>";
mssql_query($delete_dep_sql); //操作數據庫
// var_dump($del_result);
$delete_result = mssql_query("select @@ROWCOUNT as id");
$delete_info = mssql_fetch_array($delete_result);
$delete_rows = $delete_info[0];
// var_dump($delete_rows);
mssql_free_result($delete_result);
echo "script language=javascript>";
if(true){ //判斷是否回滾提交
mssql_query("COMMIT TRANSACTION DEPS02_DEL"); //提交事務
echo "alert('delete success!');";
}else{
mssql_query("ROLLBACK TRANSACTION DEPS02_DEL"); //回滾事務
echo "alert('delete faile!');";
}
echo "/script>";mssql_close();
?>

MySQL的事務處理在處理實際問題中有著廣泛且重要的應用,最常見的應用如銀行轉賬業務、電子商務支付業務等等。但是,值得注意的是,MySQL的事務處理功能在MYSIAM存儲引擎中是不支持的,在InnoDB存儲引擎中是支持的。現在上傳一段代碼,作為引導認識MySQL事務處理的開始,簡單的實例,但融匯思想,相信會有很大的幫助。

?php
$conn=mysql_connect('localhost','root','yourpassword')or die(mysql_error());
mysql_select_db('transaction',$conn);
mysql_query('set names utf8');

//創建事務
mysql_query('START TRANSACTION') or die(mysql_error());
$sqlA="update A set account=account-1";
if(!mysql_query($sqlA)){
nbsp;nbsp;nbsp; mysql_query('ROLLBACK') or exit(mysql_error());//判斷當執行失敗時回滾
nbsp; exit();
}
$sqlB="update B set account=account+1";
if(!mysql_query($sqlB)){
nbsp;nbsp;nbsp; mysql_query('ROLLBACK') or exit(mysql_error());//判斷當執行失敗時回滾
nbsp; exit();
}
mysql_query('COMMIT')or die(mysql_error());//執行事務
mysql_close($conn);
?>

以上代碼可以作為模擬銀行轉賬業務的事務流程。以表A、B分別表示兩個已在銀行開戶的賬戶,當賬戶A執行轉出1元給賬戶B的操作時,如果操作執行失敗,轉出將會回滾至原始狀態,不繼續向下執行動作。反之,如果操作執行成功,則賬戶B可用余額將增加1元,否則事務回滾至原始狀態。

希望本文所述對你有所幫助,mysql事務處理用法與實例代碼內容就給大家介紹到這里了。希望大家繼續關注我們的網站!想要學習mysql可以繼續關注本站。

您可能感興趣的文章:
  • Java實現的mysql事務處理操作示例
  • PHP+MySQL高并發加鎖事務處理問題解決方法
  • Mysql事務處理詳解
  • NodeJs使用Mysql模塊實現事務處理實例
  • php下pdo的mysql事務處理用法實例
  • php實現mysql事務處理的方法
  • MySQL事務處理與應用簡析
  • mysql 事務處理及表鎖定深入簡析

標簽:馬鞍山 佛山 宿遷 黔南 南充 賀州 蘭州 黃山

巨人網絡通訊聲明:本文標題《mysql事務處理用法與實例代碼詳解》,本文關鍵詞  mysql,事務處理,用法,與,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《mysql事務處理用法與實例代碼詳解》相關的同類信息!
  • 本頁收集關于mysql事務處理用法與實例代碼詳解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    日本一区二区成人| 日韩一区二区三区免费看 | 亚洲一区在线观看免费观看电影高清| 欧美一二区视频| 91精品久久久久久蜜臀| 911精品国产一区二区在线| 欧美视频在线一区| 欧美巨大另类极品videosbest| 欧美男女性生活在线直播观看| 欧美日韩亚洲综合在线| 欧美三级中文字| 91精品国产免费| 精品久久久久久久久久久久久久久久久 | 亚洲欧美日韩一区二区三区在线观看| 国产欧美一区二区三区沐欲| 国产欧美日韩另类一区| 欧美国产精品中文字幕| 国产精品高潮呻吟| 一区二区在线免费观看| 亚洲成人免费影院| 国产一区二区不卡在线| eeuss鲁片一区二区三区在线观看| 91免费小视频| 91精品久久久久久久久99蜜臂| 制服丝袜av成人在线看| 久久色视频免费观看| 亚洲特黄一级片| 蜜臀av一区二区在线免费观看 | 亚洲一区二区在线免费看| 亚洲香肠在线观看| 经典三级视频一区| 成人免费电影视频| 欧美视频你懂的| 久久精品人人做人人爽人人| 亚洲欧美另类久久久精品2019| 亚洲福利一区二区| 成人一区在线看| 欧美精品日日鲁夜夜添| 国产精品电影院| 奇米四色…亚洲| 91网站最新网址| 精品欧美久久久| 亚洲网友自拍偷拍| 成人av影院在线| 欧美一区二区三区四区在线观看| 中文字幕亚洲综合久久菠萝蜜| 亚洲一二三区在线观看| 成人开心网精品视频| 欧美一区二区视频在线观看| 亚洲女人****多毛耸耸8| 国精产品一区一区三区mba桃花| 91成人免费电影| 国产精品美女久久久久高潮| 日本欧美韩国一区三区| 欧美在线观看你懂的| 国产精品理论在线观看| 久久成人18免费观看| 欧美三级乱人伦电影| 中文字幕亚洲区| 成人免费毛片高清视频| www欧美成人18+| 极品美女销魂一区二区三区| 99热在这里有精品免费| 久久久91精品国产一区二区精品| 偷拍日韩校园综合在线| 欧美中文字幕一区二区三区| 中文字幕一区av| av福利精品导航| ...xxx性欧美| 99re热这里只有精品视频| 久久久99免费| 国产一区二区在线免费观看| 精品剧情v国产在线观看在线| 免费成人深夜小野草| 欧美电影一区二区| 美女看a上一区| 精品国产欧美一区二区| 精品无码三级在线观看视频| 欧美成人猛片aaaaaaa| 奇米影视一区二区三区小说| 日韩亚洲欧美在线观看| 欧美aaaaa成人免费观看视频| 欧美精品1区2区3区| 日精品一区二区三区| 日韩视频一区二区三区| 国产一区二区影院| **网站欧美大片在线观看| 一本色道久久综合精品竹菊| 亚洲精品国产视频| 色综合久久中文字幕| 一区二区三区欧美日韩| 欧美怡红院视频| 精品在线播放午夜| 国产视频一区在线播放| 色综合久久六月婷婷中文字幕| 亚洲精品免费在线观看| 91精品蜜臀在线一区尤物| 国产精品亚洲午夜一区二区三区| 国产精品久久久久久久久免费樱桃| 91首页免费视频| 日本一道高清亚洲日美韩| www日韩大片| 91国偷自产一区二区开放时间| 五月天一区二区三区| 精品国产乱码久久久久久老虎| 大胆欧美人体老妇| 亚洲国产日韩av| 久久久久久久久免费| 色哟哟国产精品免费观看| 美国十次了思思久久精品导航| 日本一区二区不卡视频| 777奇米四色成人影色区| 福利一区二区在线| 婷婷国产在线综合| 国产精品久久久久精k8| 欧美一级搡bbbb搡bbbb| 97精品国产97久久久久久久久久久久| 日精品一区二区三区| 亚洲人成亚洲人成在线观看图片| 3d动漫精品啪啪| 色综合久久久久久久久久久| 美日韩一级片在线观看| 亚洲在线成人精品| 国产精品无遮挡| 亚洲精品一区二区三区蜜桃下载| 一本大道久久a久久精品综合| 激情综合网激情| 天天操天天干天天综合网| 中文字幕亚洲电影| 久久久三级国产网站| 91精品欧美一区二区三区综合在 | 激情五月激情综合网| 亚洲一区二区四区蜜桃| 国产精品色眯眯| 26uuu另类欧美亚洲曰本| 欧美日韩精品久久久| 91老师片黄在线观看| 成人黄色片在线观看| 成人午夜在线免费| 久久国产三级精品| 视频一区二区三区入口| 亚洲成人自拍偷拍| 亚洲精品欧美激情| 亚洲免费电影在线| 亚洲精品国产无套在线观| 1区2区3区精品视频| 最新欧美精品一区二区三区| 久久精品人人做| 久久久99久久| 国产亚洲精品aa| 国产欧美一区二区三区在线看蜜臀| 久久亚洲春色中文字幕久久久| 欧美精品一区二区三区在线播放 | 一区二区三区国产精品| 成人免费在线播放视频| 亚洲视频在线观看三级| 亚洲精品欧美在线| 一区二区三区在线视频免费| 一区二区欧美视频| 日产精品久久久久久久性色| 日韩精品视频网站| 狠狠色丁香婷综合久久| 国产99久久久国产精品免费看| 国产成人99久久亚洲综合精品| 成人美女视频在线观看18| 91麻豆.com| 717成人午夜免费福利电影| 欧美一级日韩不卡播放免费| 国产无遮挡一区二区三区毛片日本| 亚洲国产精华液网站w| 亚洲美女视频在线观看| 亚洲国产成人tv| 美女一区二区视频| 国产成人综合精品三级| 91网站最新地址| 欧美日韩在线三区| 精品国产乱码久久久久久浪潮| 欧美激情一区在线| 亚洲v中文字幕| 国产一区啦啦啦在线观看| 91免费观看在线| 日韩精品在线一区| 中文字幕日韩一区| 伦理电影国产精品| 99re66热这里只有精品3直播| 久久狠狠亚洲综合| 亚洲狠狠丁香婷婷综合久久久| 久久婷婷成人综合色| 亚洲色图在线播放| 日本不卡视频在线| 成人av动漫在线| 欧美一区午夜视频在线观看| 国产女主播一区| 日韩va亚洲va欧美va久久| 懂色中文一区二区在线播放| 91精品国产综合久久久久久漫画| 中文字幕精品一区二区精品绿巨人| 亚洲二区在线观看| 91在线视频播放地址| 久久亚洲一级片|