Złota zasada Murphy'ego - zasady określa ten kto ma złoto.
DDL - Język Definicji Danych
  |   ALTER TABLE  |   CREATE DATABASE  |   CREATE INDEX  |   CREATE TABLE  |  
| DROP DATABASE  |   DROP INDEX  |   DROP TABLE  |   RENAME TABLE  |  

Instrukcja ALTER TABLE

Instrukcja ALTER TABLE pozwala na zmianę struktury istniejącej tabeli: możesz dodawać lub usuwać kolumny, tworzyć lub usuwać indeksy, zmieniać typy lub kolejność istniejących kolumn oraz zmieniać nazwę kolumn lub tabel. Możesz też zmienić komentarz do tabeli lub jej typ.

ALTER [IGNORE] TABLE nazwa_tabeli parametry [, ...]
      [ORDER BY kolumna]
 
parametry:
 
      ADD [COLUMN] definicja_kolumny [FIRST | AFTER nazwa_kolumny ]
 lub  ADD [COLUMN] (definicja_kolumny, definicja_kolumny,...)
 lub  ADD INDEX [nazwa_indeksu] (nazwa_kolumny_indeksowanej,...)
 lub  ADD PRIMARY KEY (nazwa_kolumny_indeksowanej,...)
 lub  ADD UNIQUE [nazwa_indeksu] (nazwa_kolumny_indeksowanej,...)
 lub  ADD FULLTEXT [nazwa_indeksu] (nazwa_kolumny_indeksowanej,...)
 lub  ADD [CONSTRAINT symbol] FOREIGN KEY nazwa_indeksu 
                  (nazwa_kolumny_indeksowanej,...)
                  [definicja_referencji]
 lub  ALTER [COLUMN] nazwa_kolumny {SET DEFAULT literal | DROP DEFAULT}
 lub  CHANGE [COLUMN] stara_nazwa_kolumny definicja_kolumny
 lub  MODIFY [COLUMN] definicja_kolumny
 lub  DROP [COLUMN] nazwa_kolumny
 lub  DROP PRIMARY KEY
 lub  DROP INDEX nazwa_indeksu
 lub  RENAME [TO] nowa_nazwa_tabeli
 lub  opcje_tabeli

Jeżeli użyłeś polecenia ALTER TABLE do zmiany parametrów kolumny, a kolumna nie została zmieniona, to znaczy, że MySQL zignorował polecenie modyfikacji z powodu błędu. Np.: jeżeli próbujesz zmienić typ kolumny z VARCHAR na CHAR, to MySQL pozostawi typ VARCHAR jeżeli tabela zawiera inne kolumny typu VARCHAR.

