php 事物处理

一:php事物的用法已经场景(我的理解)
1>高并发,下防止服务器压力过大导致sql执行不成功
2>转账业务,a客户给b客户进行了转账并且扣除了a账户的钱,但是b账户确没有收到,
3>订单业务,
二:在做事物之前,大家要知道只有储存引擎为innoDB,才支持事物,所以
1> show create table 表名; // 查看某个表的储存引擎是否为innoDB
2> alter table 表名 engine=InnoDB; //把表的储存引擎修改成innoDB
三:事物处理的过程:
1>mysql的默认sql自动提交的,我们用事物的目的就是,不让sql自动提交,而只有
commit时才执行sql,而sql一旦出错rollback(回滚),所以这样执行多条sql就会出现如果
成功就会都成功,有一条sql失败,就会全部失败!
2>也可以直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
四:下面是我做的测试:
$conn = mysql_connect('123.207.171.186','shopp','******') or die ("数据连接错误!!!");
mysql_select_db('shopp',$conn);
mysql_query("set names 'GBK'"); //使用GBK中文编码;
//开始一个事务
mysql_query("BEGIN"); //或者mysql_query("START TRANSACTION");
$sql = "INSERT INTO `ecs_order_goods` (`order_id`) VALUES ('222')";
$sql2 = "INSERT INTO `ecs_order_info` (`order_sn`) VALUES ('222')"; //这条我故意写错
$res = mysql_query($sql);
$res1 = mysql_query($sql2);
if($res && $res1){
mysql_query("COMMIT");
echo '提交成功。';
}else{
mysql_query("ROLLBACK");
echo '数据回滚。';
}
mysql_query("END");

posted @ 2017-04-06 11:05  太空刘  阅读(170)  评论(0编辑  收藏  举报