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 '提交成功。';}else{ mysql_query("rollback"); echo '数据回滚。';}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 '提交成功。!';}else{ echo '失败!';}mysql_query("UNLOCK TABLES");//解除锁定
上面代码完整的实例下载地址:http://pan.baidu.com/s/1pLkbkKj
密码:bh49