ALTER TABLE działa przez stworzenie tymczasowej kopii oryginalnej tabeli. Zmiany przeprowadzane są na kopii, następnie oryginalna tabela jest usuwana, a tymczasowej zostaje zmieniona nazwa. Przeprowadzane jest to w taki sposób, że wszystkie zmiany są automatycznie przekierowywane do nowej tabeli, przez co nie występują żadne błędy związane z konfliktem dostępu. Podczas wykonywania polecenia ALTER TABLE oryginalna tabela może być odczytywana przez innych klientów. Uaktualnienia i zapisy do tabeli są odraczane do momentu, kiedy nowa tabela będzie gotowa:

  • aby używać polecenia ALTER TABLE, musisz mieć prawa do wydawania poleceń select, insert, delete, update, create i drop dotyczących tej tabeli;
     
  • opcja IGNORE kontroluje sposób, w jaki zachowuje się ALTER TABLE w przypadku, gdy pojawią się duplikaty w kluczach w nowej tabeli. Jeżeli IGNORE nie jest podany, to zmiany w kopii są w takim przypadku ignorowane. jeżeli w poleceniu wystąpi IGNORE i istnieją wiersze z tą samą wartość klucza, to używany jest tylko pierwszy wiersz, a pozostałe są usuwane;
     
  • możesz podać wiele klauzuli ADD, ALTER, DROP lub CHANGE w jednym poleceniu ALTER TABLE;
     
  • opcjonalne słowo COLUMN nie jest wymagane i może zostać pominięte;
     
  • jeżeli użyjesz ALTER TABLE nazwa_tabeli RENAME TO nowa_nazwa bez żadnych innych opcji, to MySQL po prostu zmieni nazwę pliku odpowiedniej tabeli nazwa_tabeli;
     
  • w klauzuli definicja_kolumny poleceń ADD i CHANGE stosuje się tą samą składnię, co w przypadku instrukcji CREATE TABLE. Pamiętaj, że składnia ta wymaga podania nie tylko typu kolumny, ale także jej nazwy;
     
  • możesz zmienić nazwę kolumny używając klauzuli CHANGE stara_nazwa_kolumny definicja_kolumny. Aby to zrobić, podaj starą i nową nazwę kolumny oraz jej aktualny typ. Np.: aby zmienić nazwę kolumny typu INTEGER z kolo_a na kol_b wykonaj następujące polecenie:
    ALTER TABLE tabela CHANGE kol_a kol_b INTEGER;
    Jeżeli chcesz zmienić typ kolumny pozostawiając jej nazwę, to możesz podać lub nie nową nazwę. Obie poniższe instrukcje są równoważne i dadzą ten sam efekt:
    ALTER TABLE tabela CHANGE kol_b kol_b BIGINT NOT NULL;
    ALTER TABLE tabela MODIFY kol_b BIGINT NOT NULL;

     
  • jeżeli używasz CHANGE lub MODIFY do skrócenia kolumny, dla której istnieje indeks tylko na części tej kolumny (np.: jeżeli masz założony indeks na pierwszych 10 znakach kolumny typu VARCHAR), nie możesz uczynić kolumny krótszej niż liczba znaków indeksowanych;
     
  • jeżeli zmieniasz typ kolumny przy użyciu CHANGE lub MODIFY, to MySQL dokonuje konwersji danych do nowego typu o ile to jest tylko możliwe;
     
  • opcje FIRST i ADD ... AFTER nazwa_kolumny umożliwiają dodanie kolumny na wskazanej pozycji; domyślnie nowa kolumna wstawiana jest jako ostatnia;
     
  • ALTER COLUMN określa nową domyślną wartość kolumny lub likwiduje starą; jeżeli stara wartość domyślna zostanie usunięta, a kolumna akceptuje wartość NULL, to nową domyślną wartością będzie właśnie NULL; w przeciwnym wypadku MySQL przypisuje swoją wartość domyślną;
     
  • klauzula DROP INDEX usuwa indeks;
     
  • jeżeli kolumna jest usuwana z tabeli, to jest ona również usuwana z każdego indeksu, którego jest częścią; jeżeli usuwane są wszystkie kolumny składające się na jakiś indeks, jest on również usuwany;
     
  • klauzula DROP PRIMARY KEY usuwa klucz podstawowy; jeżeli taki nie istnieje, usuwana jest pierwsza kolumna typu UNIQUE w tabeli (jeżeli nie został podany wprost żaden indeks główny, to MySQL oznacza pierwszy klucz UNIQUE jako PRIMARY KEY);
     
  • klauzula ORDER BY pozwala na utworzenie nowej tabeli z wierszami w określonym porządku;
     
  • jeżeli użyjesz ALTER TABLE dla tabeli typu MyISAM, wszystkie nie unikalne indeksy są tworzone w oddzielnej grupie (tak jak w przypadku REPAIR); powinno to sprawić, że ALTER TABLE będzie znacznie szybsze w sytuacji, kiedy masz dużo indeksów;
     
  • obecnie klauzule FOREIGN KEY, CHECK oraz REFERENCES nie działają; składnia taka jest akceptowana tylko ze względu na zgodność, aby ułatwić przenoszenie kodu z innych serwerów SQL oraz aby była możliwość uruchamiania aplikacji, które tworzą tablę z referencjami;
     

