当前位置:首页 > PHP > 正文内容

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

高老师5年前 (2019-12-31)PHP1949

众所周知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;
}

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/113.html

分享给朋友:

“在MyISAM引擎中使用事务会怎样” 的相关文章

php引用变量的完全理解

php引用变量的完全理解

在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型.和其他语言有点差距.(1).在值类型中我们直接使用&符号表示指向对应变量的内存地址,当前变量和被指向的变量只要有1个的值被修改都会直接影响另外一个变量的值发生变化。(ps:还是非常节省内存的,可以使用...

PHP getenv函数和putenv函数的学习

PHP getenv函数和putenv函数的学习

(1).在PHP中可以查看的环境变量包括: (1.1).电脑环境变量 (2.1).服务器环境变量(2).getenv()函数获取一个环境变量的值.参数1是环境变量的key,参数2值为true的时候仅从你的电脑环境变量中查找,参数2值为false会从两种变量中全部查询//获取我电脑登录的用户名,输出A...

PHP最快方式模拟curl,PHP最快爬虫模拟方法

PHP最快方式模拟curl,PHP最快爬虫模拟方法

有时候我们需要爬一个接口,但是这个接口需要很多参数,包括header和cookie要去编写,使用php curl模拟实在太慢。我们可以通过浏览器的network来复制请求为curl命令。例如我需要模拟请求接口地址:https://www.xkmz.cc/Ajax/Debug/delly,我们只需要在...

php代理下载,php代下载文件,php下载远程文件,php远程文件下载

php代理下载,php代下载文件,php下载远程文件,php远程文件下载

经常我们下载国外资源容易被墙,可以通过php脚本获取远程文件流然后输出给我们的浏览器来下载。<?php //设置下载文件的url $url = 'https://mirrors.huaweicloud.com/ubuntukylin/ubuntukylin-19....

tp orm事务提交未执行的教训和总结

tp orm事务提交未执行的教训和总结

最近在项目中处理一个关于商品数据重复需要删除多余的商品记录,但是删除一条商品必然要把关联的其他表商品的id和其他商品信息更换为正确的,删除一个商品记录,同时要去修改100多张表的关联商品数据,在项目中引用了tp orm 1.2版本,由于项目是php5.6版本,没法使用最新orm,在代码中每处理1个商...

php通过event扩展创建定时器,php毫秒级定时器

php通过event扩展创建定时器,php毫秒级定时器

PHP简单定时器可以通过pcntl_signal创建闹钟信号来实现。但是缺点很明显,性能一般,要自己实现守护进程,不支持毫秒级定时器,单进程不支持多个闹钟信号,不能跨平台运行event扩展支持的事件多,性能高。<?php //创建event配置.[空配置] $eventConfig ...