PHP mysql 事务处理实例
PHP是当今最热门的计算机语言,以下是本站小编精心为大家整理的PHP教程,希望对大家学习PHP有所帮助!更多内容请关注应届毕业生网!
事务是必须满足4个条件(ACID):原子性(Autmic)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!就拿网上购物来说吧,你只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!
隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样!
持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!
MYSQL的事务处理主要有两种方法。
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
rollback和commit不能并列使用,当你同时使用,只有前面的一个有效,而后面的无效,即是你或执行commit或执行rollback
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
来实现事务的处理。
注意当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!
***:一般MYSQL数据库默认的引擎是MyISAM,这种引擎不支持事务!如果要让MYSQL支持事务,可以自己手动修改:
方法如下:1.修改c:appservmysql文件,找到skip-InnoDB,在前面加上#,后保存文件。
2.在运行中输入:,重启mysql服务。
3.到phpmyadmin中,mysql->show engines;(或执行mysql->show variables like 'have_%'; ),查看InnoDB为YES,即表示数据库支持InnoDB了。
也就说明支持事务transaction了。
4.在创建表时,就可以为Storage Engine选择InnoDB引擎了。如果是以前创建的表,可以使用mysql->alter table table_name type=InnoDB;
或 mysql->alter table table_name engine=InnoDB;来改变数据表的引擎以支持事务。
实例一.
1234567891011121314151617 |
$conn =mysql_connect( 'localhost' , 'root' , 'root' ) or die ( "数据连接错误!!!" );
mysql_select_db( 'test' , $conn );
mysql_query( "setnames'GBK'" ); //使用GBK中文编码;
//开始一个事务
mysql_query( "BEGIN" ); //或者mysql_query("STARTTRANSACTION");
$sql = "INSERTINTO`user`(`id`,`username`,`sex`)VALUES(NULL,'test1','0')" ;
$sql2 = "INSERTINTO`user`(`did`,`username`,`sex`)VALUES(NULL,'test1','0')" ; //这条我故意写错
$res =mysql_query( $sql );
$res1 =mysql_query( $sql2 );
if ( $res && $res1 ){
mysql_query( "COMMIT" );
echo '提交成功。' ;
} else {
mysql_query( "ROLLBACK" );
echo '数据回滚。' ;
}
mysql_query( "END" ); |
实例二
12345678910111213 |
mysql_query( "SETAUTOCOMMIT=0" ); //设置mysql不自动提交,需自行用commit语句提交
$sql = "INSERTINTO`user`(`id`,`username`,`sex`)VALUES(NULL,'test1','0')" ;
$sql2 = "INSERTINTO`user`(`did`,`username`,`sex`)VALUES(NULL,'test1','0')" ; //这条我故意写错
$res =mysql_query( $sql );
$res1 =mysql_query( $sql2 );
if ( $res && $res1 ){
mysql_query( "COMMIT" );
echo '提交成功。' ;
} else {
mysql_query( "ROLLBACK" );
echo '数据回滚。' ;
}
mysql_query( "END" ); //事务处理完时别忘记mysql_query("SETAUTOCOMMIT=1");自动提交 |
对于不支持事务的'MyISAM引擎数据库可以使用表锁定的方法
//MyISAM & InnoDB 都支持,
/*
LOCK TABLES可以锁定用于当前线程的表。如果表被其它线程锁定,则造成堵塞,直到可以获取所有锁定为止。
UNLOCK TABLES可以释放被当前线程保持的任何锁定。当线程发布另一个LOCK TABLES时,或当与服务器的连接被关闭时,所有由当前线程锁定的表被隐含地解锁。
*/
123456789 | mysql_query( "LOCKTABLES`user`WRITE" ); //锁住`user`表
$sql = "INSERTINTO`user`(`id`,`username`,`sex`)VALUES(NULL,'test1','0')" ;
$res =mysql_query( $sql );
if ( $res ){
echo '提交成功。!' ;
} else {
echo '失败!' ;
}
mysql_query( "UNLOCKTABLES" ); //解除锁定 |
-
PHP缓存技术
PHP具有非常强大的功能,所有的CGI的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。最重要的是PHP可以用C、C++进行程序的扩展!以下是小编为大家搜索整理的PHP缓存技术,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!全页面静态...
-
PHP编程中10个最常见的错误
在生活中,好多人疑惑PHP语言难不难呢?那么,小编来解答PHP编程中10个最常见的错误,欢迎来阅读!错误1:foreach循环后留下悬挂指针在foreach循环中,如果我们需要更改迭代的元素或是为了提高效率,运用引用是一个好办法:$arr=array(1,2,3,4);foreach($arras&$value){$val...
-
php通过sudo执行root指令
PHP是一种很强大的语言,那么下面就一起来看他在指令方面的应用吧!下面是本站小编精心为大家整理的php通过sudo执行root指令,希望对大家学习有帮助,更多内容请关注应届毕业生网!1.高级的用法如限制主机、用户组、命令组的用法可以参照下面的规则,详细可参看"mansudo...
-
PHP将XML转为数组的方法
本文详细介绍了,在php编程中,将XML数据转换为数组的详细过程,剖析了xml转为php数组的具体方法,感兴趣的朋友可以参考学习下。PHPXML转数组首先,得到一个xml型的对象:复制代码代码示例:$resp=$this->c->execute($req,$sessionKey);//获得xml对象$items=$resp->items;...