一、数据引擎innodb用begin,rollback,commit来实现提交事务处理,begin开始事务后出现错误就rollback事务回滚或者没有错误就commit提事务提交确认完成。
start transaction 开始是事务begin和end之间是执行的语句块,set autocommit=0不让事务自动提交设置后要在结束set autocommit=1。
下面是针对支持事务处理的数据表引擎例子。
mysql_query("start transaction"); mysql_query("set autocommit=0"); mysql_query("begin"); $sql = "insert into student ( name,num) values ( 'test1', '0')"; $sql2 = "insert into student ( name,num) values ( null, '0')";//写错 $res = mysql_query($sql); $res1 = mysql_query($sql2); if($res && $res1){ mysql_query("commit"); echo '提交成功。<br/>'; }else{ mysql_query("rollback"); echo '数据回滚。<br/>'; } mysql_query("set autocommit=1"); mysql_query("end");
二、对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法:
MyISAM & InnoDB 都支持,LOCK TABLES可以锁定用于当前线程的表。如果表被其它线程锁定,则造成堵塞,直到可以获取所有锁定为止。UNLOCK TABLES可以释放被当前线程保持的任何锁定。当线程发布另一个LOCK TABLES时,或当与服务器的连接被关闭时,所有由当前线程锁定的表被隐含地解锁。
下面例子是针对不支持事务提交而使用表锁的例子
mysql_query("lock tables student write");//锁住student表write 也可以是read $sql = "insert into student ( name,num) values ( '三生三世', '0')"; $res = mysql_query($sql); if($res){ echo '提交成功。!<br/>'; }else{ echo '失败!<br/>'; } mysql_query("UNLOCK TABLES");//解除锁定
上面代码完整的实例下载地址:http://pan.baidu.com/s/1pLkbkKj
密码:bh49
本文介绍了MySQL中InnoDB引擎的事务处理方法,包括begin、rollback及commit的应用,并提供了具体的PHP示例代码。同时,文章还讲解了对于不支持事务处理的MyISAM引擎如何通过表锁定的方式实现类似的效果。
2662

被折叠的 条评论
为什么被折叠?



