Могу ли я "LOCK IN SHARE MODE" без транзакции? - PullRequest
0 голосов
/ 10 декабря 2011

Нужно ли начинать транзакцию, чтобы создать блокировку в режиме общего ресурса?

То есть либо

$dbc -> query("SELECT * FROM table WHERE id = 1 LIMIT 1 LOCK IN SHARE MODE");

Или,

$dbc -> beginTransaction();
$dbc -> query("SELECT * FROM table WHERE id = 1 LIMIT 1 LOCK IN SHARE MODE");
$dbc -> commit();

Спасибо

1 Ответ

0 голосов
/ 10 декабря 2011

если вы запускаете сеанс с включенной автоматической фиксацией (которая обычно используется в PHP по умолчанию), транзакция запускается и фиксируется для вас.Если вы вызываете beginTransaction, это на самом деле должно быть переведено в:

SET autocommit=0;
START TRANSACTION;

, и commit должен вернуть autocommit back.

То есть вам не нужно явно запускать переход и фиксироватьэто если вы работаете в режиме автоматической фиксации.

PS: На самом деле вам не нужно запускать транзакцию, даже когда вы запускаете в autocommit=0, потому что никакие изменения не будут зафиксированы, пока вы не выполните commit;

...