Что делает по- 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, чтобы удалить (удалить) данные и общую структуру таблицы, мы также не сможем откатить данные