Poniżej znajduje się kilka przykładów pokazujących użycie ALTER TABLE dla tabeli t1 utworzonej instrukcją:

CREATE TABLE t1 (a INTEGER, b CHAR(10));

Aby zmienić nazwę tabeli z t1 na t2:

ALTER TABLE t1 RENAME t2;

Aby zmienić typ kolumny a z INTEGER na TINYINT NOT NULL (pozostawiając tą samą nazwę) oraz zmienić typ kolumny b z CHAR(10) na CHAR(20) i jednocześnie zmienić jej nazwę z b na c:

ALTER TABLE t2 MODIFY a TINYINT NOT NULL,
                      CHANGE b c CHAR(20);

Aby dodać nową kolumn d o typie TIMESTAMP:

ALTER TABLE t2 ADD d TIMESTAMP;

Aby zaindeksować kolumnę d oraz stworzyć klucz główny z kolumny a:

ALTER TABLE t2 ADD INDEX (d),
                      ADD PRIMARY KEY (a);

Aby usunąć kolumnę c:

ALTER TABLE t2 DROP COLUMN c;

Aby dodać kolumnę c o typie całkowitym i własności AUTO_INCREMENT:

ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,
                      ADD INDEX (c);

Zauważ, że poindeksowaliśmy kolumnę c, gdyż kolumna AUTO_INCREMENT musi być indeksowana oraz zadeklarowaliśmy ją jako NOT NULL dlatego, że kolumna indeksowana nie może akceptować wartości NULL.

Kiedy dodasz kolumnę AUTO_INCREMENT, jest ona automatycznie wypełniana kolejnymi numerami. Możesz wskazać pierwszy numer wykonując polecenie SET INSERT_ID=# przed ALTER TABLE lub też używają opcji AUTO_INCREMENT = #.

 

Instrukcja CREATE DATABASE

CREATE DATABASE [IF NOT EXISTS] nazwa_bazy

Instrukcja CREATE DATABASE zakłada bazę o podanej nazwie. Aby założyć nową bazę musisz posiadać przywilej CREATE. Jeżeli próbujesz nadać tworzonej bzie nazwę, która już istnieje, to wystąpi błąd. Można się przed tym błędem zabezpieczyć używając klauzuli IF NOT EXISTS.

Baza w systemie MySQL jest zaimplementowana jako katalog dyskowy zawierający pliki odpowiadające tabelom bazy. Ponieważ zakładana baza nie posiada jeszcze tabel, to instrukcja CREATE DATABASE zakłada jedynie katalog.

Jeżeli ręcznie założysz swój katalog w katalogu danych (np. poleceniem mkdir), to MySQL go rozpozna i pojawi się on w liście baz polecenia SHOW DATABASES.

 

Instrukcja CREATE INDEX

 

Poleceni CREATE INDEX jest zamapowane jako polecenie ALTER TABLE tworzące indeks.

Zazwyczaj, wszystkie indeksy dla danej tabeli tworzy się w czasie tworzenia samej tabeli poleceniem CREATE TABLE. CREATE INDEX pozwala na dodawanie indeksów do już istniejących tabel.

Lista kolumn w formacie (kolumna1, kolumna2,...) tworzy indeks wielokolumnowy. Wartości indeksu tworzone są przez łączenie wartości podanych kolumn.

Dla kolumn typu CHAR i VARCHAR, indeksy mogą być tworzone tylko przez wykorzystanie do tego celu części kolumny, używając składni nazwa_kolumny(długość). (W przypadku kolumn typu BLOB i TEXT długość jest wymagana). Poniższe polecenie tworzy indeks używając 10 pierwszych znaków kolumny nazwisko:

 

