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

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

高老师7年前 (2019-12-31)PHP2184

众所周知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 trait的使用

php trait的使用

PHP不像net支持多继承,自身只支持单继承,为了解决这个问题,php出了Trait这个特性,减少单继承语言的限制。并且能让代码复用率更高。说白了就是一个对象的属性和方法扩展工具一样。例如:trait exts {     public f...

php  while  true  cpu占用100%

php while true cpu占用100%

在编写多进程的实例中我在每个进程中使用如下代码://调用等待信号的处理器 while (true) {     pcntl_signal_dispatch(); }开启5个进程,cpu直接100%修正之后的代码://调用等待信号的处理器 while&...

php异步信号处理

php异步信号处理

php7.1引入了PHP异步信号处理函数pcntl_async_signals() 来处理阻塞问题。在php7之前信号处理方式有2种,第一种是基于ticks来每执行一行代码来触发执行信号监听,第二种是直接while(true){  //监听信号 }第一种方式如果某行的代码阻塞时间较长会影响...

php生成器的send方法详解,php yield send

php生成器的send方法详解,php yield send

【一】.基本用法首先看看官方对send方法的解释:Sets the return value of the yield expression and resumes the generato...

php位运算符详解

php位运算符详解

文章篇幅较长,如果不喜欢看文章的,此处抛出韩顺丰老师的位运算视频,韩老师应该是全网讲php位运算符最详细的一个老师了。链接:https://pan.baidu.com/s/14xj7er8eVSUcJ-jYXyA0GA  提取码:731m 链接:https://pan.baidu.com...

thinkphp5整合workerman,tp5整合workerman

thinkphp5整合workerman,tp5整合workerman

由于workerman底层直接读取$_SERVER['argv']的命令行参数,没有提供独立的方法start/stop,而tp的命令行参数无法适配workerman,虽然thinkphp官方专门做了一个适配的版本,但是看了下评论问题挺多的。于是自己来搞一个.(1).在applicat...