Đôi khi tên cột của chúng ta không có nghĩa nên buộc phải đổi tên hoặc đổi tên cột. MySQL cung cấp một cú pháp hữu ích có thể đổi tên một hoặc nhiều cột trong bảng. Một vài đặc quyền là cần thiết trước khi đổi tên cột, chẳng hạn như đặc quyền câu lệnh ALTER và DROP
MySQL có thể đổi tên tên cột theo hai cách
- Sử dụng câu lệnh CHANGE
- Sử dụng câu lệnh RENAME
Sử dụng Tuyên bố CHANGE
Sau đây là cú pháp minh họa việc đổi tên cột bằng câu lệnh CHANGE
Trong cú pháp này, chúng ta có thể thấy rằng chúng ta có thể yêu cầu xác định lại tất cả các thuộc tính cột. Cú pháp này cũng có thể cho phép chúng ta thay đổi kiểu dữ liệu của cột. Tuy nhiên, đôi khi câu lệnh CHANGE có thể có những nhược điểm sau
- Tất cả thông tin của các thuộc tính cột có thể không có sẵn cho ứng dụng đổi tên
- Có nguy cơ thay đổi loại dữ liệu ngẫu nhiên có thể dẫn đến mất dữ liệu của ứng dụng
Thí dụ
Hãy cho chúng tôi hiểu cách thức hoạt động của câu lệnh CHANGE trong MySQL để đổi tên một cột thông qua các ví dụ khác nhau. Giả sử chúng ta có một bảng tên là balance chứa dữ liệu như sau
Vì một số lý do, chúng tôi cần thay đổi tên cột account_num cùng với kiểu dữ liệu của nó. Trong trường hợp đó, trước tiên chúng ta kiểm tra cấu trúc của bảng bằng cách sử dụng câu lệnh MÔ TẢ như sau
Trong hình ảnh này, chúng ta có thể thấy kiểu dữ liệu của tên cột account_num là int. Và chúng tôi muốn thay đổi tên cột này là account_no và kiểu dữ liệu của nó là int thành varchar. Vì vậy, chúng ta có thể thực hiện câu lệnh dưới đây để làm điều này
Sau khi thực hiện lệnh trên, chúng ta có thể xác minh lại bằng cách sử dụng lại câu lệnh DESCRIBE. Trong hình bên dưới, tên cột account_num và kiểu dữ liệu của nó đã thay đổi thành công
Sử dụng câu lệnh RENAME
Để loại bỏ nhược điểm của câu lệnh CHANGE, MySQL đã đề xuất cú pháp sau minh họa việc thay đổi tên cột bằng cách sử dụng câu lệnh RENAME
Thí dụ
Hãy cho chúng tôi hiểu cách câu lệnh RENAME hoạt động trong MySQL để thay đổi tên cột thông qua các ví dụ khác nhau. Giả sử chúng ta có một bảng có tên khách hàng chứa dữ liệu sau
Giả sử chúng ta muốn thay đổi tên cột account bằng account_no mà không thay đổi kiểu dữ liệu của nó. Chúng ta có thể làm điều này bằng cách thực hiện câu lệnh dưới đây
Sau khi thực hiện lệnh trên, chúng ta có thể xác minh lại bằng cách sử dụng lại câu lệnh SELECT. Trong hình ảnh bên dưới, cột tên tài khoản đã thay đổi thành công
Đổi tên nhiều cột
MySQL cũng cho phép chúng tôi thay đổi nhiều tên cột trong một câu lệnh. Nếu chúng ta muốn đổi tên nhiều tên cột, chúng ta có thể sử dụng cú pháp dưới đây
HOẶC LÀ
Thí dụ
Giả sử chúng ta muốn thay đổi tên cột id và customer_name từ bảng khách hàng. Để thay đổi nhiều tên cột trong một câu lệnh, chúng ta có thể sử dụng câu lệnh như sau
Sau khi thực hiện lệnh trên, chúng ta có thể xác minh lại bằng cách sử dụng lại câu lệnh SELECT. Trong hình bên dưới, tên cột id và customer_name đã thay đổi thành công
Chúng ta hãy thay đổi lại tên cột hiện đang sửa đổi thông qua câu lệnh RENAME COLUMN như sau
Sau khi thực hiện lệnh trên, chúng ta có thể xác minh lại bằng cách sử dụng lại câu lệnh DESCRIBE. Trong hình bên dưới, tên cột cust_id và cust_name đã thay đổi thành công
Trong bài viết này, chúng ta đã tìm hiểu phần giới thiệu về cột RENAME trong MySQL và cách thay đổi tên cột trong một bảng cụ thể, cùng với một ví dụ truy vấn để hiểu rõ hơn
Để đổi tên một cột hiện có trong bảng MySQL, bạn cần kết hợp câu lệnh ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 3 với mệnh đề ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 4 hoặc ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 5
Hướng dẫn này sẽ giúp bạn học cách viết câu lệnh ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 3 với cả hai mệnh đề
Ví dụ: giả sử bạn có bảng ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 7 với cấu trúc sau
mysql> DESCRIBE students; +---------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+----------+------+-----+---------+-------+ | id | int | NO | PRI | NULL | | | name | tinytext | YES | | NULL | | | subject | tinytext | YES | | NULL | | | score | float | YES | | NULL | | | gender | tinytext | YES | | NULL | | +---------+----------+------+-----+---------+-------+ 5 rows in set (0.01 sec)
Như bạn có thể thấy từ tập hợp kết quả ở trên, bảng ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 7 có 5 cột (hoặc trường)
Mệnh đề ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 4 cho phép bạn thay đổi tên cột và kiểu dữ liệu của bảng bằng cú pháp sau
ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type];
Giả sử bạn muốn đổi tên cột ALTER TABLE students CHANGE id students_id INT; 0 thành ALTER TABLE students CHANGE id students_id INT; 1. Câu lệnh SQL bên dưới sẽ hoạt động
ALTER TABLE students CHANGE id students_id INT;
Mặc dù chúng tôi không thay đổi loại dữ liệu của cột ALTER TABLE students CHANGE id students_id INT; 0, mệnh đề ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 4 yêu cầu bạn chuyển loại dữ liệu nếu không nó sẽ gây ra lỗi
Bắt đầu từ phiên bản MySQL ALTER TABLE students CHANGE id students_id INT; 4, MySQL đã thêm mệnh đề ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 5 để bạn có thể đổi tên tên cột mà không cần phải chuyển kiểu dữ liệu của nó
Cú pháp của ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 5 như hình bên dưới
ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name];
Ví dụ: hãy đổi tên cột ALTER TABLE students CHANGE id students_id INT; 7 thành ALTER TABLE students CHANGE id students_id INT; 8
ALTER TABLE students RENAME COLUMN name TO first_name;
Khi câu lệnh trên đã được thực thi, bạn có thể chạy lại câu lệnh ALTER TABLE students CHANGE id students_id INT; 9 để kiểm tra cột đã đổi tên
mysql> DESCRIBE students; +-------------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------+------+-----+---------+-------+ | students_id | int | NO | PRI | NULL | | | first_name | tinytext | YES | | NULL | | | subject | tinytext | YES | | NULL | | | score | float | YES | | NULL | | | gender | tinytext | YES | | NULL | | +-------------+----------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
Như bạn có thể thấy từ đầu ra ở trên, chúng tôi đã thành công trong việc đổi tên tên cột của bảng
Khi muốn đổi tên nhiều cột, bạn có thể thêm nhiều mệnh đề ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 4 hoặc ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 5 cách nhau bởi dấu phẩy
Hãy xem câu lệnh sql ví dụ bên dưới
ALTER TABLE students CHANGE id students_id INT, CHANGE name first_name TINYTEXT, CHANGE subject topic TINYTEXT; -- OR ALTER TABLE students RENAME COLUMN id TO students_id, RENAME COLUMN name TO first_name, RENAME COLUMN subject TO topic;
Xin lưu ý rằng bạn cần có đặc quyền ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 2 để chạy hoạt động ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 3
Tiếp theo, hãy tìm hiểu cách kiểm tra và thêm đặc quyền ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 2 khi nó bị thiếu cho người dùng MySQL của bạn
Kiểm tra đặc quyền ALTER cho người dùng MySQL của bạn
Để kiểm tra xem người dùng MySQL của bạn đã có đặc quyền ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 2 hay chưa, bạn cần chạy câu lệnh ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 6 từ Terminal
SHOW GRANTS FOR [user@];
Ví dụ: đây là kết quả tôi nhận được khi thực hiện câu lệnh cho người dùng của mình ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 7
mysql> SHOW GRANTS FOR nathan@localhost; +----------------------------------------------------------------+ | Grants for nathan@localhost | +----------------------------------------------------------------+ | GRANT USAGE ON *.* TO `nathan`@`localhost` | | GRANT SELECT ON `school_db`.`students` TO `nathan`@`localhost` | +----------------------------------------------------------------+ 2 rows in set (0.00 sec)
Như bạn có thể thấy, người dùng ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 7 chỉ có đặc quyền ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 9 đối với bảng ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 7 trong cơ sở dữ liệu ALTER TABLE students RENAME COLUMN name TO first_name; 1
Nếu không có đặc quyền ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 2, thì câu lệnh ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 3 sẽ khiến MySQL ném một ALTER TABLE students RENAME COLUMN name TO first_name; 4 như hình bên dưới
ALTER TABLE students CHANGE id students_id INT; ERROR 1142 (42000): ALTER command denied to user 'nathan'@'localhost' for table 'students'
Để trao đặc quyền ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 2 cho người dùng, bạn cần thực thi câu lệnh ALTER TABLE students RENAME COLUMN name TO first_name; 6 có cú pháp sau
ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 0
Đây là một ví dụ về việc cấp đặc quyền ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 2 cho người dùng ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 7. Bạn cần thay đổi tên người dùng thành tên người dùng thực của mình
ALTER TABLE [table_name] CHANGE [current_column_name] [new_column_name] [data_type]; 1
Bây giờ hãy chạy lại câu lệnh ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 6. Lần này, bạn sẽ thấy các đặc quyền ALTER TABLE [table_name] RENAME COLUMN [current_column_name] TO [new_column_name]; 2 xuất hiện cho người dùng MySQL của bạn