首先,数据库类型要是InnoDB,其次,加锁必须跟事务同时使用,还有,查询的时候都必须带锁,比如: db('sms')->lock(true)->where(['id'=>1])->select();这个地方用锁查询,其它地方如果查询这个db('sms')对象需要防止同时操作的话也要进行加锁,就是也要用lock(true)这种方式查询:

<?php

namespace app\test\controller;

use think\Controller;

use think\Db;

class Index extends Controller
{ public function index()
{
$time = date('H:i:s'); // 开启事务
Db::startTrans(); db('sms')->lock(true)->select();//加锁 $update1 = db('sms')->where(['id' => 1])->update(['email' => 1]); $update2 = db('sms')->where(['id' => 2])->update(['email' => 2]); $update3 = db('sms')->where(['id' => 3])->update(['email' => 8]); if($update1 && $update2 && $update3){
sleep(5);
Db::commit();//提交
return $time.'_lock_true_'.date('H:i:s').'---'.$update1.'---'.$update2.'---'.$update3;
}else{
Db::rollback();//回滚
return $time.'_lock_false_'.date('H:i:s').'---'.$update1.'---'.$update2.'---'.$update3;
} } }

打开两个网页同时刷新,下边实际刷新时间应该是在09:33:23到24秒之间,由此测试成功,效果如下:

数据库:

_______________

TP5 事务处理加锁的更多相关文章

  1. TP5之事务处理

    事务: 执行完A事件然后执行B事件,AB事件都执行完才算完成.可是有时候由于某些因素,A事件执行完,还没来得及执行B事件.怎么办?就需要回到A事件执行前.这种事情多见于电商支付功能. mysql事务要 ...

  2. PHP_MySQL高并发加锁事务处理

    1.背景: 现在有这样的需求,插入数据时,判断test表有无username为‘mraz’的数据,无则插入,有则提示“已插入”,目的就是想只插入一条username为‘mraz’的记录. 2.一般程序 ...

  3. In-Memory:内存优化表的事务处理

    内存优化表(Memory-Optimized Table,简称MOT)使用乐观策略(optimistic approach)实现事务的并发控制,在读取MOT时,使用多行版本化(Multi-Row ve ...

  4. PHP与MYSQL事务处理

    /*MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事务rollback 事务回滚commit 事务确认2.直接用set来改变mysql的 ...

  5. SQLite剖析之事务处理技术

    前言 事务处理是DBMS中最关键的技术,对SQLite也一样,它涉及到并发控制,以及故障恢复等等.在数据库中使用事务可以保证数据的统一和完整性,同时也可以提高效率.假设需要在一张表内一次插入20个人的 ...

  6. myrocks之事务处理

    前言 mysql目前支持的事务引擎有innodb,tokudb. rocksdb加入mysql阵营后,mysql支持的事务引擎增长至3个.myrocks目前支持的事务隔离级别有read-committ ...

  7. MYSQL加锁的测验

     存储引擎  支持的锁定级别 myisam      表级别 memory     表级别   inndb       行级别  bdb:        页级别 lock锁定类型 锁定方式       ...

  8. 终极事务处理(XTP,Hekaton)——万能大招?

    在SQL Server 2014里,微软引入了终极事务处理(Extreme Transaction Processing),即大家熟知的Hekaton.我在网上围观了一些文档,写这篇文章,希望可以让大 ...

  9. Oracle与SQL Server事务处理的比较

    事务处理是所有大型数据库产品的一个关键问题,各数据库厂商都在这个方面花费了很大精力,不同的事务处理方式会导致数据库性能和功能上的巨大差异.事务处理也是数据库管理员与数据库应用程序开发人员必须深刻理解的 ...

  10. oracle中事务处理

    事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败. 事务和锁 当执行事务操作时(dml语句),oracle会在被作用的表上加锁,防止其它用户改表的结构 ...

随机推荐

  1. HttpProxyCacheServer (音视频缓存框架)

    implementation 'com.danikula:videocache:2.7.0' //包 MyApplication 中: //音视频缓存框架private HttpProxyCacheS ...

  2. Socket:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作

    https://blog.csdn.net/weixin_45932157/article/details/113999801 最近服务器的Socket代理软件经常报这个错误:log:Error On ...

  3. c# 在自定义类中控制form窗体中的控件 赋值或修改属性

    c# 在自定义类中控制form窗体中的控件 赋值或修改属性 首先在 自定义类 的外面  声明一个 委托模块 //声明一个委托模块 用来改变form1 窗体中的控件值 public delegate v ...

  4. 学习笔记3:Android Studio 配置NDK编译c++代码

    NDK编译c++代码有两个方式: 1  ndk-build.cmd + Android.mk + Application.mk 编译, 可单独用ndk编译, 不使用IDE,使用Android需要配置b ...

  5. javascript的属性描述符

    什么是属性描述对象(attributes object)? 顾名思义,就是用来描述对象属性的对象.javascript内部提供了一个数据结构,用来描述对象的属性以及控制属性的行为. 比如该对象的某属性 ...

  6. mysql使用经验

    1.mysql建表主键,如果整数,用bigint而不用int 2.执行sql加最大执行时间 /*+ max_execution_time(60000)*/ 3.sql中避免offset过大,查询不出来

  7. Mysql优化工具

    https://blog.csdn.net/qq_29229567/article/details/106241831

  8. 获取Java运行环境信息

    设备相关信息 获取设备名称 import java.net.InetAddress; import java.net.UnknownHostException; try { InetAddress l ...

  9. USB设备判断接入和移除

    目录 以沁恒的CH582芯片为例,主机模式下,在R8_USB_INT_EN中可以使能RB_UIE_DETECT位,由中断来提醒检测USB设备的接入和移除:从机模式下,USB设备没有这样的中断功能(上述 ...

  10. shell_Day05

    交互输入 read    Python中用input()函数,进行输入: read命令同时可以定义多个变量值:而输入的内容默认以空格为分隔符,将值输入到对应的变量中: 如果默认值过多,最后所有的值都会 ...