6.5.4 Sintaxa instrucțiunii ALTER TABLE
În cazul în care instrucțiunea ALTER TABLE este folosită pentru a determina schimbări în coloana de tip, dar DESCRIBE tbl_name indică faptul că coloana nu este schimbat, este posibil, MySQL ignoră această modificare, unul dintre motivele descrise în secțiunea 6.5.3.1 modificările Tăcute definițiile coloanelor. De exemplu, dacă încercați să modificați coloana VARCHAR la CHAR, MySQL va continua să utilizeze VARCHAR. Dacă acest tabel conține alte coloane cu o lungime variabilă.
Instrucțiunea ALTER TABLE creează o copie temporară a tabelului sursă la momentul executării. Modificarea necesară se face pe copie, atunci tabelul original este șters, iar cel nou este redenumit. Aceasta se face pentru a ajunge automat la tabelul nou cu toate actualizările, cu excepția celor eșuate. În timpul executării tabelului ALTER, tabela sursă poate fi citită de alți clienți. Operațiile de actualizare și înregistrare din acest tabel sunt suspendate până când este pregătit un nou tabel.
Trebuie remarcat faptul că atunci când se utilizează orice altă opțiune pentru ALTER TABLE cu excepția RENAME. MySQL va crea întotdeauna un tabel temporar, chiar dacă datele, strict vorbind, nu trebuie copiate (de exemplu, când se schimbă numele coloanei). Cu toate acestea, planificăm să rezolvăm acest lucru în viitor, deoarece ALTER TABLE nu se execută atât de des, noi (dezvoltatorii MySQL) nu considerăm această sarcină o prioritate. Pentru tabelele MyISAM, puteți crește viteza de recreare a părții index (care este cea mai lentă parte din procesul de restaurare a tabelului) prin setarea variabilei myisam_sort_buffer_size la o valoare suficient de mare.
Următoarele sunt exemple care arată unele cazuri de utilizare a comenzii ALTER TABLE. Exemplul începe cu tabelul t1. care este creată după cum urmează:
Pentru a redenumi masa de la t1 la t2.
Pentru a schimba tipul de coloană de la INTEGER la TINYINT NOT NULL și a schimba tipul coloanei b de la CHAR (10) la CHAR (20), redenumind-o de la b la c.
Pentru a adăuga o nouă coloană TIMESTAMP numită d.
Pentru a adăuga un index la coloana d și a face coloana A o cheie primară:
Pentru a șterge coloana c.
Pentru a adăuga o nouă coloană numerică AUTO_INCREMENT cu numele c.
Rețineți că coloana c este indexată, deoarece coloanele AUTO_INCREMENT trebuie indexate, în plus, coloana c este declarată NU NULL. deoarece coloanele indexate nu pot fi NULL.
Când adăugați coloana AUTO_INCREMENT, valorile din această coloană sunt populate automat cu numere consecutive (când adăugați înregistrări). Primul număr de secvență poate fi setat executând comanda SET INSERT_ID = # înainte de ALTER TABLE sau utilizând opțiunea de tabelă AUTO_INCREMENT = #. Vezi secțiunea 5.5.6 Sintaxă pentru comanda SET.
Dacă coloana AUTO_INCREMENT este pentru tabelele MyISAM. nu se modifică, numărul secvenței rămâne același. Dacă ștergeți coloana AUTO_INCREMENT și apoi adăugați o altă coloană AUTO_INCREMENT, numerele vor începe din nou de la 1.