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.