Sintaxa
DROP TABLE tbl_name ...
Descriere
DROP TABLE
elimină unul sau mai multe tabele. Trebuie să aveți privilegiul DROP
pentru fiecare tabel. Toate datele din tabel și definiția tabelului sunt eliminate, precum și declanșatoarele asociate tabelului, așa că fiți atenți la această afirmație! Dacă oricare dintre tabelele numite în lista argumentelor nu există, MariaDB returnează o eroare indicând după nume care tabele inexistentenu a putut să scadă, dar scade și toate tabelele din listă care există.,Important: când un tabel este abandonat, privilegiile utilizatorilor de pe masă nu sunt abandonate automat. Vezi GRANT.
dacă un alt fir utilizează tabelul într-o tranzacție explicită sau într-o tranzacție autocommit, atunci firul obține un blocaj de metadate (MDL) pe masă. Declarația DROP TABLE
va aștepta în starea firului „așteptând blocarea metadatelor din tabel” până când MDL este eliberat. MDL-urile sunt eliberate în următoarele cazuri:
- dacă un MDL este achiziționat într-o tranzacție explicită, atunci MDL-ul va fi eliberat la încheierea tranzacției.,
- dacă un MDL este achiziționat într-o tranzacție autocommit, atunci MDL-ul va fi eliberat la sfârșitul extrasului.
- tabelele tranzacționale și non-tranzacționale sunt tratate la fel.
Rețineți că pentru un tabel partiționat, DROP TABLE
elimină permanent tabledefinition, toate partițiile, și toate datele care au fost stocate inthose partiții. De asemenea, elimină definiția de partiționare (.par) fișierasociate cu tabelul scăzut.
pentru fiecare tabel de referință, DROP TABLE
scade un tabel temporar cu acest nume, dacă există., Dacă nu există și cuvântul cheie TEMPORARY
nu este utilizat, acesta scade un tabel non-temporar cu același nume, dacă există. Cuvântul cheie TEMPORARY
asigură că un tabel non-temporar nu va fi abandonat accidental.
utilizați IF EXISTS
pentru a preveni apariția unei erori pentru tabelele care nuexistă. Un NOTE
este generat pentru fiecare tabel inexistent atunci când se utilizeazăIF EXISTS
. Consultați afișarea avertismentelor.
dacă o cheie străină face referire la acest tabel, tabelul nu poate fi abandonat., În acest caz, este necesar să renunțați mai întâi la cheia străină.
RESTRICT
și CASCADE
sunt permise pentru a face portare din alte sisteme de baze de date mai ușor. În MariaDB, nu fac nimic.
comentariul dinaintea numelor tabelelor (/*COMMENT TO SAVE*/
) este stocat în Jurnalul binar. Această caracteristică poate fi utilizată de instrumentele de replicare pentru a trimite mesajele interne.
este posibil să specificați numele tabelelor ca db_name
.tab_name
. Acest lucru este util pentru a șterge tabele din mai multe baze de date cu o singură declarație., A se vedea identificatorul de calificare pentru detalii.
privilegiul DROP este necesar pentru a utiliza DROP TABLE
pe tabele non-temporare. Pentru tabelele temporare, nu este necesar niciun privilegiu, deoarece astfel de tabele sunt vizibile numai pentru sesiunea curentă.
Notă: DROP TABLE
automat se angajează activ curent tranzacție,dacă nu utilizați TEMPORARY
cuvinte cheie.
MariaDB începând cu 10.5.4
Din MariaDB 10.5.,4, DROP TABLE
șterge în mod fiabil resturile de masă din interiorul unui motor de stocare, chiar dacă fișierul .frm
lipsește. Înainte de aceasta, un fișier .frm
lipsă ar duce la eșecul declarației.
MariaDB începând cu 10.3.1
așteptați/NOWAIT
setați timpul de așteptare de blocare. A se vedea, așteptați și NOWAIT.
DROP TABLE în replicare
DROP TABLE
are următoarele caracteristici în replicare:
-
DROP TABLE DACĂ EXISTĂ
sunt mereu conectat., -
DROP TABLE
faraDACĂ EXISTĂ
pentru tabele care nu există nu sunt scrise în jurnalul binar. - Dropping de
tabele temporare
sunt prefixate în jurnalul cutemporar
. Aceste picături sunt înregistrate numai atunci când se execută declarație sau replicare modul mixt., - Un
DROP TABLE
declarație poate fi conectat cu până la 3 diferiteDROP
declarații:DROP TABEL TEMPORAR list_of_non_transactional_temporary_tables
DROP TABEL TEMPORAR list_of_transactional_temporary_tables
DROP TABLE list_of_normal_tables
Pornind de la MariaDB 10.0.,8, DROP TABLE
pe maestru este tratat pe sclavi ca DROP TABLE DACĂ EXISTĂ
. Puteți schimba acest lucru setând slave-ddl-exec-mode la STRICT
.
Dropping un #sql intern -… Tabel
dacă procesul mysqld este ucis în timpul unui tabel ALTER, puteți găsi un tabel numit # sql -… în directorul de date. În MariaDB 10.3, tabelele InnoDB cu acest prefix vor fi șterse automat în timpul startup.In MariaDB 10.4 ne vom asigura că aceste tabele temporare vor fi întotdeauna șterse automat.,
Dacă doriți să ștergeți unul dintre aceste tabele în mod explicit puteți face acest lucru folosind următoarea sintaxă:
DROP TABLE `#mysql50##sql-...`;
atunci Când rulează un ALTER TABLE…ALGORITHM=INPLACE
care reconstruiește masă, InnoDB va crea un intern #sql-ib
masă. Pentru aceste tabele, fișierul .frm
va fi numit altceva. În scopul de a scădea astfel un tabel după un accident de server, trebuie să redenumiți #sql*.frm
file pentru a se potrivi #sql-ib*.ibd
fișier.,cel mai bun mod de a renunța la toate tabelele dintr-o bază de date este executândDROP DATABASE
, care va renunța la baza de date în sine și la toate tabelele din ea.
cu toate Acestea, dacă doriți să renunțe la toate tabelele din baza de date, dar, de asemenea, doriți să păstrați baza de date în sine și orice alte non-masă de obiecte în ea, atunci ai nevoie pentru a executa DROP TABLE
să renunțe la fiecare masă. Puteți construi aceste DROP TABLE
comenzi prin interogarea TABLES
masa în information_schema
baza de date., De exemplu:
SELECT CONCAT('DROP TABLE IF EXISTS `', TABLE_SCHEMA, '`.`', TABLE_NAME, '`;')FROM information_schema.TABLESWHERE TABLE_SCHEMA = 'mydb';
Exemple
DROP TABLE Employees, Customers;
Note
Feriți-vă că DROP TABLE
poate scadea ambele tabele și secvențe. Acest lucru se face în principal pentru a permite instrumentelor vechi precum mysqldump să lucreze cu secvențe.
A se vedea, de asemenea,
- Creare tabel
- ALTER TABLE
- afișare Creare tabel
- secvență picătură
- variabilă slave-ddl-exec-mode.