П. Г. Демидова А. В. Зафиевский А. А. Короткин А. Н. Лататуев Базы данных Учебное пособие
Download 1.32 Mb. Pdf ko'rish
|
Базы данных
3.10. Хранимые процедуры и триггеры
При разработке крупных информационных систем типична ситуация, когда различные модули этой системы используют одни и те же типовые процедуры, например расчет средней зар- платы по подразделению. В этом случае целесообразно перенести эти процедуры с клиентской части системы на серверную. Это позволит снизить нагрузку как на клиентскую часть, так и на компьютерную сеть, поскольку обмен между клиентом и сер- вером уменьшится. Кроме того, это позволит централизовать мо- дификацию совместно используемых модулей, так как они будут находиться в одном месте – на сервере. Перенос логики приложений на сервер имеет и отрица- тельные стороны. Во-первых, увеличивается нагрузка на сервер, 78 что при большом числе запросов может оказаться критичным. Во-вторых, логика приложений становится менее прозрачной и при несогласованной модификации клиентской и серверной составляющих могут возникнуть ошибки, выявление которых будет представлять большие сложности. Наконец, надо отметить, что языки программирования, на которых пишутся серверные программы, являются системно зависимыми, причем весьма несовместимыми. Это в значительной степени затрудняет пере- вод информационной системы на другую платформу, если такой переход предполагается когда-либо в будущем. Важной разновидностью хранимых процедур являются триг- геры – процедуры, которые автоматически выполняются до, после или вместо определенных событий, к которым относятся вставка, удаление и замена строк в таблицах базы данных. Основным назначением триггеров является проверка названных операций на корректность, а также дополнительная обработка данных, например пересчет итоговых сумм, изменившихся в результате модификации таблицы. Языком программирования триггеров служит тот же язык, что и для хранимых процедур. Примером оператора создания триггера в СУБД MySQL 5.5 может служить следующий текст: delimiter | CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END; | delimiter ; Не вдаваясь в специфику реализации языка SQL в этой СУБД, отметим, что перед выполнением команды создания триг- гера, текст выполняемой части которого (тела триггера) состав- ляет три строки, производится замена ограничителя строки (deli- miter) для того, чтобы эти строки не выполнялись немедленно, а только записывались в базу данных. |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling