lock table 表名 exclusive mode nowait; -- 鎖整個(gè)表
10年積累的做網(wǎng)站、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有果洛州免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
select * from 表名 where XXX for update nowaitl -- 鎖符合條件的記錄
鎖是 數(shù)據(jù)庫保護(hù)數(shù)據(jù)表的一種機(jī)制,通常是自動(dòng)的,分級別的,如果你訪問一個(gè)表的并發(fā)量太大,可以試試拆分這個(gè)表,比如按日期拆分成月表,或者利用oracle的功能(分區(qū))進(jìn)行拆分來分散壓力,如果沒有依據(jù)拆分的話,可以做成實(shí)體化快照,將一些查詢類的操作指向這個(gè)快照,分?jǐn)偙淼脑L問量,也可以通過提升硬件,比如上SSD磁盤,然后將這個(gè)表放到這個(gè)磁盤上,提高訪問速度。
oracle數(shù)據(jù)庫分行級鎖和表級鎖。用select * from table-name for update完成行級鎖。用delete或update完成表級鎖。你鎖定的資源 別人會(huì)等待你的提交語句或回退語句完成以后再繼續(xù)進(jìn)行。
這個(gè)和鎖定機(jī)制沒什么關(guān)系吧?你的需求只需要邏輯標(biāo)識就可以滿足了。
可以設(shè)定一個(gè) 鎖定狀態(tài)的字段,例如 LOCK 等等,名字你自己根據(jù)業(yè)務(wù)場景自己取了。當(dāng)提交領(lǐng)導(dǎo)審批這步之后,LOCK字段設(shè)置一個(gè)值,例如1,為鎖定狀態(tài),其他業(yè)務(wù)操作時(shí)先取得此字段狀態(tài)是否為1,為1不可修改。
領(lǐng)導(dǎo)批準(zhǔn)了之后,記錄不可修改,LOCK=1不動(dòng),如拒絕,LOCK=0,可重新修改。
這樣就可以滿足你的需求了,采用鎖機(jī)制并不能滿足你的要求。因?yàn)槟悴恢李I(lǐng)導(dǎo)什么時(shí)候去審批通過,你總不能這一段時(shí)間之內(nèi)都占用ORACLE的鎖吧?這是不合理的。
希望能對你有幫助。