[SQL] DELETE a TRUNCATE

0

Jaka jest roznica miedzy tymi dwiema komendami? Obie kasuja wszystko z tabeli nie naruszajac jej struktury. Mozna wiec uzywac ich zamiennie?

Jak mozna kasowac baze danych? Jesli pisze: DROP DATABASE baza (MsSQL 2000) to mam komunikat ze nie moge jej skasowac poniewaz jest aktualnie w uzyciu?

Pozdro to all!

0

Przychodzą mi na myśl dwie możliwe różnice:
Delete można zastosować do konkretnych rekordów, a Truncate kasuje całość danych z tabeli
Truncate jest "dokładniejsze", kasuje m.in. takie rzeczy jak następny indeks przy autonumerowniu itp.

0

TRUNCATE sluzy do czyszczenia tabeli - to polecenie jest szybsze od:

DELETE FROM tabela;

Ot cala tajemnica.

0

Kilka istotnych roznic:

Polecenie SQL > TRUNCATE:

  • jest poleceniem typu DDL (Data Definition Language), z tego powodu dla tego polecenia nie mają zastosowania takie polecenia jak: COMMIT i ROLLBACK
    (wyjątkami są tutaj PostgreSQL i Microsoft SQL Server, których implementacja polecenia TRUNCATE pozwala na użycie polecenia w transakcji)
  • nie można cofnąć operacji usunięcia rekordów, następuje ona automatycznie i jest nieodwracalna (poza powyższymi wyjątkami)
  • usuwa wszystkie rekordy z tabeli, nie można ograniczyć rekordów do usunięcia
  • zwalnia zajmowane miejsce przez dane w tabeli (w przestrzeni tabel TABLESPACE - na dysku)
  • powoduje wyzerowanie wartości SEQUENCE przypisanej do tabeli. Można jednak zastosować opcje: RESTART IDENTITY lub CONTINUE IDENTITY
  • TRUNCATE działa szybciej niż DELETE
  • w systemie Oracle TRUNCATE jest niejawnie poprzedzony i zatwierdzany poleceniem COMMIT

Polecenie SQL > DELETE:

  • jest poleceniem typu DML (Data Manipulation Language), z tego powodu dla tego polecenia mają zastosowanie takie polecenia jak: COMMIT i ROLLBACK
  • można cofnąć operację usunięcia rekordów za pomocą polecenia ROLLBACK
  • usuwa wszystkie lub niektóre rekordy z tabeli, można ograniczyć rekordy do usunięcia za pomocą klauzuli WHERE
  • nie zwalnia zajmowanego miejsca przez dane w tabeli (w przestrzeni tabel TABLESPACE - na dysku)
  • nie powoduje wyzerowania wartości SEQUENCE przypisanej do tabeli
  • DELETE działa wolniej niż TRUNCATE

ps: "Jesli pisze: DROP DATABASE baza (MsSQL 2000) to mam komunikat ze nie moge jej skasowac poniewaz jest aktualnie w uzyciu?" - jezeli zatrzymasz dzialanie bazy danych, to powinno udac sie polecenie, ktore wykonujesz.

pozdr

0

Ile razy można przepisywać internet od nowa? :)
Nagroda złotej łopaty się należy :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1