🐣
PHP5.3、CakePHP1.3、SQLServer2019 15.0の開発環境で、特定のテーブルに排他ロックを取得
$dataSource = $this->controller->User->getDataSource();
$dataSource->begin($this->controller->User);
...
$this->controller->User->query("SELECT id FROM users WITH (TABLOCKX) where 1=0", false);
...
$dataSource->commit($this->controller->User);
// $dataSource->rollback($this->controller->User);
※WHERE 1=0条件により、実際のデータは取得せず、ただロックを取得する
※query関数にfalseを指定しないと、ループ実行時にキャッシュが取得され、うまくロックを取得できなくなる
Discussion