MYSQL--事务处理
生活随笔
收集整理的這篇文章主要介紹了
MYSQL--事务处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
原文:http://www.cnblogs.com/in-loading/archive/2012/02/21/2361702.html
事務處理在各種管理系統中都有著廣泛的應用,比如人員管理系統,很多同步數據庫操作大都需要用到事務處理。比如說,在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數據庫操作語句就構成一個事務!
???? 刪除的SQL語句delete from userinfo where ~~~
delete from mail where ~~
delete from article where~~
~~
?? 如果沒有事務處理,在你刪除的過程中,假設出錯了,只執行了第一句,那么其后果是難以想象的!
但用事務處理。如果刪除出錯,你只要rollback就可以取消刪除操作(其實是只要你沒有commit你就沒有確實的執行該刪除操作)
?? 一般來說,在商務級的應用中,都必須考慮事務處理的!
?
查看inodb信息
????? shell> /usr/local/mysql -u root -p
????? mysql> show variables like "have_%"
系統會提示:
+------------------+-------+
| Variable_name???? | Value |
+------------------+-------+
| have_bdb????????? | YES??? |
| have_crypt??????? | YES??? |
| have_innodb?????? | YES??? |
| have_isam???????? | YES??? |
| have_raid???????? | YES??? |
| have_symlink????? | YES??? |
| have_openssl????? | NO???? |
| have_query_cache | YES??? |
+------------------+-------+
8 rows in set (0.05 sec)
如果是這樣的,那么我們就可以創建一張支持事務處理的表來試試了。
?
MYSQL的事務處理功能!
作者:Feifengxlq?? Email:feifengxlq@sohu.com
一直以來我都以為MYSQL不支持事務處理,所以在處理多個數據表的數據時,一直都很麻煩(我是不得不將其寫入文本文件,在系統重新加載得時候才寫入數據庫以防出錯)~今天發現MYSQL數據庫從4.1就開始支持事務功能,據說5.0將引入存儲過程^_^
????? 先簡單介紹一下事務吧!事務是DBMS得執行單位。它由有限得數據庫操作序列組成得。但不是任意得數據庫操作序列都能成為事務。一般來說,事務是必須滿足4個條件(ACID)
????? 原子性(Autmic):事務在執行性,要做到“要么不做,要么全做!”,就是說不允許事務部分得執行。即使因為故障而使事務不能完成,在rollback時也要消除對數據庫得影響!
???? 一致性(Consistency):事務得操作應該使使數據庫從一個一致狀態轉變倒另一個一致得狀態!就拿網上購物來說吧,你只有即讓商品出庫,又讓商品進入顧客得購物籃才能構成事務!
???? 隔離性(Isolation):如果多個事務并發執行,應象各個事務獨立執行一樣!
???? 持久性(Durability):一個成功執行得事務對數據庫得作用是持久得,即使數據庫應故障出錯,也應該能夠恢復!
? ?
?? 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的數據表的鎖定和解鎖!
?????? MYSQL5.0 WINXP下測試通過~?? ^_^
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 value(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]
function Tran( $sql ) {
???????? $judge = 1;
???????? mysql_query('begin');
???????? foreach ($sql as $v) {
???????????????? if ( !mysql_query($v) ) {
???????????????????????? $judge = 0;
???????????????? }
???????? }
???????? if ($judge == 0) {
???????????????? mysql_query('rollback');
???????????????? return false;
???????? }
???????? elseif ($judge == 1) {
???????????????? mysql_query('commit');
???????????????? return true;
???????? }
}
[/PHP]
************************************************
<?php
$handler=mysql_connect("localhost","root","");
mysql_select_db("task");
mysql_query("SET AUTOCOMMIT=0");//設置為不自動提交,因為MYSQL默認立即執行
mysql_query("BEGIN");//開始事務定義
if(!mysql_query("insert into trans (id) values('2')"))
{
mysql_query("ROOLBACK");//判斷當執行失敗時回滾
}
if(!mysql_query("insert into trans (id) values('4')"))
{
mysql_query("ROOLBACK");//判斷執行失敗回滾
}
mysql_query("COMMIT");//執行事務
mysql_close($handler);
?>
轉載于:https://my.oschina.net/verynix/blog/365951
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的MYSQL--事务处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 熟悉又陌生 彪悍徐茂栋的双面人生
- 下一篇: ee