众所周知MyISAM引擎不支持事务,但是我只是知道不支持事务,并未测试具体的表现是什么,测试代码如下:
try { //开启事务 Db::startTrans(); //(1).id为1的数据name字段修改为gao $isUpdate1 = Db::table('member')->where(['id' => 1])->update([ 'name' => 'gao1' ]); if (!$isUpdate1) { throw new Exception('更新第1条数据失败,事务已经回滚.'); } //(2).id为2的数据name字段修改为chen $isUpdate2 = Db::table('member')->where(['id' => 2])->update([ 'name' => 'chen' ]); if (!$isUpdate2) { throw new Exception('更新第2条数据失败,事务已经回滚.'); } // 提交事务 Db::commit(); } catch (Exception $exception) { //事务回滚 Db::rollback(); echo $exception->getMessage() . PHP_EOL; }
通过测试发现MyISAM直接忽视开启事务,提交事务,回滚事务,上面的代码相当于你没有写开启事务,提交事务,事务回滚的效果一样,只要有数据库操作一律直接执行。完全等同于下面的代码:
try { //(1).id为1的数据name字段修改为gao $isUpdate1 = Db::table('member')->where(['id' => 1])->update([ 'name' => 'gao1' ]); if (!$isUpdate1) { throw new Exception('更新第1条数据失败'); } //(2).id为2的数据name字段修改为chen $isUpdate2 = Db::table('member')->where(['id' => 2])->update([ 'name' => 'chen' ]); if (!$isUpdate2) { throw new Exception('更新第2条数据失败'); } } catch (Exception $exception) { echo $exception->getMessage() . PHP_EOL; }