本文執行個體講解了PHP使用MySQL事物鎖的執行個體,並備有注釋加以詳細說明

來源:互聯網
上載者:User

標籤:詳細說明   sql語句   事物   state   結合   sql   復原事務   localhost   root   

/** * 資料庫連接
* $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事物鎖的執行個體,並備有注釋加以詳細說明

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.