MySQL este cea mai populară bază de date open source din lume, recunoscută pentru viteza și fiabilitatea sa. Acest articol analizează cum să ștergeți toate datele dintr-un tabel de baze de date MySQL și cum afectează câmpurile incrementale automate.
ștergeți și trunchiați
există două moduri de a șterge toate datele dintr-un tabel de baze de date MySQL.
TRUNCATE TABLE tablename;
aceasta va șterge foarte repede toate datele din tabel. În MySQL, tabelul este de fapt abandonat și recreat, de unde și viteza interogării. Numărul de rânduri șterse pentru tabelele MyISAM returnate este zero; pentru INNODB returnează numărul real șters.
DELETE FROM tablename;
aceasta șterge, de asemenea, toate datele din tabel, dar nu este la fel de rapid ca folosind metoda „trunchia tabelului”. În MySQL>= 4.0 numărul de rânduri șterse este returnat; în MySQL 3.23 numărul returnat este întotdeauna zero.
coloane de incrementare automată pentru tabelele MyISAM
Dacă aveți o coloană de cheie primară de incrementare automată în tabelul MyISAM, rezultatul va fi ușor diferit în funcție de metoda de ștergere pe care o utilizați. Când utilizați metoda „trunchiați tabelul”, valoarea semințelor de creștere automată va fi resetată la 1. Când utilizați metoda” ștergeți din”, semințele de creștere automată vor fi lăsate așa cum a fost înainte (de exemplu, dacă câmpul de creștere automată al ultimei înregistrări introduse a fost 123, următoarea înregistrare introdusă va fi setată la 124).
rețineți că acest lucru este valabil pentru MySQL>= 4.0; din citirea mea a paginii manual trunchia în MySQL 3.23 trunchia funcționează la fel ca șterge ceea ce ar însemna sămânța incrementare automată nu este resetat. În prezent nu am o bază de date 3.23 configurată pentru a o testa, astfel încât nu pot confirma acest lucru.
coloane de incrementare automată pentru tabelele INNODB
pentru tabelele INNODB, indiferent dacă utilizați metodele „trunchiați tabelul” sau „ștergeți din”, câmpul de incrementare automată nu va fi resetat. Dacă ați introdus 5 înregistrări într-un tabel nou, apoi ați șters toate înregistrările și ați introdus o altă înregistrare, câmpul ar avea o valoare de 6, indiferent de metoda pe care ați utilizat-o.
actualizare 17 Feb 2009: am scris inițial acest post când MySQL 4.0 a fost versiunea curentă. Tocmai am testat cele de mai sus acum pe un tabel INNODB folosind MySQL 5.0 și folosind TRUNCATE resetează câmpul de incrementare automată înapoi la implicit. Deci, fie comportamentul s-a schimbat la un moment dat, fie am fost incorect când am făcut afirmația de mai sus.
sunteți sigur că doriți să ștergeți toate datele?
înainte de a șterge toate datele dintr-o bază de date, trebuie să vă asigurați că intenționați cu adevărat să ștergeți toate datele. De multe ori plătește mai întâi la „SELECT * FROM tablename” sau „SELECT COUNT(*) FROM tablename” înainte de a face acest lucru pentru a verifica dacă este într-adevăr sigur să ștergeți toate datele. Poate chiar vrei să faci ceva de genul” șterge din tablename unde foo = ‘bar’ ” în schimb.