В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Вот список различий. Я выделил Oracle-specific features, и надо надеяться сообщество может добавить в конкретных различиях других поставщиков также. Различия, которые характерны для большинства поставщиков, могут пойти непосредственно ниже заголовков с различиями, выделенными ниже.
<час>
, Если Вы хотите быстро удалить все строки от таблицы, и Вы действительно уверены, что хотите сделать это, и у Вас нет внешних ключей против таблиц, тогда УСЕЧЕННОЕ, вероятно, будет быстрее, чем УДАЛЕНИЕ.
Различные системные конкретные вопросы нужно рассмотреть, как детализировано ниже.
<час>
Оператора Удаляет, DML, Усеченный DDL (, Что такое DDL и DML? )
<час>
Переменная поставщиком
Усеченный SQL*Server
может откатываться.
Усеченный PostgreSQL
может откатываться.
Oracle
, поскольку УСЕЧЕННЫМ является DDL, это включает две фиксации, один прежде и один после выполнения оператора. Усеченный не может поэтому откатываться, и отказ в усеченном процессе выпустит фиксацию так или иначе.
Однако посмотрите Ретроспективный кадр ниже.
<час>
Удаляет, не восстанавливает пространство, Усеченный восстанавливает пространство
Oracle
, Если Вы используете пункт УСТРОЙСТВА ХРАНЕНИЯ ДАННЫХ ПОВТОРНОГО ИСПОЛЬЗОВАНИЯ тогда, сегменты данных не освобождены, который может быть незначительно более эффективным, если таблица должна быть перезагружена с данными. Метка паводка сбрасывается.
<час>
Удаляет, может использоваться для удаления всех строк или только подмножества строк. Усеченный удаляет все строки.
Oracle
, Когда таблица делится, отдельные разделы, может быть усеченным в изоляции, таким образом частичное удаление данных всей таблицы возможно.
<час>
Удаляют, может быть применен к таблицам и таблицам в кластере. Усеченный применяется только к таблицам или всему кластеру. (Может быть конкретная Oracle)
<час>
, Oracle
Удаляет, не влияет на идентификатор объекта данных, но усеченный присваивает новый идентификатор объекта данных если никогда не было вставки против таблицы начиная с ее создания Даже единственная вставка, которая откатывается, заставит новый идентификатор объекта данных быть присвоенным после усечения.
<час>
, который удаляют работы Ретроспективного кадра через, но усеченное предотвращает ретроспективный кадр к состояниям до операции.
Однако от 11gR2 функция FLASHBACK ARCHIVE позволяет это, кроме Использования Express Edition
РЕТРОСПЕКТИВНОГО КАДРА в <час> Oracle http://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_flashback.htm#ADFNS638
Переменная
, Oracle
Удаляет, может быть предоставлен на таблице другому пользователю, или роль, но усеченный не может быть, не используя ОТБРАСЫВАНИЕ НИКАКОЕ предоставление ТАБЛИЦЫ.
<час>
Удаляет, генерирует небольшое количество восстановления и большую сумму отмены. Усеченный генерирует незначительную сумму каждого.
<час>
Oracle
А усеченная операция представляет неприменимые индексы, применимые снова. Удалите не делает.
<час>
усеченный А не может быть применен, когда включенный внешний ключ ссылается на таблицу. Обработка с удаляет, зависит от конфигурации внешних ключей.
<час>
, Усеченный Oracle
требует эксклюзивной блокировки таблицы, удалите, требует общей блокировки таблицы. Следовательно отключение блокировок таблицы является способом предотвратить усеченные операции на таблице.
<час>
триггеры DML не стреляют в усеченное.
триггеры Oracle
DDL доступны.
<час>
Усеченный Oracle
не может быть выпущен по ссылке базы данных.
<час>
SQL*Server
Усеченный сброс последовательность для типов столбца ИДЕНТИФИКАЦИОННЫХ ДАННЫХ, удалите, не делает.
<час>
В большинстве реализаций, DELETE
оператор может возвратить клиенту строки, которые были удалены.
, например, в Oracle МН подпрограмма / подпрограмма SQL Вы могли:
DELETE FROM employees_temp
WHERE employee_id = 299
RETURNING first_name,
last_name
INTO emp_first_name,
emp_last_name;
Я прокомментировал бы сообщение matthieu, но у меня еще нет представителя...
MySQL In, автоматический инкрементный счетчик сбрасывается с усеченным, но не с удаляют.
Большая причина это удобно, когда Вы должны обновить данные в многомиллионной таблице строки, но не хотите восстанавливать их. "Удалите *", взял бы навсегда, тогда как влияние производительности Усеченных будет незначительно.
Короче говоря, усеченный не регистрируется, что-либо (так намного быстрее, но не может быть отменен), тогда как удаляют, зарегистрирован (и может быть часть большей транзакции, будет откатывать и т.д.). Если у Вас есть данные, которые Вы не хотите в таблице в dev, обычно лучше усечь, поскольку Вы не рискуете заполнять журнал транзакций
Да, УДАЛИТЕ, медленнее, УСЕЧЕННЫЙ быстрее. Почему?
УДАЛЯЮТ, должен считать записи, проверочные ограничения, обновить блок, индексы обновления, и генерировать восстановление/отмену. Все это занимает время.
УСЕЧЕННЫЙ просто корректирует указатель в базе данных для таблицы (Паводок Mark) и пуф! данных не стало.
Это - конкретная Oracle, AFAIK.
Небольшая поправка к исходному ответу - при удалении также создается значительное количество повторов (так как отмена сама защищена повторами). Это видно из вывода autotrace:
SQL> delete from t1;
10918 rows deleted.
Elapsed: 00:00:00.58
Execution Plan
----------------------------------------------------------
0 DELETE STATEMENT Optimizer=FIRST_ROWS (Cost=43 Card=1)
1 0 DELETE OF 'T1'
2 1 TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=43 Card=1)
Statistics
----------------------------------------------------------
30 recursive calls
12118 db block gets
213 consistent gets
142 physical reads
3975328 redo size
441 bytes sent via SQL*Net to client
537 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
10918 rows processed
Самое большое различие - то, что усеченный не зарегистрированная операция, в то время как удаляют.
Просто это означает, что в случае катастрофического отказа базы данных, Вы не можете восстановить данные, управляемые на усеченным, но с удаляют Вас, может.
[еще 113] детали здесь
"Усеченный не регистрируется, что-либо" корректно. Я пошел бы далее:
Усеченный не выполняется в контексте транзакции.
преимущество скорости усеченных удаляет, должно быть очевидным. То преимущество располагается от тривиального до огромного, в зависимости от Вашей ситуации.
Однако я видел усеченный неумышленно повреждать ссылочную целостность и нарушать другие ограничения. Власть, которую Вы получаете путем изменения данных вне транзакции, должна быть сбалансирована относительно ответственности, которую Вы наследовали при обходе натянутого каната без сети.
С SQL Server или MySQL, если существует PK с автоматическим инкрементом, усеченным, сбросит счетчик.
Все хорошие ответы, к которым я должен добавить:
С тех пор TRUNCATE TABLE
DDL ( Данные Язык Defination ), не DML ( манипулирование данными Langauge ), команда, эти Delete Triggers
не работают.
В SQL Server 2005 я полагаю, что можно откатывать усеченное
TRUNCATE
- это оператор DDL, тогда как DELETE
- это оператор DML. Ниже приведены различия между ними:
Поскольку TRUNCATE
- это оператор DDL ( язык определения данных ), он не требует фиксации, чтобы сделать изменения постоянными. И это причина того, что строки, удаленные с помощью truncate, нельзя было откатить. С другой стороны, DELETE
- это оператор DML ( язык манипулирования данными ), поэтому для его постоянного действия требуется явная фиксация.
TRUNCATE
всегда удаляет все строки из table, оставляя таблицу пустой и структуру таблицы нетронутой, тогда как DELETE
может удалить условно, если используется предложение where.
УСЕЧЕННЫЙ быстро, УДАЛИТЕ, является медленным.
, Хотя, УСЕЧЕННЫЙ не имеет никакой отслеживаемости.