MySQL & mSQL



              

Чего недостает MySQL и mSQL - часть 2


Практический пример использования транзакций - банковское приложение, в котором перевод средств со сберегательного на чековый счет выполняется в результате изменения остатка на сберегательном счете, а затем изменения остатка на чековом счете. Это можно осуществить с помощью двух команд SQL:

# Снять $100 из $110 на сберегательном счете

UPDATE account

SET balance = 10.00

WHERE id = 1234

# Добавить $100 к $55 на чековом счете

UPDATE account

SET balance = 155.00

WHERE id = 5678

В промежутке между двумя этими изменениями другой клиент мог провести операцию, проверяющую состояние чекового и сберегательного счетов, чтобы узнать, достаточна ли сумма для оплаты чека. Если бы подобное произошло, чек был бы возвращен банком. Еще хуже, если сервер «упадет» в промежутке между двумя изменениями. Клиент просто потеряет $100.

Объединяя эти две команды в транзакцию, вы говорите, что либо обе должны быть успешно выполнены, либо ни одна из них. Если первая команда пройдет, а вторая не сможет выполниться, то можно дать команду, называемую «откат»(«rollback»), которая вернет базу данных в состояние, предшествовавшее началу транзакции. Точно так же никому не разрешается трогать файлы, которые вы модифицируете, пока работа не будет завершена. MySQL частично позволяет эмулировать транзакции, используя команду LOCK TABLES. Блокировки помогают избежать нарушения целостности данных, но не дают возможности осуществления операции отката. В mSQL поддержка транзакций отсутствует.

Триггеры

Триггеры тесно связаны с транзакциями. Продолжая аналогию с дорожным движением, представим себе полицейского инспектора, сверху наблюдающего за перекрестком. Если одна из машин совершает какое-либо нарушение, инспектор выезжает на дорогу и преследует нарушителя.

Триггер — это одна или несколько команд SQL, которые хранятся в базе и выполняются, когда происходит какое-либо определенное событие. Триггеры являются методом автоматизации задач контроля. Если выполняется некоторое условие, триггер может воздействовать на данные или просто сообщить о том, что имело место срабатывание триггера.




Содержание  Назад  Вперед