MySQLi - Lệnh ALTER
MySQLi ALTER Lệnh rất hữu ích khi bạn muốn thay đổi tên của bảng, bất kỳ trường nào trong bảng hoặc nếu bạn muốn thêm hoặc xóa một cột hiện có trong bảng.
Hãy bắt đầu với việc tạo một bảng có tên tutorials_alter.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tutorials_alter
-> (
-> i INT,
-> c CHAR(1)
-> );
Query OK, 0 rows affected (0.27 sec)
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i | int(11) | YES | | NULL | |
| c | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.02 sec)
Bỏ, thêm hoặc định vị lại cột
Giả sử bạn muốn bỏ một cột hiện có i từ bảng MySQLi phía trên thì bạn sẽ sử dụng DROP mệnh đề cùng với ALTER lệnh như sau:
mysql> ALTER TABLE tutorials_alter DROP i;
A DROP sẽ không hoạt động nếu cột là cột duy nhất còn lại trong bảng.
Để thêm một cột, hãy sử dụng ADD và chỉ định định nghĩa cột. Câu lệnh sau đây khôi phụci cột của tutorial_alter -
mysql> ALTER TABLE tutorials_alter ADD i INT;
Sau khi phát hành câu lệnh này, testalter sẽ chứa hai cột giống như khi bạn tạo bảng lần đầu tiên, nhưng sẽ không có cấu trúc hoàn toàn giống nhau. Đó là vì các cột mới được thêm vào cuối bảng theo mặc định. Và thậm chí lài ban đầu là cột đầu tiên trong mytbl, bây giờ nó là cột cuối cùng.
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)
Để chỉ ra rằng bạn muốn một cột ở một vị trí cụ thể trong bảng, hãy sử dụng FIRST để làm cột đầu tiên hoặc AFTER col_name để chỉ ra rằng cột mới nên được đặt sau col_name. Hãy thử các câu lệnh ALTER TABLE sau, sử dụng SHOW COLUMNS sau mỗi câu để xem mỗi câu có tác dụng gì -
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;
Các từ chỉ định FIRST và SAU chỉ hoạt động với mệnh đề ADD. Điều này có nghĩa là nếu bạn muốn đặt lại vị trí của một cột hiện có trong bảng, trước tiên bạn phải XÓA nó và sau đó THÊM nó ở vị trí mới.
Thay đổi định nghĩa hoặc tên cột
Để thay đổi định nghĩa của cột, hãy sử dụng MODIFY hoặc là CHANGEmệnh đề cùng với lệnh ALTER. Ví dụ: để thay đổi cộtc từ CHAR (1) đến CHAR (10), hãy thực hiện điều này -
mysql> ALTER TABLE tutorials_alter MODIFY c CHAR(10);
Với CHANGE, cú pháp có một chút khác biệt. Sau từ khóa CHANGE, bạn đặt tên cho cột mà bạn muốn thay đổi, sau đó chỉ định định nghĩa mới, bao gồm tên mới. Hãy thử ví dụ sau:
mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;
Nếu bây giờ bạn sử dụng CHANGE để chuyển đổi j từ BIGINT trở lại INT mà không thay đổi tên cột, câu lệnh sẽ giống như mong đợi -
mysql> ALTER TABLE tutorials_alter CHANGE j j INT;
Ảnh hưởng của ALTER TABLE đối với các thuộc tính giá trị rỗng và giá trị mặc định -
Khi bạn SỬA ĐỔI hoặc THAY ĐỔI một cột, bạn cũng có thể chỉ định xem cột đó có thể chứa giá trị NULL hay không và giá trị mặc định của nó là gì. Trên thực tế, nếu bạn không làm điều này, MySQLi sẽ tự động gán giá trị cho các thuộc tính này.
Đây là ví dụ, trong đó cột NOT NULL sẽ có giá trị 100 theo mặc định.
mysql> ALTER TABLE tutorials_alter
-> MODIFY j BIGINT NOT NULL DEFAULT 100;
Nếu bạn không sử dụng lệnh trên, thì MySQLi sẽ điền giá trị NULL vào tất cả các cột.
Thay đổi giá trị mặc định của cột
Bạn có thể thay đổi giá trị mặc định cho bất kỳ cột nào bằng lệnh ALTER. Hãy thử ví dụ sau.
mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c | char(10) | YES | | NULL | |
| j | bigint(20) | NO | | 1000 | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
Bạn có thể xóa ràng buộc mặc định khỏi bất kỳ cột nào bằng cách sử dụng mệnh đề DROP cùng với lệnh ALTER.
mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c | char(10) | YES | | NULL | |
| j | bigint(20) | NO | | NULL | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
Thay đổi loại bảng
Bạn có thể sử dụng một loại bảng bằng cách sử dụng TYPE mệnh đề cùng với lệnh ALTER.
Để tìm ra loại bảng hiện tại, hãy sử dụng câu lệnh SHOW TABLE STATUS.
mysql> SHOW TABLE STATUS LIKE 'tutorials_alter'\G
*************************** 1. row ***************************
Name: tutorials_alter
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2017-02-17 11:30:29
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
Đổi tên bảng
Để đổi tên bảng, hãy sử dụng RENAMEtùy chọn của câu lệnh ALTER TABLE. Hãy thử ví dụ sau để đổi tên tutorial_alter thành tutorial_bks.
mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;
Bạn có thể sử dụng lệnh ALTER để tạo và thả INDEX trên tệp MySQL. Chúng ta sẽ thấy tính năng này trong chương tiếp theo.