Транзакциите се използват, когато имате група заявки, които всички зависят една от друга.
Например банка:
- Банковият клиент „Джон“ превежда $100 по сметката на „Алиса“.
- За този пример има 2 заявки (не показвам регистрация или история на транзакциите... и т.н.). Трябва да извадите $100 от баланса на Джон и да добавите това към баланса на Алис.
Start transaction
- Приспадане от Джон
UPDATE accounts SET balance=balance-100 WHERE account='John'
- Добавяне към Alice
UPDATE accounts SET balance=balance+100 WHERE account='Alice'
commit
Транзакцията не се запазва, докато не я извършите. Така че, ако има грешка в която и да е заявка, можете да извикате rollback
и отменете всички заявки, които са се изпълнявали след стартирането на транзакцията. Ако по някаква причина заявката за добавяне на $100 към Alice не успее, можете да върнете назад и да не приспаднете $100 от Джон. Това е начин да се гарантира, че можете да отмените заявките автоматично, ако е необходимо.
-
Трябва ли да започна транзакция, когато изпълня две или повече заявки за изтриване/актуализиране/вмъкване?
Зависи от това какво правят заявките.
-
Трябва ли също да започна транзакция, когато имам само една заявка за изтриване/актуализация/вмъкване?
Не е необходимо, освен ако не ви е необходим начин за връщане назад (отмяна) на заявката, както искате да направите актуализация и да я потвърдите, преди да извикате commit (save).
-
Трябва ли да започна транзакция като 10 пъти на страница, или по-добре само веднъж за цялата страница, или препоръчвате максимум за всяка страница (например 5)?
Започнете толкова, колкото са ви необходими. Съмнявам се, че имате няколко транзакции на страница, тъй като най-вероятно ще правите едно нещо при всяко зареждане на страница (т.е. прехвърляте пари).