首先,数据库类型要是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. 周练3(php反序列化)

    serialize()函数 $s = serialize($变量); //该函数将变量数据进行序列化转换为字符串 file_put_contents('./目标文本文件', $s); //将$s保存到 ...

  2. RDD编程练习

    一.filter,map,flatmap练习: 1.读文本文件生成RDD lines 2.将一行一行的文本分割成单词 words 3.全部转换为小写 4.去掉长度小于3的单词 5.去掉停用词 6.练习 ...

  3. vue 基础 v-text v-html v-model v-cloak v-bind

    v-text  纯文本绑定 v-html  会解析html标签 <p v-html="rawHtml"></p> var a=new Vue({ el:&q ...

  4. .net core 3.1项目运行在Windows server 2012R2服务器上,Decimal类型小数点不见了,求解!32112.7958

    .net core 3.1项目运行在Windows server 2012R2服务器上,Decimal类型小数点不见了,求解! string str = "1002910.8241" ...

  5. Typora的一些基础用法

    Typora的简单实用技巧 标题 标题分为h1~h6六个等级,数字越小标题越大. 定义标题有一下几种方式. 方式一:这个标题手敲就在文本前边敲#号,#和文本中间需又空格隔开. 方式二:快捷键,Ctrl ...

  6. Linux系统Shell脚本第二章:条件测试、正整数字符串比较与if、case语句

    目录 一.条件测试 1.三种测试方法 2. 正整数值比较 3.字符串比较 4.逻辑测试 二.脚本中常用命令 1.echo命令 2.date命令 3.cal命令 4.tr命令 5.cut命令 6.sor ...

  7. mybatis读取blob类型

    mybatis 读取blob数据 mybatis读取blob数据过程: 1.从数据库中读出blob数据类型,用pojo中的byte[]接收. 2.把文件保存成文件(或者变成base64也行). Cus ...

  8. jmeter接口自动化-读取CSV文件执行测试用例

    一.在csv文件中编写好用例 首先在csv文件首行填写相关参数并编写测试用例.脚本可通过优先级参数控制执行哪些接口,通过请求方式执行不同端口下的接口,再读取csv文件时进行参数化. 二.设计测试脚本并 ...

  9. Spring Boot--自定义异常类

    1.业务异常 /** * @Description: 业务异常 * @Author: Yaoson * @Create: 2022/4/21 0:05 **/ public class Busines ...

  10. linux基本命令说明参数

    linux基本命令说明参数 标签(空格分隔): Linux 1.# 表示权限用户(如:root),$ 表示普通用户 开机提示:Login:输入用户名 password:输入口令 用户是系统注册用户成功 ...