MYSQL的事務處理

2021-06-06 18:58:24 字數 1646 閱讀 5083

/*************** transaction--1 ***************/

$conn = mysql_connect('localhost','root','root') or die ("資料連線錯誤!!!");

mysql_select_db('test',$conn);

mysql_query("set names 'gbk'"); //使用gbk中文編碼;

//開始乙個事務

mysql_query("begin"); //或者mysql_query("start transaction");

$sql = "insert into `user` (`id`, `username`, `***`) values (null, 'test1', '0')";

$sql2 = "insert into `user` (`did`, `username`, `***`) values (null, 'test1', '0')";//這條我故意寫錯

$res = mysql_query($sql);

$res1 = mysql_query($sql2); 

if($res && $res1)else

mysql_query("end");

/**************** transaction--2 *******************/

/*方法二*/

mysql_query("set autocommit=0"); //設定mysql不自動提交,需自行用commit語句提交

$sql = "insert into `user` (`id`, `username`, `***`) values (null, 'test1', '0')";

$sql2 = "insert into `user` (`did`, `username`, `***`) values (null, 'test1', '0')";//這條我故意寫錯

$res = mysql_query($sql);

$res1 = mysql_query($sql2); 

if($res && $res1)else

mysql_query("end"); //事務處理完時別忘記mysql_query("set autocommit=1");自動提交

/******************對於不支援事務的myisam引擎資料庫可以使用表鎖定的方法:********************/

//myisam & innodb 都支援,

/*lock tables可以鎖定用於當前執行緒的表。如果表被其它執行緒鎖定,則造成堵塞,直到可以獲取所有鎖定為止。

unlock tables可以釋放被當前執行緒保持的任何鎖定。當執行緒發布另乙個lock tables時,或當與伺服器的連線被關閉時,所有由當前執行緒鎖定的表被隱含地解鎖。

*/mysql_query("lock tables `user` write");//鎖住`user`表

$sql = "insert into `user` (`id`, `username`, `***`) values (null, 'test1', '0')";

$res = mysql_query($sql);

if($res)else

mysql_query("unlock tables");//解除鎖定

MySQL事務處理

start transaction,commit和rollback語法 start transaction begin work commit work and no chain no release rollback work and no chain no release set autocom...

mysql事務處理

mysql的事務處理主要有兩種方法 1.用begin,rollback,commit來實現 begin開始乙個事務 rollback事務回滾 commit 事務確認 2.直接用set來改變mysql的自動提交模式 mysql預設是自動提交的,也就是你提交乙個query,就直接執行!可以通過 set ...

mysql事務處理

事務都應該具備acid特徵。所謂acid是atomic 原子性 consistent 一致性 isolated 隔離性 durable 持續性 四個詞的首字母所寫,下面以 銀行轉帳 為例來分別說明一下它們的含義 1 原子性 組成事務處理的語句形成了乙個邏輯單元,不能只執行其中的一部分。換句話說,事務...