注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

xiaozhuge0825的博客

 
 
 

日志

 
 

mysql事务处理  

2009-06-23 18:23:32|  分类: mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

mysql事务处理

mysql事务处理的意义

事务处理机制在程序开发过程中有着非常重要的作用,它可以使整个系统更加安全,例如在银行处理转账业务时,如果A账户中的金额刚被发出,而B账户还没来得及接收就发生停电,这会给银行和个人带来很大的经济损失。采用事务处理机制,一旦在转账过程中发生意外,则程序将回滚,不做任何处理。

 

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 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>

 

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"

?>

 $conn=mysql_connect("localhost","root","");
 mysql_select_db('test',$conn);
 mysql_query("set autocommit=0");
 mysql_query('begin');
 mysql_query("insert into xiaotest(`username`,`password`) values ('ddddd','vvvvv')",$conn);
 //mysql_query("rollback");
 mysql_query('commit');
 mysql_query("set autocommit=1");
mysql_query("insert into xiaotest(`username`,`password`) values ('aaaa','bbbb')",$conn);

  评论这张
 
阅读(1587)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018