DROP DATABASE
Limbajul pentru definirea datelor (DDL: Data Definition Language) permite descrierea bazelor da date si a componentelor acestora. Pentru stergerea structurilor (baze de date, tabele, vizualizari), la nivelul limbajului DDL, este disponibila instructiunea DROP.
Stergerea unei baze de date se realizeaza cu ajutorul instructiunii DROP DATABASE. Prin stergerea unei baze de date, in mod automat, sunt sterse si tabelele care apartin acelei baze de date.
DROP {DATABASE | SCHEMA} [IF EXISTS] nume_baza_date
Utilizarea acestei instructiuni presupune existenta privilegiului DROP pentru baza de date care urmeaza a fi stearsa. Operatia de stergere a unei baze de date nu presupune si retragerea privilegiilor pentru acea baza de date. DROP SCHEMA este un sinonim pentru instructiunea DROP DATABASE.
mysql> DROP DATABASE IF EXISTS sakila; Query OK, 23 rows affected
In cazul in care se incearca stergerea unei baze de date care nu exista prin intermediul instructiunii DROP DATABASE, si nu este utilizata clauza IF EXISTS, este generat un mesaj de eroare (Can’t drop database ‘test’; database doesn’t exist).
mysql> DROP DATABASE test; ERROR 1008 (HY000): Can't drop database 'test'; database doesn't exist
DROP TABLE
Stergerea uneia sau mai multor structuri de tip tabel de la nivelul unei baze de date se realizeaza prin intermediul instructiunii DROP TABLE.
DROP [TEMPORARY] TABLE [IF EXISTS] nume_tabel1, nume_tabel2, ...
Pentru ca operatia sa se desfasoare cu succes este necesar privilegiul DROP pentru fiecare tabel care urmeaza a fi sters. La stergerea unui tabel sunt sterse si toate datele continute de acesta.
Daca unul din numele tabelelor precizate in lista de argumente nu exista, atunci se genereaza un mesaj de eroare, dar sunt sterse toate tabelele care exista. Daca este prezenta, clauza IF EXISTS inhiba mesajul de eroare care apare la incercarea de stergere a unui tabel care nu exista.
DROP TABLE IF EXISTS sakila.test, sakila.film_text; Query OK, 0 rows affected, 1 warning mysql> SHOW WARNINGS; +-------+------+-----------------------------+ | Level | Code | Message | +-------+------+-----------------------------+ | Note | 1051 | Unknown table 'sakila.test' | +-------+------+-----------------------------+ 1 row in set
Tabelul film_text din baza de date sakila a fost sters, chiar daca la nivelul listei de tabele din instructiunea DROP TABLE erau precizate nume de tabele care nu se gaseau in baza de date.
mysql> SHOW TABLES FROM sakila LIKE 'film%'; +--------------------------+ | Tables_in_sakila (film%) | +--------------------------+ | film | | film_actor | | film_category | | film_list | +--------------------------+ 4 rows in set
Operatia de stergere a unui tabel nu presupune si retragerea privilegiilor pentru acel tabel. Clauza TEMPORARY are urmatoarele efecte intr-o instructiune DROP TABLE: sunt sterse doar tabelele temporare, nu sunt verificate drepturile de acces pentru structurile sterse si nu sunt incheiate tranzactiile in desfasurare.
Daca se doreste stergerea tuturor datelor dintr-un tabel, cea mai rapida modalitate o reprezinta instructiunea TRUNCATE TABLE.
TRUNCATE [TABLE] nume_tabel
Instructiunea TRUNCATE sterge tabelul, dupa care il recreeaza, fiind mult mai rapida decat instructiunea DELETE. Pentru utilizarea instructiunii TRUNCATE este necesar privilegiul DROP pe tabelul pe care opereaza.
mysql> SELECT `auto_increment` -> FROM information_schema.tables -> WHERE table_schema = 'sakila' AND table_name = 'payment'; +----------------+ | auto_increment | +----------------+ | 16050 | +----------------+ 1 row in set
Stergerea inregistrarilor dintr-un tabel, cu ajutorul instructiunii TRUNCATE, este de preferat, daca se doreste si resetarea coloanelor de tip AUTO_INCREMENT.
mysql> TRUNCATE TABLE sakila.payment; Query OK, 0 rows affected
mysql> SELECT `auto_increment` -> FROM information_schema.tables -> WHERE table_schema = 'sakila' -> AND table_name = 'payment'; +----------------+ | auto_increment | +----------------+ | 1 | +----------------+ 1 row in set