本文目錄一覽:
- 1、誰能舉個thinkphp3.2.2數據庫事務例子
- 2、php中mysql加鎖問題
- 3、請問在php中如何控制多表事務?
- 4、php mysql的鎖機制 怎麼寫
- 5、PHP簡單分布式鎖-PHP中的鎖
- 6、PHP MYSQL中 表鎖和行鎖 一般什麼情況下使用 另外具體怎麼寫
誰能舉個thinkphp3.2.2數據庫事務例子
數據庫的事物處理有個lock方法,Lock方法是用於數據庫的鎖機制,如果在查詢或者執行操作的時候使用,就會自動在生成的SQL語句最後加上FORUPDATE;$User=D(“User”);$User-lock(true)-save($data);
php中mysql加鎖問題
有表鎖,行鎖,頁鎖
頁級:引擎 BDB。
表級:引擎 MyISAM , 理解為鎖住整個表,可以同時讀,寫不行
行級:引擎 INNODB , 單獨的一行記錄加鎖
1) 表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,並發度最低。
2) 行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,並發度也最高。
3) 頁面鎖:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,並發度一般。
一般不在PHP中使用鎖操作,因為如果鎖了庫,如果遇到錯誤沒有及時的解鎖,就會導致不能訪問數據的情況。
可以使用MYSQL的事務,就是定義事務開始,然後有幾個語句要執行,然後根據情況,如果有一個語句沒有執行成功,可以回滾(取消這幾個語句的執行),從而達到幾個語句都執行成功或者都不執行的效果,在強事務型的應用中一般使用這個方式
你可以去後盾人平台看看,裡面的東西不錯
請問在php中如何控制多表事務?
php框架中多表事務操作實例,參考如下:
function makeAcquire($nUsers,$nAwards)
{
//更新數據庫
$tranDb = new Model();
$tranDb-startTrans();
for($i = 0; $i sizeof($nUsers); $i++)
{
//更新表Acquire
$flagAc = $tranDb-table(‘Acquire’)-add($acquire);
//更新表Users
$where = array(‘u_id’=$nUsers[$i][‘u_id’]);
$flagU = $tranDb-table(‘Users’)-where($where)-setInc(‘u_man_count’,1);
//更新表Award
$where = array(‘a_id’=$nAwards[$i][‘a_id’]);
$flagA = $tranDb-table(‘Award’)-where($where)-setDec(‘a_count’,1);
}
if($flagAc $flagU $flagA)
{
$tranDb-commit();
}
else
{
$tranDb-rollback();
}
}
php mysql的鎖機制 怎麼寫
MYSQL中的鎖:
語法 :
LOCK TABLE 表名1 READ|WRITE, 表名2 READ|WRITE ……………… 【鎖表】
UNLOCK TABLES 【釋放表】
Read:讀鎖|共享鎖 : 所有的客戶端只能讀這個表不能寫這個表
Write:寫鎖|排它鎖: 所有當前鎖定客戶端可以操作這個表,其他客戶端只能阻塞
注意:在鎖表的過程中只能操作被鎖定的表,如果要操作其他表,必須把所有要操作的表都鎖定起來!
PHP中的文件鎖 (鎖的是文件,不是表)
文件鎖的文件與表有什麼關係?:一點關係也沒有,與令牌相似,誰拿到誰操作。所以表根本沒鎖。
測試時,有個文件就行,叫什麼名無所謂
PHP簡單分布式鎖-PHP中的鎖
對於PHP的鎖,其實並沒有什麼太多的概念。拋棄一些第三方的依賴,看看有哪些可用的選擇。
目前可以想到的就這麼多,在該項目中我們採用文件鎖,因為其它的兩個需要裝擴展。文件鎖的邏輯就非常簡單了
從網上摘抄了一個例子,使用的 eAccelerator 和 文件鎖兩種 傳送門
使用方法
PHP MYSQL中 表鎖和行鎖 一般什麼情況下使用 另外具體怎麼寫
手動加鎖:
表級鎖
lock tables tablename read;//共享鎖
lock tables tablename write;//排它鎖
unlock tables;//解鎖
php直接query就行了。
除了MyIsam,誰還會無聊到顯式加鎖?
InnoDB直接跑事務默認會觸發隱式鎖,不需要自己lock和unlock。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/270684.html