zoukankan      html  css  js  c++  java
  • 本文实例讲解了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; } } }
  • 相关阅读:
    前端下拉复选框的使用(这里只有讲述新增时获取值以及查看详情时对他进行赋值)
    layui实现图片上传
    WPF中DataGrid前面加上序号
    Excel导出时出现字符串转换为日期
    redis基础
    Redis安装与集群搭建
    ngnix在Linux下的安装与使用
    redis面试题
    redis持久化的几种方式
    理解乐观锁与悲观锁
  • 原文地址:https://www.cnblogs.com/520fyl/p/7019247.html
Copyright © 2011-2022 走看看