mysql 事物小测试
2015-09-25 11:41
686 查看
$goodsModel = M('mall.Goods'); $usermodel = M('user.User'); $shopModel = M('mall.Shop'); try { //事物不能跨库 有一个model使用事物则必须都使用事物 同库下一个事物即可 中途修改的值立即生效 出现异常则rollback $goodsModel->beginTransaction(); $usermodel->beginTransaction(); $goodsModel->updateById(['StockCount'=>500], 80); $shopModel->updateById(['GoodsCount'=>10], 100274); $usermodel->updateById(['Money' => 7], 3); echo $goodsModel->fetchById(80)['StockCount'];//500 throw new \Exception('interupt', 211); $goodsModel->commit(); $usermodel->commit(); die('modify success!'); } catch (Exception $e) { $goodsModel->rollback(); $usermodel->rollback(); echo $e->getMessage(); }
如果goodsModel 和userModel 使用的PDO对象是同一个 则属于同一事物
反之为2个事务 ,这也是为什么在mysql控制台测试时 事物可跨库的问题
PDO多事务程序处理:
protected $transactionCounter = 0; function beginTransaction() { if(!$this->transactionCounter++) return parent::beginTransaction(); return $this->transactionCounter >= 0; } function commit() { if(!--$this->transactionCounter) return parent::commit(); return $this->transactionCounter >= 0; } function rollback() { if($this->transactionCounter >= 0) { $this->transactionCounter = 0; return parent::rollback(); } $this->transactionCounter = 0; return false; }
相关文章推荐
- mysql合理配置连接池数量
- mysql触发器实践
- RMySQL
- MySQL去除列行首空格的方法
- mysql 常用配置
- wamp修改mysql密码
- mysql行列转换示例
- MySQLdb安装
- MySQL的btree索引和hash索引的区别
- mysqldump之不老将
- MySQL Count()函数
- 同机安装多个MySQL版本-MySQL 5.7源码安装流程详解
- C#连接MySql
- MySQL AVG()函数
- mysql优化建议
- Code First for MySql命令操作
- mysql的group by应用
- MySql 安装
- 【手把手教】主从MySql配置
- ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'