一、将数据库由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;