BEGIN
BEGIN â наÑаÑÑ Ð±Ð»Ð¾Ðº ÑÑанзакÑии
СинÑакÑиÑ
BEGIN [ WORK | TRANSACTION ] [Ñежим_ÑÑанзакÑии[, ...] ] ÐдеÑежим_ÑÑанзакÑÐ¸Ð¸Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑледÑÑÑим: ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY [ NOT ] DEFERRABLE
ÐпиÑание
BEGIN наÑÐ¸Ð½Ð°ÐµÑ Ð±Ð»Ð¾Ðº ÑÑанзакÑии, Ñо еÑÑÑ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑаеÑ, ÑÑо вÑе опеÑаÑоÑÑ Ð¿Ð¾Ñле ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ BEGIN и до Ñвной ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ COMMIT или ROLLBACK бÑдÑÑ Ð²ÑполнÑÑÑÑÑ Ð² одной ÑÑанзакÑии. Ðо ÑмолÑÐ°Ð½Ð¸Ñ (без BEGIN) PostgreSQL вÑполнÑÐµÑ ÑÑанзакÑии в Ñежиме «autocommit» (авÑоÑикÑаÑиÑ), Ñо еÑÑÑ ÐºÐ°Ð¶Ð´Ñй опеÑаÑÐ¾Ñ Ð²ÑполнÑеÑÑÑ Ð² Ñвоей оÑделÑной ÑÑанзакÑии, коÑоÑÐ°Ñ Ð½ÐµÑвно ÑикÑиÑÑеÑÑÑ Ð² конÑе опеÑаÑоÑа (еÑли опеÑаÑÐ¾Ñ Ð±Ñл вÑполнен ÑÑпеÑно; в пÑоÑивном ÑлÑÑае ÑÑанзакÑÐ¸Ñ Ð¾ÑкаÑÑваеÑÑÑ).
Рблоке ÑÑанзакÑии опеÑаÑоÑÑ Ð²ÑполнÑÑÑÑÑ Ð±ÑÑÑÑее, Ñак как Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка/ÑикÑаÑии ÑÑанзакÑии пÑоизводиÑÑÑ Ð¼Ð°ÑÑа опеÑаÑий, нагÑÑжаÑÑÐ¸Ñ Ð¿ÑоÑеÑÑÐ¾Ñ Ð¸ диÑк. ÐÑоме Ñого, вÑполнение неÑколÑÐºÐ¸Ñ Ð¾Ð¿ÐµÑаÑоÑов в одной ÑÑанзакÑии позволÑÐµÑ Ð¾Ð±ÐµÑпеÑиÑÑ ÑелоÑÑноÑÑÑ Ð¿Ñи внеÑении ÑеÑии ÑвÑзаннÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹; дÑÑгие ÑеанÑÑ Ð½Ðµ видÑÑ Ð¿ÑомежÑÑоÑное ÑоÑÑоÑние, когда пÑоизоÑли еÑÑ Ð½Ðµ вÑе ÑвÑзаннÑе изменениÑ.
ÐÑли Ñказан ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¸Ð·Ð¾Ð»ÑÑии, Ñежим ÑÑениÑ/запиÑи или ÑÑÑанавливаеÑÑÑ Ð¾ÑложеннÑй Ñежим, Ð½Ð¾Ð²Ð°Ñ ÑÑанзакÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ñе же Ñ Ð°ÑакÑеÑиÑÑики, ÑÑо и поÑле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ SET TRANSACTION.
ÐаÑамеÑÑÑ
WORKTRANSACTIONÐеобÑзаÑелÑнÑе клÑÑевÑе Ñлова, не оказÑваÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð³Ð¾ влиÑниÑ.
Ðа опиÑанием дÑÑÐ³Ð¸Ñ Ð¿Ð°ÑамеÑÑов обÑаÑиÑеÑÑ Ðº SET TRANSACTION.
ÐÑимеÑаниÑ
START TRANSACTION Ð´ÐµÐ»Ð°ÐµÑ Ñо же, ÑÑо и BEGIN.
ÐÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð±Ð»Ð¾ÐºÐ° ÑÑанзакÑии иÑполÑзÑйÑе COMMIT или ROLLBACK.
ÐÑи попÑÑке вÑполниÑÑ BEGIN внÑÑÑи Ñже наÑаÑого блока ÑÑанзакÑии бÑÐ´ÐµÑ Ð²Ñдано пÑедÑпÑеждение, а ÑоÑÑоÑние ÑÑанзакÑии не измениÑÑÑ. ÐÐ»Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÑÑанзакÑий внÑÑÑи блока ÑÑанзакÑий иÑполÑзÑйÑе ÑоÑки ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ (Ñм. SAVEPOINT).
ÐÐ»Ñ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑи допÑÑкаеÑÑÑ Ð¿ÐµÑеÑиÑление Ñежимов_ÑÑанзакÑии без запÑÑÑÑ
.
ÐÑимеÑÑ
ÐаÑало блока ÑÑанзакÑии:
BEGIN;
СовмеÑÑимоÑÑÑ
BEGIN â ÑÑо ÑзÑковое ÑаÑÑиÑение PostgreSQL. ÐÑа команда ÑавнознаÑна ÑооÑвеÑÑÑвÑÑÑей ÑÑандаÑÑÑ SQL команде START TRANSACTION, на ÑпÑавоÑной ÑÑÑаниÑе коÑоÑой можно найÑи дополниÑелÑнÑе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ ÑовмеÑÑимоÑÑи.
ÐнаÑение DEFERRABLE паÑамеÑÑа Ñежим_ÑÑанзакÑии ÑвлÑеÑÑÑ ÑзÑковÑм ÑаÑÑиÑением PostgreSQL.
Ðо ÑÑеÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑоÑÑелÑÑÑв клÑÑевое Ñлово BEGIN Ð¸Ð¼ÐµÐµÑ Ð´ÑÑгое знаÑение во вÑÑÑаиваемом SQL, поÑÑÐ¾Ð¼Ñ Ð¿Ñи поÑÑиÑовании пÑиложений баз даннÑÑ
ÑекомендÑеÑÑÑ Ð²Ð½Ð¸Ð¼Ð°ÑелÑно ÑвеÑиÑÑ ÑеманÑÐ¸ÐºÑ ÑÑанзакÑий.