2017-06-10 52 views
1

在經典的PHP我有2個流程文件Laravel DB ::的BeginTransaction造成其他事務鎖定

1)process1.php =>要。表INNODB鎖行。

2)process2.php =>從同一個表

我曾與PHP/MySQL的START TRANSACTION AND COMMIT發揮讀取另一行,並將其作爲我想要的正常工作。 我想要的是process2.php可以選擇另一個記錄事件,儘管process1.php仍在運行並鎖定某一行。

不幸的是,在Laravel中,我的另一個進程被鎖定,直到第一個進程完成事件,儘管第二個進程正在選擇另一個表。

請幫我弄清楚這個問題。

DB::beginTransaction(); 
$rs = DB::table('test_iap')->where('content', 'waiting')->lockForUpdate()->get(); 

$sql = "update test_iap set content='Updated' where id=1"; 
DB::connection('mysql_pencil_main')->update(DB::raw($sql)); 
sleep(10);# To allow testing at different file process 

DB::commit(); 

回答

0

使用sharedLock()lockForUpdate() INSTEAD-OF。共享鎖可以防止選定的行被修改,直到您的事務提交。查看更多描述here

​​
+0

感謝喲的評論。如果第二個過程不是Laravel,這是非常成功的理論。問題是如果第二個進程是Laravel,它會阻止另一個進程,直到第一個進程完成。是否需要對laravel進行任何配置?我在經典的PHP或mysql終端測試真的工作正常。 –