Cú pháp cơ bản
ALTER TABLE ten_bang CHANGE ten_cot ten_cot DATETIME;
Lưu ý: Phải lặp lại tên cột hai lần (tên cũ, tên mới) ngay cả khi không đổi tên.
Ví dụ minh họa
Tạo bảng với cột DATE
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
LoginDate DATE
);
mysql> INSERT INTO DemoTable(LoginDate) VALUES('2019-01-21');
mysql> INSERT INTO DemoTable(LoginDate) VALUES('2018-05-01');
mysql> INSERT INTO DemoTable(LoginDate) VALUES('2017-12-31');
Dữ liệu gốc
+----+------------+ | Id | LoginDate | +----+------------+ | 1 | 2019-01-21 | | 2 | 2018-05-01 | | 3 | 2017-12-31 | +----+------------+
Thay đổi kiểu dữ liệu
mysql> ALTER TABLE DemoTable CHANGE LoginDate LoginDate DATETIME; Query OK, 3 rows affected (1.63 sec)
Kiểm tra cấu trúc bảng
mysql> DESC DemoTable; +-----------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+----------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | LoginDate | datetime | YES | | NULL | | +-----------+----------+------+-----+---------+----------------+
Lưu ý quan trọng
- Dữ liệu hiện có: Giá trị DATE sẽ tự động chuyển thành DATETIME với thời gian 00:00:00
- Khóa ngoại: Nếu cột là khóa ngoại, phải xóa FK trước, ALTER, rồi tạo lại FK
- Index: Index trên cột sẽ được tự động cập nhật
- Trigger/Stored Procedure: Có thể cần sửa đổi nếu tham chiếu kiểu dữ liệu
Cú pháp thay thế (MySQL 8.0+)
ALTER TABLE DemoTable MODIFY LoginDate DATETIME;
Cú pháp MODIFY ngắn gọn hơn, không cần lặp tên cột.
Chuyển ngược: DATETIME → DATE
ALTER TABLE DemoTable MODIFY LoginDate DATE;
Thời gian sẽ bị cắt bỏ, chỉ giữ ngày.