在MyISAM引擎中使用事务会怎样

众所周知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;
}
访客
邮箱
网址

通用的占位符缩略图

人工智能机器人,扫码免费帮你完成工作


  • 自动写文案
  • 自动写小说
  • 马上扫码让Ai帮你完成工作
通用的占位符缩略图

人工智能机器人,扫码免费帮你完成工作

  • 自动写论文
  • 自动写软件
  • 我不是人,但是我比人更聪明,我是强大的Ai
Top