第十七回、PHP基础教程,事件处理

事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

MYSQL的事务处理功能:

mySQL数据库从4.1版本开始支持事务处理功能。事务是DBMS得执行单位。它由有限得数据库操作序列组成的。但不是任意的数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID)

原子性(Autmic):事务在执行时,要做到“要么不做,要么全做!”,就是说不允许事务部分的执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库的影响。

一致性(Consistency):事务的操作应该使使数据库从一个一致状态转变到另一个一致的状态!就拿网上购物来说吧,你只有既让商品出库,又让商品进入顾客的购物篮才能构成事务!

隔离性(Isolation):如果多个事务并发执行,应像各个事务独立执行一样!

持久性(Durability):一个成功执行的事务对数据库的作用是持久的,即使数据库因故障出错,也应该能够恢复!

MYSQL的事务处理主要有两种方法来实现。

1、用begin,rollback,commit来实现

begin 或 start transaction 开始一个事务

rollback 事务回滚(即取消所有对数据库的操作)

commit 事务确认(即执行对数据库的所有操作)

2、直接用set来改变mysql的自动提交模式

MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过

set autocommit=0 禁止自动提交

set autocommit=1 开启自动提交

  来实现事务的处理。

但注意当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了一个新的事务!按第一种方法只将当前的操作作为一个事务!我们推荐使用第一种方法。

PHP中实现数据库操作的事务功能范例:

<?php

…数据库连接…

mysql_query(‘BEGIN’);

//开启事务,也可以使用mysql_query(“START TRANSACTION”)开启事务

mysql_query(“SET AUTOCOMMIT=0”);

//设置事务不自动commit,用第二种形式时不加此语句

$sql =”一条SQL语句”;

Mysql_query($sql,$conn);

if(mysql_errno)

{

mysql_query(“ROLLBACK”);

exit;

}

$sql=”一条sql语句”;

mysql_query($sql);

if(mysql_errno)
{

print mysql_error();

mysql_query(‘ROLLBACK’);

//如果出错就回卷

exit();

}

else

{

mysql_query(“COMMIT”);

}

} //每执行一次SQL查询都要判断一次是否出错,如果出错则事务回滚,并exit;

终止程序执行。

mysql_query(‘COMMIT’);

//能够到这里,代表上述数据库操作都没有错,正式提交执行数据库操作

?>

还有就是注意要建立能用事务操作的表类型。以及除了commit外还有什么语句能结束一个事务。