Mysql 6

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 la punctul 6.5.3.1, «Silent definiții coloana modificări.“ 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 tabela originală este ștearsă, iar cea 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 o 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 poate mări viteza de reconstrucție a porțiunii index (care este cea mai lenta parte a procesului de recuperare în tabel) prin setarea myisam_sort_buffer_size variabilă suficient de mare valoare.

Sunt necesare privilegii ALTER pentru a utiliza instrucțiunea ALTER TABLE. INSERT și CREATE pentru acest tabel.

Opțiunea IGNORE este o extensie a MySQL la ANSI SQL92. Acesta controlează funcționarea ALTER TABLE dacă există chei unice duplicate în tabelul nou. Dacă opțiunea IGNORE nu este specificată, atunci pentru această copie procesul este întrerupt și procesul este derulat înapoi. Dacă este specificat IGNORE, atunci pentru rândurile cu duplicate de taste unice se utilizează numai prima linie, iar restul sunt șterse.

Puteți rula mai multe expresii ADD. ALTER. DROP și CHANGE în aceeași comandă ALTER TABLE. Aceasta este o extensie a MySQL la ANSI SQL92, unde este permisă doar una din expresiile menționate în aceeași comandă ALTER TABLE.

CHANGE opțiuni col_name. DROP col_name și DROP INDEX sunt, de asemenea, extensii MySQL la ANSI SQL92.

Opțiunea MODIFY este o extensie Oracle pentru comanda ALTER TABLE.

Cuvântul opțional COLUMN este "zgomot alb" și poate fi omis.

Dacă utilizați ALTER TABLE table_name RENAME TO new_name fără alte opțiuni, MySQL pur și simplu redenumește fișierele corespunzătoare tabelului specificat. În acest caz, nu este nevoie să creați un tabel temporar. Vedeți Secțiunea 6.5.5, "Sintaxă operator RENAME TABLE".

Expresia create_definition pentru ADD și CHANGE utilizează aceeași sintaxă ca și pentru CREATE TABLE. Rețineți că această sintaxă include numele coloanei și nu doar tipul acesteia. Vedeți Secțiunea 6.5.3, "Sintaxă pentru instrucțiunea CREATE TABLE".

Puteți redenumi coloana utilizând expresia CHANGE column_name create_definition. Pentru a face acest lucru, trebuie să specificați numele vechii și noile coloane și tipul acestora la ora curentă. De exemplu, pentru a redenumi coloana INTEGER de la a la b. puteți face următoarele:

Dacă schimbați tipul coloanei, dar nu și numele acesteia, sintaxa expresiei CHANGE încă mai impune specificarea ambelor nume de coloane, chiar dacă acestea sunt identice. De exemplu:







Cu toate acestea, din moment ce MySQL versiunea 3.22.16a puteți utiliza expresia MODIFY pentru a modifica tipul de coloană fără a o redenumi:

Când se folosește schimbarea sau modificarea, în scopul de a reduce lungimea coloanei la care o porțiune de indice (de exemplu, indicele coloanei primele 10 caractere VARCHAR), se poate face o coloană mai scurtă decât numărul de simboluri indexate.

Dacă schimbați tipul de coloană utilizând CHANGE sau MODIFY, MySQL încearcă să convertească datele într-un tip nou cât mai corect posibil.

În MySQL versiunea 3.22 și mai târziu, puteți utiliza FIRST sau ADD. După numele coloanei, pentru a adăuga o coloană la o poziție specificată într-un rând de tabelă. Implicit, coloana este adăugată la sfârșit. Începând cu MySQL 4.0.1, puteți utiliza și următoarele cuvinte cheie FIRST și AFTER în opțiunile CHANGE sau MODIFY.

Opțiunea ALTER COLUMN setează coloana la o nouă valoare implicită sau o șterge pe cea veche. Dacă valoarea veche este eliminată în mod prestabilit și această coloană poate fi NULL. atunci noua valoare implicită este NULL. Dacă coloana nu poate fi NULL. MySQL atribuie valoarea implicită așa cum este descris în secțiunea 6.5.3, "Sintaxa instrucțiunilor CREATE TABLE".

Opțiunea DROP INDEX șterge indexul. Aceasta este o extensie a MySQL la ANSI SQL92. Consultați secțiunea 6.5.8, "Sintaxă operator DROP INDEX".

Dacă coloanele sunt șterse din tabel, aceste coloane sunt, de asemenea, șterse din orice index pe care sunt incluse ca parte din. Dacă toate coloanele care alcătuiesc indexul sunt șterse, atunci acest index este, de asemenea, șters.

Dacă tabela conține o singură coloană, această coloană nu poate fi ștearsă. În schimb, puteți șterge acest tabel utilizând comanda DROP TABLE.

Opțiunea DROP PRIMARY KEY șterge indexul principal. Dacă în acest tabel nu există un astfel de indice, primul index UNIQUE din acest tabel este șters. (MySQL marchează prima cheie unică UNIQUE ca tastă primară KEY PRIMARY dacă nu a fost specificată explicit nici o altă cheie primară KEY PRIMARY). Când adăugați UNIQUE INDEX sau KEY PRIMARY la un tabel, acestea sunt stocate în fața celorlalte chei non-unice, astfel încât să puteți identifica cheile duplicate cât mai curând posibil.

Opțiunea ORDER BY vă permite să creați un nou tabel cu rândurile plasate în ordinea specificată. Rețineți că tabela creată nu va stoca această ordine de linii după operațiile de inserare și ștergere. În unele cazuri, această caracteristică poate facilita operația de sortare în MySQL dacă tabelul are un aspect de coloană pe care doriți să îl aveți în viitor. Această opțiune este utilă în special dacă știți în avans o anumită ordine în care liniile vor fi solicitate în avans. Folosind această opțiune după conversii semnificative ale tabelului oferă posibilitatea de a obține o performanță mai mare.

Când utilizați comanda ALTER TABLE pentru tabelele MyISAM, toți indexurile non-unici sunt creați într-un pachet separat (similar cu REPAIR). Datorită acestui lucru, comanda ALTER TABLE va funcționa mai rapid dacă există mai mulți indici.

Începând cu MySQL 4.0, caracteristica de mai sus poate fi activată în mod explicit. Comanda ALTER TABLE. DISABLE KEYS blochează actualizările MySQL pentru indici non-unici pentru tabelele MyISAM. După aceasta, puteți utiliza comanda ALTER TABLE. ENABLE KEYS pentru a recrea indiciile lipsă. Deoarece MySQL face acest lucru cu un algoritm special care este mult mai rapid decât introducerea tastelor unul câte unul, tastele de blocare pot da o accelerație semnificativă pe rețelele mari de inserție.

Folosind funcția C API mysql_info (). puteți determina câte înregistrări au fost copiate și, de asemenea (când utilizați IGNORE) - câte înregistrări au fost șterse din cauza duplicării valorilor cheilor unice.

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ă din INTEGER la tinyint NOT NULL (lăsând numele la fel), și pentru a schimba coloana b de la CHAR (10) până la CHAR (20) redenumirea 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 să fie 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 acestei coloane 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 = #. Consultați secțiunea 5.5.6, "Sintaxa comenzii 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.







Articole similare

Trimiteți-le prietenilor: