Что делает по- TRUNCATE
другому, чтобы бросить?
Я считаю, что он удаляет все данные в таблице, но сохраняет имя таблицы в базе данных, а также DROP
удаляет все данные и таблицу. Это правильно ?
Что делает по- TRUNCATE
другому, чтобы бросить?
Я считаю, что он удаляет все данные в таблице, но сохраняет имя таблицы в базе данных, а также DROP
удаляет все данные и таблицу. Это правильно ?
Ответы:
DELETE - ЯЗЫК УПРАВЛЕНИЯ ДАННЫМИ (DML)
DELETE
Заявление в любом RDBMS считается DML заявление. Этот тип оператора, также известный как CRUD (Создать, Читать, Обновить, Удалить), предназначен для манипулирования данными в базе данных без влияния на базовую структуру объектов. На практике это означает:
DELETE
Заявление может быть доработано с помощью предиката либо через WHERE
или JOIN
удалить некоторые или все строки в таблице.DELETE
Заявление будет зарегистрировано в базе данных и может быть свернуто в рамках транзакции , если оператор не может .DELETE
принимает блокировки на уровне строк для данных, которые они удаляют, хотя при необходимости это может возрасти.DELETE
может быть «медленным» (это относительно), но более безопасным, потому что он мелкозернистый.TRUNCATE - ЯЗЫК ОПРЕДЕЛЕНИЯ ДАННЫХ (DDL)
TRUCNATE
считается оператором DDL , означающим, что он предназначен для изменения способа определения объектов в базе данных. Обычно операторы DDL являются CREATE
, ALTER
или DROP
, но TRUNCATE
служат определенной цели, «сбросом» таблицы путем удаления всех строк. Способы этого различаются между движками СУБД, и я бы рекомендовал взглянуть на специфику MySQL . Практические последствия TRUNCATE
:
TRUNCATE
не может быть мелкозернистым. В случае успеха он удалит все строки из вашей таблицы.TRUNCATE
обычно не регистрируется. Это зависит от РСУБД, и я бы посоветовал вам более конкретно взглянуть на то, как MySQL справляется с этим. (Подсказка, это зависит от версии.)TRUNCATE
требует выполнения блокировки метаданных таблицы. То, как это на самом деле реализовано, может быть специфичным для СУБД, но, по сути, TRUNCATE
процесс должен предотвращать перехват других процессов с таблицей для выполнения своего DDL.TRUNCATE
будет быстрее, чем a DELETE
, но менее безопасен.DROP TABLE - ЯЗЫК ОПРЕДЕЛЕНИЯ ДАННЫХ (DDL)
DROP TABLE
идет дальше, чем TRUNCATE
в том, что фактически полностью удаляет таблицу из базы данных. Это включает в себя удаление всех связанных объектов, таких как индексы и ограничения. Если вы отбросите таблицу, вы удалите не только все данные, но и структуру. Обычно это делается, когда таблица больше не нужна. Основная проблема заключается в том, что, поскольку a DROP
является DDL, вы, как правило, не можете отменить его . Некоторые движки СУБД позволяют вам заключать DDL в транзакцию, чтобы вы могли откатить ее, но это не считается наилучшей практикой и ее следует избегать.
Хотя я не могу говорить о MySQL, вот небольшая таблица, в которой сравниваются некоторые аспекты усечения и удаления в Oracle.
truncate | delete
--------------------------------- | ---------------------------
DDL (implicitly commits, | DML
including any pending DML) |
Does not generate undo info | Generates undo info
(rollback statements) | (rollback statements)
Resets high water mark in table | Does not affect full-scan
and all indexes, improving | performance
full-scan performance |
Does not fire any delete triggers | Fires delete triggers
Priv to truncate cannot be granted | --
to truncate another user's |
table; DROP ANY TABLE system |
priv required |
Storage for table and indexes can | Never shrinks the size of a
be set to initial size | table or indexes
Cannot truncate parent table from | --
an established referential |
integrity constraint; must |
first disable foreign key |
that references the parent |
table |
Информация, собранная из этой книги: http://amzn.com/0470395125
Надеюсь, это поможет любым пользователям Oracle, которые наткнулись на эту страницу, как я. Пожалуйста, не стесняйтесь указать, какие из этих пунктов верны в MySQL, если таковые имеются,
DROP TABLE TableName
-> удалить таблицу из базы данных.
TRUNCATE TABLE TableName
-> удалить данные таблицы, безусловно ... и сбросить IDENTITY
начальное значение, если в таблице есть IDENTITY
поле.
DELETE
: Команда DML, если вы выполняете команду удаления, удаляйте только ДАННЫЕ, не разбирая таблицу. Структура. Мы можем ОТКРЫТЬ строку данных в порядке строки
TRUNCATE
: Команда DDL, если вы выполняете команду Truncate, удаляете только ДАННЫЕ без удаления таблицы. Структура, которую мы не можем откатить, урезать данные, удалить данные в режиме PAGE BY PAGE, урезать быстрее, чем удалить запрос.
DROP
:, Команда DDL, если вы выполняете команду DROP, чтобы удалить (удалить) данные и общую структуру таблицы, мы также не сможем откатить данные