Truncate (SQL)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

TRUNCATE — у мовах, подібних до SQL, DDL-операція видалення усіх рядків таблиці. Логічно еквівалентна операції DELETE без оператора WHERE, однак часто виконується швидше та потребує менших ресурсів системи [1][2][3].

Синтаксис[ред.ред. код]

Загальний синтаксис команди:

TRUNCATE TABLE <Ім'я Таблиці>

Наслідком виконання такої команди є повне видалення усіх рядків таблиці <Ім'я таблиці>. Причому сама таблиця залишається (на відміну від команди DROP TABLE)

Відмінності від оператора DELETE[ред.ред. код]

Основні відмінності між операторами TRUNCATE та DELETE, що можуть бути в різних реалізаціях СУБД:

  • Операція TRUNCATE не записує до журналу подій (log-файл) видалення окремих рядків. Як наслідок, не активуються тригери.
  • Після операції TRUNCATE у деяких СУБД (наприклад, Oracle) відбувається неявна операція COMMIT. Тому видалені з таблиці записи не можна відновити операцією ROLLBACK. Втім, існують і СУБД, в яких операція TRUNCATE може брати участь у транзакціях, наприклад, Microsoft SQL Server.
  • Операція DELETE блокує кожний рядок, а TRUNCATE — усю таблицю.
  • Операція TRUNCATE не повертає якогось значення (зазвичай повертає 0) на відміну від DELETE, що повертає кількість видалених рядків.
  • Операція TRUNCATE, у деяких СУБД (наприклад, у MySQL, де вона еквівалентна послідовності команд DROP TABLE ... та CREATE TABLE ... [2]), обнуляє значення лічильників (для полів з AUTOINCREMENT).

Загалом, реалізація оператора TRUNCATE може залежати від вибору конкретної СУБД. Тому в кожному випадку слід читати документацію відповідної системи.

Джерела[ред.ред. код]

  1. Электронная документация по SQL Server 2008 (июль 2009 г.). Оператор TRUNCATE TABLE. Microsoft. Архів оригіналу за 2012-04-25. Процитовано 2010-05-14. 
  2. а б MySQL Documentation. TRUNCATE TABLE Syntax. Архів оригіналу за 2012-04-25. Процитовано 2010-05-14. 
  3. Oracle® Database SQL Reference. 10g Release 2 (10.2). Oracle Corporation. Архів оригіналу за 2012-04-25. Процитовано 2010-05-14.