Ponieważ większość nazwisk różni się na pierwszych 10 znakach, indeks taki nie powinien być wolniejszy niż ten utworzony z całości kolumny nazwisko. Poza tym, stosowanie indeksów opartych na części kolumny powoduje tworzenie mniejszych plików indeksów, co pozwala na ograniczenie zajętej powierzchni dyskowej oraz przyspieszenie wykonywania operacji INSERT.

Pamiętaj, że indeks możesz dodać tylko do kolumn akceptujących wartość NULL lub kolumn typu BLOB/TEXT.

Indeksy FULLTEXT mogą indeksować tylko kolumny typu VARCHAR oraz TEXT i tylko w tabelach MyISAM.

 

Instrukcja CREATE TABLE

span style="color: #ff0000;">'tekst''tekst'

Instrukcja CREATE TABLE tworzy tabele o podanej nazwie. Aby instrukcja została wykonana musisz posiadać przywilej CREATE do tabel.

Domyślnie tabela zakładana jest w bieżącej bazie. Jeżeli tabela już istnieje albo nie ma bieżącej lub podanej bazy danych, to wystąpi błąd wykonania. Nazwę tabel możesz podać w formacie nazwa_bazy.nazwa_tabeli, aby założyć tabelę w podanej bazie (może to być baza bieżąca lub dowolna inna).

Możesz użyć słowa kluczowego TEMPORARY aby utworzyć tabelę tymczasową, która będzie istniała tylko do końca bieżącego połączenia z bazą i po jego zakończeniu zostanie automatycznie usunięta. Kilka połączeń równoległych może używać tabel tymczasowych o tej samej nazwie bez ryzyka konfliktu. Nazwa tabeli tymczasowej może być również identyczna z nazwą istniejącej "normalnej" tabeli bez żadnego ryzyka: tabela "normalna" będzie niewidoczna do póki będzie istniała tabela tymczasowa o takiej samej nazwie.

Klauzula IF NOT EXISTS zapobiega powstaniu błędu w przypadku próby utworzenia tabeli już istniejącej. W tym przypadku nie jest porównywana struktura istniejącej tabeli z ta, która miała zostać utworzona.

Tabela zakładana jest jako plik w katalogu odpowiedniej bazy. Dla zakładanej tabeli może być utworzonych kilka plików:

     Plik:                Zawiera:                    _
     nazwa_tabeli.frm     definicję (strukturę) tabeli
     nazwa_tabeli.MYD     dane tabeli
     nazwa_tabeli.MYI     indeksy tabeli

Dokładniejszych informacji o typach kolumn szukaj w części Typy kolumn.

Jeżeli podasz jednocześnie NULL i NOT NULL, to przyjmowane jest NULL.

Kolumna typu integer może posiadać dodatkowy atrybut AUTO_INCREMENT. Jeżeli do takiej kolumny wprowadzisz wartość NULL, 0 lub nie podasz żadnej wartości, to otrzyma ona kolejną wartość całkowita (o 1 większą od największej występującej w tabeli). Numerowanie AUTO_INCREMENT rozpoczyna się od 1. W tabeli może wystąpić tylko 1 kolumna z atrybutem AUTO_INCREMENT, musi być ona indeksowana i nie może posiadać wartości domyślnej DEFAULT.

Klauzula DEFAULT podaje domyślna wartość dla kolumny. Może to być stała wartość lub funkcja, np.: NOW() lub CURRENT_DATE(), która domyślnie wstawi do kolumny zawsze bieżącą datę.

Jeżeli nie podasz klauzuli DEFAULT w definicji pola i wstawiając nowy wiersz do tabeli nie podasz dla niego wartości, to przyjmowane są następujące reguły:

  • jeżeli pole może przybierać wartość NULL, to będzie mu nadana wartość NULL;
     
  • jeżeli pole nie może przyjmować wartości NULL, to:
    • dla pól numerycznych domyślną wartością jest 0;
       
    • dla daty: 0000-00-00;
       
    • dla czasu: 00:00:00;
       
    • dla pól typu TIMESTAMP - bieżąca data i czas;
       
    • dla pól znakowych - pusty łańcuch znaków;
       
    • dla pól typu ENUM - pierwsza wartość z listy.
       

     

Dla przykładu załóżmy tabelę i wstawmy do niej 2 wiersze:

   CREATE TABLE t (pole INT NOT NULL);
   INSERT INTO t VALUES();
   INSERT INTO t VALUES(DEFAULT);

W obu przypadkach wstawiony wiesz będzie miał w kolumnie pole wartość 0.

COMMENT

Pozwala umieszczać komentarze dla kolumn i tabel wyświetlane w instrukcjach SHOW CREATE TABLE i SHOW FULL COLUMNS.

KEY, INDEX, PRIMARY KEY

Klauzule KEY i INDEX są synonimami.

Klauzula UNIQUE oznacza, że kombinacja wszystkich pól w kluczu każdego rekordu musi być unikalna w tabeli. Jeżeli będziesz próbował dodać rekord z wartością indeksu, który już istnieje, to wystapi błąd. Jedynym wyjątkiem jest sytuacja, kiedy do kolumny wstawiamy wartość NULL: może ona wystąpić w wielu wierszach w kolumnie będącej unikalnym indeksem.

Klauzula PRIMARY KEY jest indeksem unikalnym, który nie może przyjmować wartości NULL w żadnym polu. Jeżeli sam nie dodasz przy definicji klucza podstawowego klauzuli NOT NULL, to zrobi to automatycznie MySQL. Klucz podstawowy w tabeli może być tylko jeden. Jeżeli klucz podstawowy nie istnieje, a alokacja pyta o PRIMARY KEY, to MySQL zwróci pierwszy indeks z atrybutami UNIQUE i NOT NULL.

PRIMARY KEY może być indeksem wielokolumnowym. W takim przypadku klauzula PRIMARY KEY nie może wystąpić przy definicji kolumn klucza, ale musisz użyć składni PRIMARY KEY(kolumna_indeksu, ...).

Istniejące w tabeli indeksy możesz sprawdzić korzystając z instrukcji SHOW INDEX FROM nazwa_tabeli.

Dla kolumn typu CHAR i VARCHAR możesz zdefiniować indeks zawierający jedynie N początkowych znaków pola, np:

    CREATE TABLE test (pole VARCHAR(20), INDEX(pole(10)));

Słowa kluczowe ASC i DESC oznaczają sortowanie rosnące lub malejące klucza indeksu. W obecnej wersji MySQL są ignorowane.

AUTO_INCREMENT

Deklaruje początkową wartość AUTO_INCREMENT dla tabeli. Aby zresetować wartość AUTO_INCREMENT, możesz również użyć instrukcji:

    ALTER TABLE nazwa_tabeli AUTO_INCREMENT = n;
AVG_ROW_LENGTH

Szacunkowa średnia wielkość wiersz tabeli. Może być potrzebna jedynie w przypadku tabel większych niż 4 GB zawierających wiersze o zmiennej długości. Łącznie z klauzulą MAX_ROWS decyduje o wielkości tabeli. Przy mniejszych tabelach użycie tych klauzul może zwiększyć plik indeksów i spowolnić pracę z tabelą.

[DEFAULT] CHARACTER SET

Podaje domyślny zestaw znaków używanych w tabeli.

CHECKSUM

Ustaw ta wartość na 1, aby MySQL obliczał sumę kontrolną dla wszystkich wierszy tabeli. Czyni to pracę z tabela nieco wolniejszą, ale ułatwia wykrycie wszelkich błędów w tabeli.

COMMENT

Komentarz do tabeli (może zawierać do 60 znaków).

MAX_ROWS

Maksymalna ilość wierszy w tabeli. Nie jest sztywne ograniczenie, a raczej wskazówka, że tabela powinna pomieścić co najmniej podaną ilość wierszy.

MIN_ROWS

Minimalna ilość wierszy jaką planujesz zapisać w tabeli.

PACK_KEYS

Ustaw tą wartość na 1, aby mieć mniejsze pliki indeksowe. To na ogół zwalnia zapis do tabeli i przyspiesza odczyt z tabeli. Wartość 0 wyłącza pakowanie wszystkich kluczy indeksowych. Wartość DEFAULT powoduje, że pakowane są tylko klucze dla długich kolumn typu CHAR / VARCHAR.

Jeżeli nie używasz klauzuli PACK_KEYS, to pakowane są tylko klucze znakowa. Ustawienie PACK_KEYS=1 powoduje, że pakowane są również klucze numeryczne.

DELAY_KEY_WRITE

Ustaw wartość na 1, jeżeli chcesz aby aktualizacja indeksów była odłożona do momentu zamknięcia tabeli.

UNION

Klauzula UNION jest używana, jeżeli chcesz połączyć dane z szeregu tabel o identycznej strukturze tak, jakby to była jedna tabela. Może być użyte tylko z klauzulą MERGE. Aby korzystać z tej opcji musisz posiadać przywileje SELECT, UPDATE, i DELETE do wszystkich mapowanych tabel. Działanie tej klauzuli pokazuje przykład:

 
   mysql> CREATE TABLE t1 (
       ->    a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
       ->    tekst CHAR(20));
 
   mysql> CREATE TABLE t2 (
       ->    a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
       ->    tekst CHAR(20));
 
   mysql> INSERT INTO t1 (tekst) VALUES ('Test'),('tabeli'),('t1');
 
   mysql> INSERT INTO t2 (tekst) VALUES ('Test'),('tabeli'),('t2');
 
   mysql> CREATE TABLE polaczone (
       ->    a INT NOT NULL AUTO_INCREMENT,
       ->    tekst CHAR(20), INDEX(a))
       ->    TYPE=MERGE UNION=(t1,t2);
 
   mysql> SELECT * FROM polaczone;
   +---+---------+
   | a | tekst   |
   +---+---------+
   | 1 | Test    |
   | 2 | tabeli  |
   | 3 | t1      |
   | 1 | Test    |
   | 2 | tabeli  |
   | 3 | t2      |
   +---+---------+ 
 
SELECT ...

Użycie tej klauzuli pozwala na skopiowanie definicji kolumn z innej tabeli, np.:

    CREATE TABLE nowa_tabela SELECT * FROM org_tabela;

Tworzone są wszystkie kolumny podane w instrukcji SELECT, np.:

    mysql> CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT,
        ->        PRIMARY KEY (a), KEY(b))
        ->        SELECT b,c FROM test2;

utworzy tabelę z trzema kolumnami: a, b i c. Kolumny z klauzuli SELECT dokładane są zawsze na końcu listy kolumn.

Do nowo tworzonej tabeli dodawane są również wszystkie wiersze z tabeli użytej w klauzuli SELECT. We wstawionych wierszach nowe kolumny otrzymują swoje wartości domyślne, np:

 
    mysql> CREATE TABLE t1 (tekst CHAR(20));
 
    mysql> INSERT INTO t1 VALUES ('Test'),('tabeli'),('t1');
 
    mysql> CREATE TABLE t2 (
        -> x INT NULL , y INT DEFAULT 0
        -> ) SELECT tekst FROM t1;
 
    mysql> SELECT * FROM t2;
    +------+------+--------+
    | x    | y    | tekst  |
    +------+------+--------+
    | NULL |    0 | Test   |
    | NULL |    0 | tabeli |
    | NULL |    0 | t1     |
    +------+------+--------+ 
 

CREATE TABLE ... SELECT nie tworzy automatycznie żadnych indeksów. Jeżeli chcesz je założyć, to musisz to zadeklarować przed instrukcją SELECT, np.:

    CREATE TABLE t1 (UNIQUE (kol)) SELECT kol FROM tabela;

