TRUNCATE
TRUNCATE â опÑÑÑоÑиÑÑ ÑаблиÑÑ Ð¸Ð»Ð¸ Ð½Ð°Ð±Ð¾Ñ ÑаблиÑ
СинÑакÑиÑ
TRUNCATE [ TABLE ] [ ONLY ] Ð¸Ð¼Ñ [ * ] [, ... ]
[ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]ÐпиÑание
Ðоманда TRUNCATE бÑÑÑÑо ÑдалÑÐµÑ Ð²Ñе ÑÑÑоки из набоÑа ÑаблиÑ. Ðна дейÑÑвÑÐµÑ Ñак же, как безÑÑÐ»Ð¾Ð²Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° DELETE Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑаблиÑÑ, но гоÑаздо бÑÑÑÑее, Ñак как она ÑакÑиÑеÑки не ÑканиÑÑÐµÑ ÑаблиÑÑ. Ðолее Ñого, она немедленно вÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð´Ð¸Ñковое пÑоÑÑÑанÑÑво, Ñак ÑÑо вÑполнÑÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ VACUUM поÑле Ð½ÐµÑ Ð½Ðµ ÑÑебÑеÑÑÑ. Ðаиболее полезна она Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑиÑ
ÑаблиÑ.
ÐаÑамеÑÑÑ
имÑÐÐ¼Ñ ÑаблиÑÑ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹), подлежаÑей опÑÑÑоÑениÑ. ÐÑли пеÑед именем ÑаблиÑÑ Ñказано
ONLY, оÑиÑаеÑÑÑ ÑолÑко Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ ÑаблиÑа. ÐезONLYоÑиÑаеÑÑÑ Ð¸ Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ ÑаблиÑа, и вÑе ÐµÑ Ð¿Ð¾Ñомки (еÑли ÑаковÑе еÑÑÑ). ÐоÑле имени ÑаблиÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ Ñакже добавиÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑное Ñказание*, ÑÑÐ¾Ð±Ñ Ñвно обознаÑиÑÑ, ÑÑо блокиÑовка заÑÑÐ°Ð³Ð¸Ð²Ð°ÐµÑ Ð¸ вÑе доÑеÑние ÑаблиÑÑ.RESTART IDENTITYÐвÑомаÑиÑеÑки пеÑезапÑÑкаÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑи, ÑвÑзаннÑе Ñо ÑÑолбÑами опÑÑÑоÑаемой ÑаблиÑÑ.
CONTINUE IDENTITYÐе изменÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑей. ÐÑо поведение по ÑмолÑаниÑ.
CASCADEÐвÑомаÑиÑеÑки опÑÑÑоÑаÑÑ Ð²Ñе ÑаблиÑÑ, ÑÑÑлаÑÑиеÑÑ Ð¿Ð¾ внеÑÐ½ÐµÐ¼Ñ ÐºÐ»ÑÑÑ Ð½Ð° заданнÑе ÑаблиÑÑ, или на ÑаблиÑÑ, заÑÑонÑÑÑе в ÑезÑлÑÑаÑе дейÑÑвиÑ
CASCADE.RESTRICTÐÑказаÑÑ Ð² опÑÑÑоÑении лÑбÑÑ ÑаблиÑ, на коÑоÑÑе по внеÑÐ½ÐµÐ¼Ñ ÐºÐ»ÑÑÑ ÑÑÑлаÑÑÑÑ Ð´ÑÑгие ÑаблиÑÑ, не пеÑеÑиÑленнÑе в ÑÑой команде. ÐÑо поведение по ÑмолÑаниÑ.
ÐамеÑаниÑ
ЧÑÐ¾Ð±Ñ Ð¾Ð¿ÑÑÑоÑиÑÑ ÑаблиÑÑ, необÑ
одимо имеÑÑ Ð¿Ñаво TRUNCATE Ð´Ð»Ñ ÑÑой ÑаблиÑÑ.
Ðоманда TRUNCATE запÑаÑÐ¸Ð²Ð°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ ACCESS EXCLUSIVE Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑаблиÑÑ, коÑоÑÑÑ Ð¾Ð½Ð° обÑабаÑÑваеÑ. Ðогда Ñказано RESTART IDENTITY, вÑе поÑледоваÑелÑноÑÑи, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿ÐµÑезапÑÑенÑ, Ñакже блокиÑÑÑÑÑÑ Ð¸ÑклÑÑиÑелÑно. Ð ÑлÑÑаÑÑ
, когда ÑÑебÑеÑÑÑ Ð¾Ð±ÐµÑпеÑиÑÑ Ð¿Ð°ÑаллелÑнÑй доÑÑÑп к ÑаблиÑе, ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ DELETE.
TRUNCATE нелÑÐ·Ñ Ð¸ÑполÑзоваÑÑ Ñ ÑаблиÑей, на коÑоÑÑÑ Ð¿Ð¾ внеÑÐ½ÐµÐ¼Ñ ÐºÐ»ÑÑÑ ÑÑÑлаÑÑÑÑ Ð´ÑÑгие ÑаблиÑÑ, еÑли ÑолÑко и ÑÑи ÑаблиÑÑ Ð½Ðµ опÑÑÑоÑаÑÑÑÑ ÑÑой же командой. ÐÑовеÑка допÑÑÑимоÑÑи оÑиÑÑки в ÑакиÑ
ÑлÑÑаÑÑ
поÑÑебовала Ð±Ñ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑаблиÑÑ, а Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð¸Ð´ÐµÑ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð½Ðµ делаÑÑ ÑÑого. ÐÐ»Ñ Ð°Ð²ÑомаÑиÑеÑкой обÑабоÑки вÑеÑ
завиÑимÑÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ñказание CASCADE â но бÑдÑÑе оÑÐµÐ½Ñ Ð¾ÑÑоÑÐ¾Ð¶Ð½Ñ Ñ Ð½Ð¸Ð¼, инаÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе поÑеÑÑÑÑ Ð´Ð°Ð½Ð½Ñе, коÑоÑÑе не ÑобиÑалиÑÑ ÑдалÑÑÑ!
ÐÑи вÑполнении TRUNCATE не ÑÑабаÑÑваÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ðµ ÑÑиггеÑÑ ON DELETE, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð½Ð°ÑÑÑÐ¾ÐµÐ½Ñ Ð´Ð»Ñ ÑаблиÑ. Ðднако пÑи ÑÑом ÑÑабаÑÑваÑÑ ÑÑиггеÑÑ ON TRUNCATE. ÐÑли ÑÑиггеÑÑ ON TRUNCATE опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð´Ð»Ñ Ð»ÑбÑÑ
из ÑÑиÑ
ÑаблиÑ, Ñо вÑе ÑÑиггеÑÑ BEFORE TRUNCATE ÑÑабаÑÑваÑÑ Ð´Ð¾ Ñого, как пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¾Ð¿ÑÑÑоÑение, а вÑе ÑÑиггеÑÑ AFTER TRUNCATE ÑÑабаÑÑваÑÑ Ð¿Ð¾Ñле Ñого, как завеÑÑаеÑÑÑ Ð¾Ð¿ÑÑÑоÑение поÑледней ÑаблиÑÑ Ð¸ вÑе поÑледоваÑелÑноÑÑи ÑбÑаÑÑваÑÑÑÑ. ТÑиггеÑÑ ÑÑабаÑÑваÑÑ Ð¿Ð¾ поÑÑÐ´ÐºÑ Ð¾Ð±ÑабоÑки ÑÐ°Ð±Ð»Ð¸Ñ (ÑнаÑала Ð´Ð»Ñ ÑаблиÑ, пеÑеÑиÑленнÑÑ
в команде, заÑем Ð´Ð»Ñ ÑеÑ
, ÑÑо заÑÑагиваÑÑÑÑ ÐºÐ°Ñкадно).
Ðоманда TRUNCATE небезопаÑна Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ MVCC. ÐоÑле опÑÑÑоÑÐµÐ½Ð¸Ñ ÑаблиÑÑ Ð¾Ð½Ð° бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ Ð¿ÑÑÑой Ð´Ð»Ñ Ð¿Ð°ÑаллелÑнÑÑ
ÑÑанзакÑий, еÑли они ÑабоÑаÑÑ Ñо Ñнимком, полÑÑеннÑм до опÑÑÑоÑениÑ. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº РазделÑ 13.5.
TRUNCATE ÑвлÑеÑÑÑ Ð½Ð°Ð´Ñжной ÑÑанзакÑионной опеÑаÑией в оÑноÑении даннÑÑ
в ÑаблиÑаÑ
: опÑÑÑоÑение бÑÐ´ÐµÑ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñно оÑменено, еÑли окÑÑжаÑÑÐ°Ñ ÑÑанзакÑÐ¸Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð·Ð°ÑикÑиÑована.
С Ñказанием RESTART IDENTITY подÑазÑмеваемÑе опеÑаÑии ALTER SEQUENCE RESTART Ñакже вÑполнÑÑÑÑÑ ÑÑанзакÑионно; Ñо еÑÑÑ, они бÑдÑÑ Ð¾ÑмененÑ, еÑли окÑÑжаÑÑÐ°Ñ ÑÑанзакÑÐ¸Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð·Ð°ÑикÑиÑована. УÑÑиÑе, ÑÑо еÑли до Ñого, как ÑÑанзакÑÐ¸Ñ Ð¾ÑмениÑÑÑ, бÑдÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ ÐºÐ°ÐºÐ¸Ðµ-либо дополниÑелÑнÑе опеÑаÑии Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑÑми, ÑÑÑÐµÐºÑ ÑÑиÑ
опеÑаÑий Ñакже бÑÐ´ÐµÑ Ð¾ÑменÑн, но не иÑ
влиÑние на знаÑение currval(); Ñо еÑÑÑ Ð¿Ð¾Ñле ÑÑанзакÑии currval() пÑÐ¾Ð´Ð¾Ð»Ð¶Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð¿Ð¾Ñледнее знаÑение поÑледоваÑелÑноÑÑи, полÑÑенное внÑÑÑи пÑеÑванной ÑÑанзакÑии, Ñ
оÑÑ Ñама поÑледоваÑелÑноÑÑÑ Ñже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑоглаÑованной Ñ Ð½Ð¸Ð¼. ÐодобнÑм обÑазом обÑÑно ведÑÑ ÑÐµÐ±Ñ currval() поÑле ÑÐ±Ð¾Ñ ÑÑанзакÑии.
TRUNCATE в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½Ðµ поддеÑживаеÑÑÑ Ð´Ð»Ñ ÑÑоÑонниÑ
ÑаблиÑ. Ðз ÑÑого ÑледÑеÑ, ÑÑо еÑли Ñ Ñелевой ÑаблиÑÑ ÐµÑÑÑ Ð´Ð¾ÑеÑние ÑаблиÑÑ, ÑвлÑÑÑиеÑÑ ÑÑоÑонними, команда не бÑÐ´ÐµÑ Ð²Ñполнена.
ÐÑимеÑÑ
ÐпÑÑÑоÑение ÑÐ°Ð±Ð»Ð¸Ñ bigtable и fattable:
TRUNCATE bigtable, fattable;
Та же опеÑаÑÐ¸Ñ Ð¸ ÑбÑÐ¾Ñ Ð²ÑÐµÑ ÑвÑзаннÑÑ Ð³ÐµÐ½ÐµÑаÑоÑов поÑледоваÑелÑноÑÑей:
TRUNCATE bigtable, fattable RESTART IDENTITY;
ÐпÑÑÑоÑение ÑаблиÑÑ othertable и каÑÐºÐ°Ð´Ð½Ð°Ñ Ð¾Ð±ÑабоÑка вÑеÑ
ÑаблиÑ, ÑÑÑлаÑÑиÑ
ÑÑ Ð½Ð° othertable по огÑаниÑениÑм внеÑнего клÑÑа:
TRUNCATE othertable CASCADE;
СовмеÑÑимоÑÑÑ
СÑандаÑÑ SQL:2008 вклÑÑÐ°ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ TRUNCATE Ñ ÑинÑакÑиÑом TRUNCATE TABLE . ÐÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð¼Ñ_ÑаблиÑÑCONTINUE IDENTITY/RESTART IDENTITY Ñакже опиÑÐ°Ð½Ñ Ð² ÑÑандаÑÑе, но Ñ Ð½ÐµÐ±Ð¾Ð»ÑÑими оÑлиÑиÑми, Ñ
оÑÑ Ð¸Ñ
назнаÑение поÑ
оже. Ðоведение ÑÑой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¿Ñи паÑаллелÑнÑÑ
опеÑаÑиÑÑ
, ÑоглаÑно ÑÑандаÑÑÑ, оÑÑаÑÑи опÑеделÑÑÑÑÑ ÑеализаÑией, Ñак ÑÑо пÑиведÑннÑе вÑÑе замеÑÐ°Ð½Ð¸Ñ Ð¿Ñи необÑ
одимоÑÑи ÑледÑÐµÑ ÑÑиÑÑваÑÑ Ð¸ ÑопоÑÑавлÑÑÑ Ñ Ð´ÑÑгими ÑеализаÑиÑми.