程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL事務處置與運用簡析

MySQL事務處置與運用簡析

編輯:MySQL綜合教程

MySQL事務處置與運用簡析。本站提示廣大學習愛好者:(MySQL事務處置與運用簡析)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL事務處置與運用簡析正文


事務處置在各類治理體系中都有著普遍的運用,好比人員治理體系,許多同步數據庫操作年夜都須要用到事務處置。好比說,在人員治理體系中,你刪除一小我員,你即須要刪除人員的根本材料,也要刪除和該人員相干的信息,如信箱,文章等等,如許,這些數據庫操作語句就組成一個事務!
刪除的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的事務處置功效!
一向以來我都認為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類型的數據表能力支撐事務處置!其他的類型是不支撐的!(切記!)
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>
*******************************************************************************************************************

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
$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);
?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved