środa, 19 września 2018

MySQL – polecenie ALTER

MySQL – polecenie ALTER


Polecenie MySQL ALTER jest bardzo przydatne, gdy chcesz zmienić nazwę tabeli, dowolne pole tabeli lub chcesz dodać lub usunąć istniejącą kolumnę w tabeli.
Zacznijmy od utworzenia tabeli o nazwie test_tbl 
root@host# mysql -u root -p password;
Enter password:*******

mysql> use KURS;
Database changed

mysql> create table test_tbl
   -> (
   -> i INT,
   -> c CHAR(1)
   -> );
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM test_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   i   | int(11) | YES  |     |   NULL  |       |
|   c   | char(1) | YES  |     |   NULL  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.05 sec)

Usuwanie, dodawanie lub zmiana położenia kolumny

jeśli chcesz usunąć istniejącą kolumnę z powyższej tabeli MySQL, użyjesz klauzuli DROP wraz z poleceniem ALTER, jak pokazano poniżej 
mysql> ALTER TABLE test_tbl  DROP i;
DROP klauzula nie będzie działać, jeśli kolumna jest tylko jedna na lewo w tabeli.
Aby dodać kolumnę, użyj ADD i określ definicję kolumny. Następująca instrukcja przywraca kolumnę i do test_tbl -
mysql> ALTER TABLE test_tbl ADD i INT;
Po wydaniu tego polecenia tabela test będzie zawierała te same dwie kolumny, które miała przy pierwszym utworzeniu tabeli, ale nie będzie miała takiej samej struktury. Wynika to z faktu, że są nowe kolumny, które są domyślnie dodawane na końcu tabeli. Więc mimo że pierwotnie była pierwszą kolumną, teraz jest ostatnią.
mysql> SHOW COLUMNS FROM test_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   c   | char(1) | YES  |     |   NULL  |       |
|   i   | int(11) | YES  |     |   NULL  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Aby wskazać, że chcesz mieć kolumnę w określonej pozycji w tabeli, użyj opcji FIRST, aby ustawić ją jako pierwszą kolumnę lub AFTER nazwa_kolumny, aby wskazać, że nowa kolumna powinna zostać umieszczona po nazwie nazwa_kolumny.
Wypróbuj następujące instrukcje ALTER TABLE , używając SHOW COLUMNS po każdym działaniu, aby zobaczyć, jaki efekt ma każda z nich

ALTER TABLE test_tbl DROP i;
ALTER TABLE test_tbl ADD i INT FIRST;
ALTER TABLE test_tbl DROP i;
ALTER TABLE test_tbl ADD i INT AFTER c;

Parametry FIRST i AFTER działają tylko z klauzulą ​​ADD. Oznacza to, że jeśli chcesz zmienić położenie istniejącej kolumny w tabeli, musisz najpierw ją usunąć poleceniem DROP, a następnie ADD w nowej pozycji.

Zmiana definicji kolumny lub nazwy

Aby zmienić definicję kolumny, użyj klauzuli MODIFY lub CHANGE wraz z poleceniem ALTER.
Na przykład, aby zmienić kolumnę c z CHAR (1) na CHAR (10), możesz użyć następującego polecenia
mysql> ALTER TABLE test_tbl MODIFY c CHAR(10);

W przypadku CHANGE składnia jest nieco inna. Po słowie kluczowym CHANGE określasz kolumnę, którą chcesz zmienić, a następnie określasz nową definicję, która zawiera nową nazwę.
Wypróbuj następujący przykład
mysql> ALTER TABLE test_tbl CHANGE i j BIGINT;
Jeśli teraz użyjesz CHANGE, aby przekształcić j z BIGINT z powrotem na INT bez zmiany nazwy kolumny, instrukcja będzie wyglądać tak, jak pokazano poniżej
mysql> ALTER TABLE test_tbl CHANGE j j INT;

Efekt ALTER TABLE dla atrybutów wartości NULL i domyślnych - Podczas modyfikowania lub zmiany kolumny można również określić, czy kolumna może zawierać wartości NULL i jaka jest jego wartość domyślna. W rzeczywistości, jeśli tego nie zrobisz, MySQL automatycznie przydzieli wartości dla tych atrybutów.
Poniższy blok kodu jest przykładem, gdzie kolumna NOT NULL ma domyślnie wartość 100.
mysql> ALTER TABLE test_tbl
   -> MODIFY j BIGINT NOT NULL DEFAULT 100;
Jeśli nie użyjesz powyższego polecenia, MySQL zapełni wartości NULL we wszystkich kolumnach.

Zmiana domyślnej wartości kolumny

Możesz zmienić domyślną wartość dowolnej kolumny, używając polecenia ALTER.
Wypróbuj poniższy przykład.
mysql> ALTER TABLE test_tbl ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM test_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   c   | char(1) | YES  |     |   NULL  |       |
|   i   | int(11) | YES  |     |   1000  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Możesz usunąć domyślne ograniczenie z dowolnej kolumny, używając klauzuli DROP wraz z poleceniem ALTER.
mysql> ALTER TABLE test_tbl ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM test_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   c   | char(1) | YES  |     |   NULL  |       |
|   i   | int(11) | YES  |     |   NULL  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Zmiana typu tabeli

Można zmienić typ tabeli, używając klauzuli TYPE wraz z poleceniem ALTER. Wypróbuj poniższy przykład, aby zmienić typ tabeli test_tbl na MYISAM.
Aby znaleźć bieżący typ tabeli, użyj instrukcji SHOW TABLE STATUS.
mysql> ALTER TABLE test_tbl TYPE = MYISAM;
mysql>  SHOW TABLE STATUS LIKE 'test_tbl'\G
*************************** 1. row ****************
           Name: test_tbl
           Type: MyISAM
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2018-04-03 16:23:36
    Update_time: NULL
     Check_time: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

Zmiana nazwy tabeli

Aby zmienić nazwę tabeli, użyj opcji RENAME instrukcji ALTER TABLE.
Wypróbuj poniższy przykład, aby zmienić nazwę test_tbl na alter_tbl.
mysql> ALTER TABLE test_tbl RENAME TO alter_tbl;
Możesz użyć polecenia ALTER, aby utworzyć i usunąć polecenie INDEX na pliku MySQL. Omówimy szczegółowo to polecenie w następnym rozdziale.




Brak komentarzy:

Prześlij komentarz