Lệnh ALTER trong MySQL



Lệnh ALTER trong MySQL là thực sự hữu ích khi bạn muốn thay tên cho một bảng, cho bất kỳ trường nào hoặc nếu bạn muốn thêm hoặc xóa một cột đang tồn tại trong một bảng.

Đầu tiên, tạo một bảng hocphik61:

//Lua chon co so du lieu
USE sinhvien;
//Tao bang hocphik61CREATE TABLE hocphik61 (
   ten VARCHAR(40),
   hocphi  INT
);//Hien thi tat ca cac cot trong bang hocphik61
SHOW COLUMNS FROM hocphik61;
//ket qua la:
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| ten     | varchar(40) | YES  |     | NULL    |       |
| hocphi  | int(11)     | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+

Xóa, thêm hoặc tái định vị một cột trong MySQL

Giả sử bạn muốn xóa một cột đang tồn tại ten từ bảng MySQL trên, thì bạn sử dụng mệnh đề DROP cùng với lệnh ALTER như sau:

ALTER TABLE hocphik61  DROP ten;

Một lệnh DROP sẽ không làm việc nếu cột chỉ nằm ở bên trái của bảng.

Để thêm một cột, sử dụng ADD và xác định định nghĩa cột. Lệnh sau phục hồi cột ten cho bảng hocphik61:

ALTER TABLE hocphik61 ADD ten VARCHAR(40);

Sau khi thông báo lệnh này, bảng hocphik61 sẽ chứa cùng hai cột như nó đã chứa khi bạn lần đầu tạo bảng đó, nhưng sẽ không có cùng cấu trúc. Đó là bởi vì các cột mới được thêm vào phần cuối bảng theo mặc định. Vì thế, ngay cả khi lúc ban đầu cột ten là cột đầu tiên trong bảng hocphik61, thì bây giờ nó là cột cuối cùng.

SHOW COLUMNS FROM hocphik61;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| hocphi  | int(11)     | YES  |     | NULL    |       |
| ten     | varchar(40) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+

Để chỉ rằng bạn muốn một cột tại một vị trí cụ thể bên trong một bảng, hoặc sử dụng FIRST để làm nó trở thành cột đầu tiên hoặc AFTER ten_cot để chỉ rằng cột mới nên được đặt sau cột ten_cot. Bạn thử các lệnh ALTER TABLE sau, sử dụng SHOW COLUMNS sau mỗi lệnh để xem hiệu quả của mỗi lệnh đó:

ALTER TABLE hocphik61 DROP ten;
ALTER TABLE hocphik61 ADD ten VARCHAR(40) FIRST; //them cot ten thanh cot dau tien
ALTER TABLE hocphik61 DROP ten;
ALTER TABLE hocphik61 ADD ten VARCHAR(40) AFTER hocphi; //them cot ten sau cot hocphi

FIRST và AFTER specifier chỉ làm việc với mệnh đề ADD. Điều này nghĩa là nếu bạn muốn tái định vị một cột đang tồn tại bên trong một bảng, đầu tiên bạn phải DROP nó và sau đó ADD nó tại vị trí mới.

Thay đổi một định nghĩa hoặc tên cột trong MySQL

Để thay đổi một định nghĩa cột, sử dụng mệnh đề MODIFY hoặc CHANGE cùng với lệnh ALTER. Ví dụ, để thay đổi cột ten từ VARCHAR(40) thành VARCHAR(20), bạn sử dụng:

ALTER TABLE hocphik61 MODIFY ten VARCHAR(20);

Với CHANGE, cú pháp có hơi chút khác biệt. Sau từ khóa CHANGE, bạn xác định cột bạn muốn thay đổi, sau đó xác định định nghĩa mới, bao gồm tên mới của nó. Bạn xem ví dụ:

ALTER TABLE hocphik61 CHANGE ten hoten VARCHAR(60);

Nếu bây giờ bạn sử dụng CHANGE để chuyển đổi hoten từ VARCHAR(60) về VARCHAR(40) mà không thay đổi tên cột, lệnh sẽ là:

ALTER TABLE hocphik61 CHANGE hoten hoten VARCHAR(40);

Tác động của ALTER TABLE trên các giá trị NULL và DEFAULT

Khi bạn MODIFY hoặc CHANGE một cột, bạn cũng có thể xác định có hay không cột đó có thể chứa các giá trị NULL và giá trị DEFAULT của nó là gì. Thực tế, nếu bạn không làm điều này, MySQL sẽ tự động gán các giá trị cho các thuộc tính này.

Trong ví dụ sau, cột NOT NULL sẽ có giá trị mặc định là 4000000.

ALTER TABLE hocphik61 
    MODIFY hocphi BIGINT NOT NULL DEFAULT 4000000;

Nếu bạn không sử dụng lệnh trên, thì MySQL sẽ điền các giá trị NULL vào tất cả các cột.

Thay đổi giá trị DEFAULT của một cột trong MySQL

Bạn có thể thay đổi một giá trị mặc định cho bất kỳ cột nào bởi sử dụng lệnh ALTER. Bạn thử ví dụ sau:

ALTER TABLE hocphik61 ALTER hocphi SET DEFAULT 3000000;//hien thi cac cot
SHOW COLUMNS FROM hocphik61;//ket qua la:
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| ten     | varchar(40) | YES  |     | NULL    |       |
| hocphi  | int(11)     | YES  |     | 3000000 |       |
+---------+-------------+------+-----+---------+-------+

Bạn có thể xóa ràng buộc DEFAULT từ bất kỳ cột nào bởi sử dụng mệnh đề DROP cùng với lệnh ALTER.

ALTER TABLE hocphik61 ALTER hocphi DROP DEFAULT;//hien thi cac cot
SHOW COLUMNS FROM hocphik61;//ket qua la:
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| ten     | varchar(40) | YES  |     | NULL    |       |
| hocphi  | int(11)     | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+

Thay đổi một kiểu bảng trong MySQL

Bạn có thể thay đổi một kiểu bảng bởi sử dụng TYPE cùng với lệnh ALTER. Bạn xem ví dụ sau để thay đổi hocphik61 thành kiểu bảng MyISAM.

Để tìm kiểu bảng hiện tại, sử dụng lệnh SHOW TABLE STATUS.

ALTER TABLE hocphik61 ENGINE = MyISAM;

Để tìm kiểu bảng hiện tại, sử dụng lệnh SHOW TABLE STATUS.

SHOW TABLE STATUS LIKE 'hocphik61'

Kết quả giống như sau:

Lệnh ALTER trong MySQL-PHP

Thay tên cho bảng trong MySQL

Để thay tên cho một bảng, sử dụng tùy chọn RENAME của lệnh ALTER TABLE. Bạn xem ví dụ sau để đổi tên hocphik61 thành hocphik62.

ALTER TABLE hocphik61 RENAME TO hocphik62;

Bạn có thể sử dụng lệnh ALTER để tạo và xóa INDEX trên một MySQL file. Chúng ta sẽ xem tính năng này trong chương sau.

Các bài học MySQL phổ biến khác tại VietJack: