MyISAM转为InnoDB并在ThinkPHP中使用存储过程

一、将数据库由MyISAM转为InnoDB

1、导出CentOS数据库的表结构
#mysqldump -uroot -p test > test.sql
 
2、替换zjy_b2b_db_table.sql里的MyISAM为INNODB
#sed -i 's/MyISAM/INNODB/g' test.sql
 
3、备份好数据库,将数据库里所有表删除
 
4、将处理好的数据库重新导入
#mysql -uroot -p test < test.sql
 
PS:查看是否为innodb
#mysql -uroot -p
输入密码,进入mysql
mysql>show databases;
mysql> use test;
mysql>show table status;
可以看到所有表的存储引擎已全部改为InnoDB
 
PS:Navicat新建表可选引擎为InnoDB

二、ThinkPHP中用存储过程

使用方法:
1、启动事务:
$Model->startTrans(); 
2、提交事务
$Model->commit();
3、事务回滚
$Model->rollback();
 
(事务是针对数据库本身的,所以可以跨模型操作的 。)
实例:(充值过程)
$this->id=123;
$amount=456;
$Model=D('User');
$Model->startTrans(); //开启事务
$condition['id'] = $this->id;
$result=$Model->where($condition)->setInc('amount',$amount);
$result2=M('Some')->add(array('id'=>$this->id,'amount'=>$amount,'time'=>time()));
//如果写入User表余额失败,则Some表不写入,回滚。
if($result===false) {
    $Model->rollback(); //回滚
    \Think\Log::write('未能写入User表','WARN');
    header("location: ".SELF_URL."/some_url");exit;
}
//如果 Some表不能写入,记录到日志
if($result2===false) {
    //此处应记录到日志
    \Think\Log::write('未能写入Some表','WARN');
}
//提交
$Model->commit();
\Think\Log::write('用户ID:'.$this->id.'成功充值了'.$amount.'元','WARN');
header("location: ".SELF_URL."/some_url");exit;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值