1、數(shù)據(jù)庫里有個東西叫鎖
成都創(chuàng)新互聯(lián)公司公司2013年成立,先為南華等服務(wù)建站,南華等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為南華企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
2、在每個人操作表的時候,對表加鎖,這樣防止別人對表數(shù)據(jù)臟讀、臟寫
3、操作完成后,釋放鎖
4、小心,加鎖后可能會造成死鎖,特別是鎖過多的時候。
用鎖需謹(jǐn)慎,有風(fēng)險,但對數(shù)據(jù)來說是安全的
MYSQL中的鎖:
語法 :
LOCK TABLE 表名1 READ|WRITE, 表名2 READ|WRITE .................. 【鎖表】
UNLOCK TABLES 【釋放表】
Read:讀鎖|共享鎖 : 所有的客戶端只能讀這個表不能寫這個表
Write:寫鎖|排它鎖: 所有當(dāng)前鎖定客戶端可以操作這個表,其他客戶端只能阻塞
注意:在鎖表的過程中只能操作被鎖定的表,如果要操作其他表,必須把所有要操作的表都鎖定起來!
PHP中的文件鎖 (鎖的是文件,不是表)
文件鎖的文件與表有什么關(guān)系?:一點關(guān)系也沒有,與令牌相似,誰拿到誰操作。所以表根本沒鎖。
測試時,有個文件就行,叫什么名無所謂
一般情況下,MYSQL在更新操作會自動加表鎖。不需要顯式加鎖。除非是數(shù)據(jù)要求嚴(yán)格的邏輯寫順序。
執(zhí)行查詢語句(SELECT)前,會自動給涉及的所有表加讀鎖,在執(zhí)行更新操作 (UPDATE、DELETE、INSERT等)前,會自動給涉及的表加寫鎖,這個過程并不需要用戶干預(yù),因此,用戶一般不需要直接用LOCK TABLE命令給MyISAM表顯式加鎖。
1、數(shù)據(jù)庫鎖表的意思:因為在數(shù)據(jù)庫里,同一個數(shù)據(jù)可能有多個人來讀取或更改,為了防止我更改的時候別人也同時更改,這是一般要鎖住表不讓別人改。
2、舉個簡單例子:在更新數(shù)據(jù)庫記錄的過程中,我是不希望別人也來更新我的這些記錄的,像庫存,做出庫的時候,原數(shù)量100,我出了20,我就需要把數(shù)量更新到80;
在更新的過程中,別人又做了30的出庫,如果在我更新的時候,別人先把庫存更新到70,然后我又更新80,那數(shù)量就錯誤了。所以我更新的時候,我就需要鎖定這條記錄。這是數(shù)據(jù)行鎖,排他鎖。
擴展資料:
數(shù)據(jù)庫鎖表的必要條件:
1)互斥條件:指進程對所分配到的資源進行排它性使用,即在一段時間內(nèi)某資源只由一個進程占用。如果此時還有其它進程請求資源,則請求者只能等待,直至占有資源的進程用畢釋放。
2)請求和保持條件:指進程已經(jīng)保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程占有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。
3)不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
4)環(huán)路等待條件:指在發(fā)生死鎖時,必然存在一個進程——資源的環(huán)形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1占用的資源;P1正在等待P2占用的資源,……,Pn正在等待已被P0占用的資源。