Возможно ли иметь в транзакции mysql и select, и update? - PullRequest
0 голосов
/ 10 января 2012

Мне любопытно, может ли это быть достигнуто, поскольку в данный момент я сталкиваюсь с ошибкой и хотел бы посмотреть, исправит ли это SELECT и UPDATE в транзакции (если вам интересно, почему я не публикую сообщение код, который вызывает ошибку, потому что это сложная среда, и я не могу опубликовать все влияющие факторы).

В связи с этим меня также интересует то, что вы когда-либо сталкивались с кодом, в котором и запрос UPDATE записан после запроса SELECT, однако UPDATE выполняется до SELECT исключена возможность выполнения сценария дважды).

1 Ответ

3 голосов
/ 10 января 2012

Это зависит от того, что вы подразумеваете под транзакцией .Существует два типа транзакций:

  • Неявные транзакции: как в операторах INSERT, UPDATE, SELECT, DELETE, и в таких операторах естьнет явных команд транзакции, и ядро ​​базы данных выполнит откат всего оператора, если произойдет ошибка.
  • Явные транзакции: в таком случае выполняются вложенные операторы внутри транзакциикак единое целое и COMMIT всей транзакции или ROLLBACK.

Таким образом, вы не можете иметь как SELECT, так и UPDATE внутри одного запроса, но вы можете использовать их внутритранзакции, такие как:

START TRANSACTION;
   SELECT * FROM tableName;
   UPDATE table SET something = 'other something' WHERE thirdsomething = @s;
COMMIT;

Затем поместите их в хранимую процедуру или в UDF.

Обратите внимание: операторы SELECT не изменяют данные, поэтому вы можетене нужно заключать его в транзакцию, поэтому в вашем случае у вас будет только UPDATE заявление, что вы можете просто использовать хранимую процедуру без транзакции.

...