Na dołączanych kolumnach mogą być również wykonywane działania i używane aliasy, np.:

    CREATE TABLE tabela (a TINYINT NOT NULL) SELECT b+1 AS a FROM t1;

Aby utworzyć pustą tabelę o strukturze identycznej z już istniejącą użyj klauzuli LIKE. Klauzula kopiuje pełna strukturę istniejącej tabeli łącznie z wszystkimi atrybutami kolumn i indeksami.

    CREATE TABLE nowa_tabela LIKE stara_tabela;

 

Instrukcja DROP DATABASE

DROP DATABASE [IF EXISTS] nazwa_bazy

DROP DATABASE usuwa wszystkie tabele z bazy, po czym kasuję samą bazę.
Bądź BARDZO ostrożny przy użyciu tego polecenia!

DROP DATABASE zwraca liczbę usuniętych plików z katalogu bazy danych. Zazwyczaj jest to liczba tabel pomnożona przez 3, ponieważ każdej tabeli odpowiadają pliki*.MYD, *.MYI i *.FRM.

Polecenie DROP DATABASE usuwa z katalogu podanej bazy danych wszystkie pliki z następującymi:

.BAK , .DAT, .HSH, .ISD, .ISM, .ISM, .MRG, .MYD, .MYI, .DB i .FRM.

Usuwane są także wszystkie katalogi o nazwach składających się z dwóch cyfr (katalogi RAID).

Możesz użyć słów kluczowych IF EXISTS w celu uniknięcia błędu pojawiającego się, jeżeli baza danych nie istnieje.

 

Iinstrukcja drop index

DROP INDEX nazwa_indeksu ON nazwa_tabeli

DROP INDEX usuwa indeks o nazwie nazwa_indeksu z tabeli nazwa_tabeli. Polecenie DROP INDEX jest tylko mapowaniem polecenia ALTER TABLE.

 

Instrukcja DROP TABLE

DROP TABLE [IF EXISTS] nazwa_tabeli [, nazwa_tabeli,...]

Instrukcja DROP TABLE usuwa jedną lub więcej tabel. Wszystkie dane oraz definicje tabel są usuwane, więc bądź ostrożny przy jej stosowaniu!

Możesz użyć słów kluczowych IF EXISTS w celu uniknięcia błędu pojawiającego się, jeżeli tabela nie istnieje.

 

Instrukcja RENAME TABLE

RENAME TABLE nazwa_tabeli TO nowa_nazwa_tabeli
         [, nazwa_tabeli2 TO nowa_nazwa_tabeli2] ...

Instrukcja służy do zmiany nazwy jednej lub kilku tabel w bazie.

Możesz wykorzystać tą instrukcę np. do utworzenia nowej tabeli ze strukturą identyczną z juz istniejącą i zastąpienia istniejącej tabeli pustą:

   CREATE TABLE nowa_tabela (...);
   RENAME TABLE stara_tabela TO kopia_tabeli,
                 nowa_tabela TO stara_tabela;

Jeżeli zmieniasz nazwy kilku tabelom w jednej instrukcji, to zmiana wykonywana jest w kolejność od lewej strony do prawej. Jeżeli chcesz zamienić nazwy dwóm tabelom, to możesz do tego użyć takiej konstrukcji polecenia:

   RENAME TABLE stara_tabela TO tmp_tabela,
                 nowa_tabela TO stara_tabela,
                  tmp_tabela TO nowa_tabela;

Instrukcja może być również użyta do przeniesienia tabeli z jednej bazy do innej, np.:

   RENAME TABLE baza_1.nazwa_tabeli TO baza_2.nazwa_tabeli;

Podczas wykonywania instrukcji RENAME, nie może być zablokowana żadna tabela ani aktywna transakcja. Musisz posiadać przywileje ALTER i DROP do oryginalnej tabeli oraz CREATE i INSERT do nowej tabeli.

Jeżeli wystąpi jakikolwiek błąd, to cała instrukcja jest ignorowana.

« wstecz   dalej »