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

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

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

众所周知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.5b1.cn/post/113.html

分享给朋友:

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

PHP获取原始数据

PHP获取原始数据

在项目中需要对图片进行裁剪,前端裁剪完成发送base64给后端,但是很意外的PHP获取到的数据和前端有点差距,之前我都是先加密,后端解密,但是这次依然不行。于是使用filter_input方法轻松解决。$base64 =  filter_input(INPUT_POST...

php创建webservice,php搭建webservice,php编写webservice

php创建webservice,php搭建webservice,php编写webservice

第一步:服务端文件<?php $wsdlfile='webservice.wsdl'; ini_set('soap.wsdl_cache_enabled','0');    //关闭WSDL缓存 //001...

php 数组转换xml,php 数组转成xml,php数组转xml 函数

php 数组转换xml,php 数组转成xml,php数组转xml 函数

源码:特别适用于微信支付中通知微信支付网关function array2xml($arr, $level = 1) { $s = $level == 1 ? "<xml&g...

php jsonp转json,php jsonp转数组,php jsonp转对象

php jsonp转json,php jsonp转数组,php jsonp转对象

将jsonp转为PHP数组和对象。/**  * jsonp转数组|Jsonp转json  * @param string $jsonp jsonp字符串  * @param bool $as...

php端口复用,php socket端口复用

php端口复用,php socket端口复用

第一次听说端口复用是在mixphp最新版本中发现的,mixphp启动监听9501端口,现在作者说可以多开几个进程来执行mixphp,我心里想了下再启动不是会端口冲突嘛,但是却没有问题,于是下载mixphp的源码解读,原来是启动http服务器使用new Co\Http\Server('0.0....

windows安装php event扩展问题

windows安装php event扩展问题

php event扩展在windows中依赖于php_sockets扩展,因此在php.ini中必须先加载php sockets扩展,如下。extension=sockets extension=event...