1. 程式人生 > >本文實例講解了PHP使用MySQL事物鎖的實例,並備有註釋加以詳細說明

本文實例講解了PHP使用MySQL事物鎖的實例,並備有註釋加以詳細說明

rom control 語句 lba 數據庫連接 連接 開始 sql roo

/**
 * 數據庫連接
* $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事物鎖的實例,並備有註釋加以詳細說明