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

Posted 楓羽靈~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本文实例讲解了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; } } }

 



以上是关于本文实例讲解了PHP使用MySQL事物锁的实例,并备有注释加以详细说明的主要内容,如果未能解决你的问题,请参考以下文章

PHP 安全问题入门:10 个常见安全问题 + 实例讲解

用PHP+jQuery+Ajax+Mysql发表心情赞功能

PHP+MYSQL会员系统的开发实例教程

MySQL之存储过程实例讲解(创建调用查看修改删除)

深入解析跨站请求伪造漏洞:实例讲解

PHP mysql事务问题实例分析