• 本文实例讲解了PHP使用MySQL事物锁的实例,并备有注释加以详细说明


    /**
     * 数据库连接
    * $conn = mysql_connect('localhost', 'root', ''); * mysql_select_db('test', $conn); *mysql_query("SET NAMES GBK"); *支持事务的表必须是InnoDB类型 *一段事务中只能出现一次: *mysql_query('START TRANSACTION');//开始事务 *mysql_query(' ROLLBACK ');//回滚事务 *mysql_query('COMMIT');//提交事务 * 上面的是最原始的写法
    *事务锁:如果连个同步或异步同时更新同样的数据,那么我们就要用到事务锁住正在执行的sql语句,直到事务提交,下一条数据才能执行 *如果一段事务中出现多次回滚事务,则在,提交事务时只将第一次回滚前至开始事务后对数据库的所有操作取消,第一次回滚后至提交事务前所有对数据库操作仍将有效,所以一般将回滚语句仅放在提交事务语句前 *如果一段事务无提交语句,则从开始事务时以下的所有对数据库操作虽执行(执行方法返回对错),但对数据库无影响,但是在执行下段开始务语句时,前段事务自动提交 * 以下示例是我结合现有框架写的测试文件 * 提示:锁住的数据查询条件已经是唯一标识
    */ class test extends controller { private $db; function __construct($options) { parent::__construct($options, []); $this->db = new MySql(); } function run(){ try { $this->db->beginTRAN(); $state = $this->db->getField("SELECT state FROM test WHERE id = 1 FOR UPDATE"); if($state == 2){ throw new Exception('已完成!'); } $data= array( 'state' =>2 ); $res = $this->db->update('test',$data,"id=1"); if(!$res){ throw new Exception('更新成功!'); } $this->db->commitTRAN(); dump('成功');die; } catch ( Exception $e ) { $this->db->rollBackTRAN(); dump($e->getMessage());die; } } }
  • 相关阅读:
    算法导论--第七章、快速排序
    PS操作
    【字符编码】彻底理解字符编码
    HTML网页设计-代码效果记录
    Ubuntu 18.04 nvidia driver 390.48 安装 TensorFlow 1.12.0 和 PyTorch 1.0.0 详细教程
    cmake更新版本简记
    计算机图形学(二)——微表面模型
    计算机图形学(一)——辐照度学概述
    蒙特卡洛积分与重要性采样详解
    for循环提高内存访问效率的做法
  • 原文地址:https://www.cnblogs.com/520fyl/p/7019247.html
Copyright © 2020-2023  润新知