MySQL Cheat Sheet đầy đủ (Bảng tổng hợp câu lệnh MySQL)
Trần Thị Vân
- 116
- 24/07/2026
MySQL Cheat Sheet đầy đủ giúp bạn tra cứu nhanh các câu lệnh MySQL từ cơ bản đến nâng cao như SELECT, INSERT, UPDATE, DELETE, JOIN, GROUP BY, Index, Transaction, View, Trigger, Stored Procedure cùng nhiều ví dụ thực tế dễ áp dụng, chi tiết như nào hãy cùng chúng tôi phân tích:
MySQL là một trong những hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) phổ biến nhất hiện nay. Dù bạn là người mới học SQL, lập trình viên web, quản trị cơ sở dữ liệu hay DevOps, việc sở hữu một MySQL Cheat Sheet đầy đủ sẽ giúp tiết kiệm rất nhiều thời gian khi làm việc. Thay vì phải nhớ từng cú pháp hoặc tra cứu liên tục, bạn chỉ cần mở tài liệu này để tìm nhanh lệnh cần dùng.
Bài viết dưới đây được biên soạn theo dạng tài liệu tra cứu thực tế, bao gồm từ những câu lệnh cơ bản cho đến các kỹ thuật nâng cao thường gặp trong quá trình phát triển phần mềm. Mỗi phần đều có ví dụ minh họa giúp bạn dễ hiểu và áp dụng ngay.

MySQL Cheat Sheet là gì?
Cheat Sheet là tài liệu tổng hợp nhanh các cú pháp, câu lệnh và mẹo sử dụng thường xuyên. Thay vì giải thích quá dài dòng, Cheat Sheet tập trung vào những nội dung quan trọng nhất để người dùng có thể tìm kiếm và sử dụng ngay khi cần.
Một Cheat Sheet MySQL đầy đủ thường bao gồm:
- Kết nối đến MySQL.
- Quản lý Database.
- Quản lý Table.
- Thao tác dữ liệu.
- Điều kiện lọc.
- Sắp xếp dữ liệu.
- Hàm xử lý.
- JOIN.
- GROUP BY.
- Subquery.
- Index.
- Transaction.
- User và Permission.
- Sao lưu và phục hồi dữ liệu.
Kết nối MySQL bằng Command Line
Đây là các câu lệnh được sử dụng thường xuyên khi làm việc với MySQL Server.
Đăng nhập MySQL
mysql -u root -p
Hoặc kết nối đến máy chủ khác:
mysql -h 192.168.1.100 -P 3306 -u username -p
Kiểm tra phiên bản MySQL
SELECT VERSION();
Xem người dùng hiện tại
SELECT USER();
Xem Database đang sử dụng
SELECT DATABASE();
Quản lý Database
Đây là nhóm câu lệnh cơ bản nhất mà hầu như dự án nào cũng sử dụng.
Hiển thị toàn bộ Database
SHOW DATABASES;
Tạo Database
CREATE DATABASE webmoi;
Tạo Database nếu chưa tồn tại
CREATE DATABASE IF NOT EXISTS webmoi;
Sử dụng Database
USE webmoi;
Xóa Database
DROP DATABASE webmoi;
Xóa nếu tồn tại
DROP DATABASE IF EXISTS webmoi;
Quản lý bảng dữ liệu
Xem danh sách bảng
SHOW TABLES;
Xem cấu trúc bảng
DESCRIBE users;
Hoặc:
DESC users;
Tạo bảng mới
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
fullname VARCHAR(100),
email VARCHAR(150),
age INT,
created_at DATETIME
);
Đổi tên bảng
RENAME TABLE users TO customers;
Xóa bảng
DROP TABLE users;
Xóa nếu tồn tại
DROP TABLE IF EXISTS users;
Làm rỗng bảng
TRUNCATE TABLE users;
Thao tác với cột trong bảng
Thêm cột mới
ALTER TABLE users
ADD phone VARCHAR(20);
Xóa cột
ALTER TABLE users
DROP COLUMN phone;
Đổi tên cột
ALTER TABLE users
RENAME COLUMN fullname TO full_name;
Thay đổi kiểu dữ liệu
ALTER TABLE users
MODIFY age SMALLINT;
Thêm dữ liệu
Thêm một bản ghi
INSERT INTO users(fullname,email,age)
VALUES
('Nguyễn Văn A','a@example.com',25);
Thêm nhiều bản ghi
INSERT INTO users(fullname,email,age)
VALUES
('An','an@example.com',20),
('Bình','binh@example.com',22),
('Chi','chi@example.com',30);
Đọc dữ liệu
Lấy toàn bộ dữ liệu
SELECT * FROM users;
Lấy một số cột
SELECT fullname,email
FROM users;
Lấy dữ liệu không trùng lặp
SELECT DISTINCT age
FROM users;
Giới hạn số lượng bản ghi
SELECT *
FROM users
LIMIT 10;
Phân trang
SELECT *
FROM users
LIMIT 10 OFFSET 20;
Cập nhật dữ liệu
Cập nhật một bản ghi
UPDATE users
SET age=30
WHERE id=1;
Cập nhật nhiều cột
UPDATE users
SET
fullname='Nguyễn Văn B',
age=35
WHERE id=2;
Xóa dữ liệu
Xóa theo điều kiện
DELETE FROM users
WHERE id=3;
Xóa toàn bộ dữ liệu
DELETE FROM users;
Mệnh đề WHERE
WHERE giúp lọc dữ liệu theo điều kiện.
So sánh bằng
SELECT *
FROM users
WHERE age=25;
Khác
SELECT *
FROM users
WHERE age<>25;
Lớn hơn
SELECT *
FROM users
WHERE age>18;
Nhỏ hơn
SELECT *
FROM users
WHERE age<60;
Khoảng giá trị
SELECT *
FROM users
WHERE age BETWEEN 20 AND 30;
Danh sách giá trị
SELECT *
FROM users
WHERE age IN (20,25,30);
Tìm kiếm chuỗi
SELECT *
FROM users
WHERE fullname LIKE '%Nguyễn%';
Giá trị NULL
SELECT *
FROM users
WHERE phone IS NULL;
Toán tử logic
AND
SELECT *
FROM users
WHERE age>18
AND age<40;
OR
SELECT *
FROM users
WHERE age=18
OR age=25;
NOT
SELECT *
FROM users
WHERE NOT age=18;
Sắp xếp dữ liệu
Tăng dần
SELECT *
FROM users
ORDER BY age ASC;
Giảm dần
SELECT *
FROM users
ORDER BY age DESC;
Nhóm dữ liệu với GROUP BY
GROUP BY được sử dụng để gom các bản ghi có cùng giá trị lại thành từng nhóm. Thông thường nó sẽ đi cùng các hàm tổng hợp như COUNT(), SUM(), AVG(), MAX() và MIN().
Đếm số lượng bản ghi theo độ tuổi
SELECT age, COUNT(*) AS total
FROM users
GROUP BY age;
Đếm số lượng người dùng theo thành phố
SELECT city, COUNT(*) AS total_users
FROM users
GROUP BY city;
Tính tổng doanh thu
SELECT customer_id, SUM(total_amount) AS total_sales
FROM orders
GROUP BY customer_id;
Tính giá trị trung bình
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;
Tìm giá trị lớn nhất
SELECT MAX(price)
FROM products;
Tìm giá trị nhỏ nhất
SELECT MIN(price)
FROM products;
Lọc kết quả sau khi GROUP BY với HAVING
HAVING hoạt động tương tự WHERE nhưng được áp dụng sau khi dữ liệu đã được nhóm.
Hiển thị các nhóm có trên 10 bản ghi
SELECT city, COUNT(*) AS total
FROM users
GROUP BY city
HAVING COUNT(*) > 10;
Lọc theo tổng doanh thu
SELECT customer_id, SUM(total_amount) AS revenue
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 10000000;
Sử dụng Alias
Alias giúp đặt tên ngắn gọn hơn cho bảng hoặc cột.
Đặt tên cột
SELECT fullname AS name
FROM users;
Đặt tên bảng
SELECT u.fullname
FROM users u;
Các loại JOIN trong MySQL
JOIN dùng để kết hợp dữ liệu từ nhiều bảng khác nhau thông qua khóa liên kết.
INNER JOIN
Chỉ lấy những bản ghi tồn tại ở cả hai bảng.
SELECT u.fullname, o.total_amount
FROM users u
INNER JOIN orders o
ON u.id = o.user_id;
LEFT JOIN
Luôn lấy toàn bộ dữ liệu bên trái.
SELECT u.fullname, o.total_amount
FROM users u
LEFT JOIN orders o
ON u.id = o.user_id;
RIGHT JOIN
SELECT u.fullname, o.total_amount
FROM users u
RIGHT JOIN orders o
ON u.id = o.user_id;
CROSS JOIN
SELECT *
FROM colors
CROSS JOIN sizes;
JOIN nhiều bảng
SELECT
u.fullname,
o.order_date,
p.product_name
FROM users u
INNER JOIN orders o
ON u.id = o.user_id
INNER JOIN products p
ON o.product_id = p.id;
UNION và UNION ALL
UNION dùng để nối kết quả của nhiều câu lệnh SELECT.
UNION
SELECT fullname
FROM customers
UNION
SELECT fullname
FROM employees;
UNION ALL
SELECT fullname
FROM customers
UNION ALL
SELECT fullname
FROM employees;
Subquery (Truy vấn con)
Subquery là câu lệnh SELECT được đặt bên trong một câu lệnh SQL khác.
Subquery trong WHERE
SELECT *
FROM users
WHERE id IN
(
SELECT user_id
FROM orders
);
Subquery trong FROM
SELECT *
FROM
(
SELECT *
FROM users
) AS temp_users;
Subquery trong SELECT
SELECT
fullname,
(
SELECT COUNT(*)
FROM orders
WHERE orders.user_id = users.id
) AS total_orders
FROM users;
Common Table Expression (CTE)
Từ MySQL 8.0 trở lên, bạn có thể sử dụng WITH để tạo bảng tạm trong một truy vấn.
Ví dụ CTE
WITH user_total AS
(
SELECT
user_id,
COUNT(*) AS total
FROM orders
GROUP BY user_id
)
SELECT *
FROM user_total;
Các hàm xử lý chuỗi
| Hàm | Công dụng |
|---|---|
| CONCAT() | Nối chuỗi |
| LENGTH() | Độ dài chuỗi |
| LOWER() | Chuyển thành chữ thường |
| UPPER() | Chuyển thành chữ hoa |
| TRIM() | Xóa khoảng trắng |
| SUBSTRING() | Cắt chuỗi |
| REPLACE() | Thay thế chuỗi |
Nối chuỗi
SELECT CONCAT(first_name,' ',last_name)
FROM users;
Chữ hoa
SELECT UPPER(fullname)
FROM users;
Chữ thường
SELECT LOWER(fullname)
FROM users;
Cắt chuỗi
SELECT SUBSTRING(fullname,1,5)
FROM users;
Thay thế chuỗi
SELECT REPLACE(fullname,'Nguyễn','Mr.')
FROM users;
Các hàm số học
| Hàm | Ý nghĩa |
|---|---|
| ROUND() | Làm tròn |
| CEILING() | Làm tròn lên |
| FLOOR() | Làm tròn xuống |
| ABS() | Giá trị tuyệt đối |
| MOD() | Phép chia lấy dư |
| RAND() | Số ngẫu nhiên |
Làm tròn số
SELECT ROUND(15.678,2);
Giá trị tuyệt đối
SELECT ABS(-100);
Số ngẫu nhiên
SELECT RAND();
Các hàm ngày giờ
| Hàm | Ý nghĩa |
|---|---|
| NOW() | Ngày giờ hiện tại |
| CURDATE() | Ngày hiện tại |
| CURTIME() | Giờ hiện tại |
| YEAR() | Lấy năm |
| MONTH() | Lấy tháng |
| DAY() | Lấy ngày |
| DATEDIFF() | Khoảng cách giữa hai ngày |
| DATE_ADD() | Cộng thêm thời gian |
| DATE_SUB() | Trừ thời gian |
Ngày giờ hiện tại
SELECT NOW();
Lấy năm
SELECT YEAR(NOW());
Lấy tháng
SELECT MONTH(NOW());
Chênh lệch số ngày
SELECT DATEDIFF(NOW(),'2025-01-01');
Cộng thêm 30 ngày
SELECT DATE_ADD(NOW(),INTERVAL 30 DAY);
Trừ 7 ngày
SELECT DATE_SUB(NOW(),INTERVAL 7 DAY);
Tạo và sử dụng View
View là một bảng ảo được tạo từ một hoặc nhiều câu lệnh SELECT. View giúp đơn giản hóa các truy vấn phức tạp, tăng khả năng tái sử dụng và hạn chế việc người dùng truy cập trực tiếp vào bảng gốc.
Tạo View
CREATE VIEW active_users AS
SELECT
id,
fullname,
email
FROM users
WHERE status = 1;
Xem dữ liệu từ View
SELECT *
FROM active_users;
Cập nhật View
CREATE OR REPLACE VIEW active_users AS
SELECT
id,
fullname,
email,
phone
FROM users
WHERE status = 1;
Xóa View
DROP VIEW active_users;
Kiểm tra danh sách View
SHOW FULL TABLES
WHERE TABLE_TYPE = 'VIEW';
Index và tối ưu tìm kiếm
Index giúp MySQL tìm kiếm dữ liệu nhanh hơn, đặc biệt trên các bảng có hàng trăm nghìn hoặc hàng triệu bản ghi. Tuy nhiên, tạo quá nhiều Index sẽ làm chậm thao tác INSERT, UPDATE và DELETE.
Tạo Index
CREATE INDEX idx_email
ON users(email);
Tạo Index nhiều cột
CREATE INDEX idx_name_age
ON users(fullname, age);
Tạo Unique Index
CREATE UNIQUE INDEX idx_username
ON users(username);
Xem Index của bảng
SHOW INDEX
FROM users;
Xóa Index
DROP INDEX idx_email
ON users;
EXPLAIN - Phân tích truy vấn
EXPLAIN là công cụ cực kỳ quan trọng để đánh giá hiệu suất câu lệnh SQL. Nó cho biết MySQL đang quét bảng như thế nào, có sử dụng Index hay không và ước lượng số lượng bản ghi cần đọc.
Kiểm tra truy vấn
EXPLAIN
SELECT *
FROM users
WHERE email = 'admin@example.com';
Phân tích JOIN
EXPLAIN
SELECT
u.fullname,
o.total_amount
FROM users u
INNER JOIN orders o
ON u.id = o.user_id;
Transaction
Transaction đảm bảo nhiều câu lệnh SQL được thực hiện như một khối thống nhất. Nếu có lỗi xảy ra, toàn bộ thay đổi sẽ được hoàn tác.
Bắt đầu Transaction
START TRANSACTION;
Xác nhận thay đổi
COMMIT;
Hủy thay đổi
ROLLBACK;
Ví dụ Transaction
START TRANSACTION;
UPDATE accounts
SET balance = balance - 1000
WHERE id = 1;
UPDATE accounts
SET balance = balance + 1000
WHERE id = 2;
COMMIT;
Savepoint trong Transaction
Savepoint cho phép quay lại một vị trí xác định thay vì hủy toàn bộ Transaction.
Tạo Savepoint
SAVEPOINT step1;
Quay lại Savepoint
ROLLBACK TO step1;
Xóa Savepoint
RELEASE SAVEPOINT step1;
Stored Procedure
Stored Procedure là tập hợp nhiều câu lệnh SQL được lưu trực tiếp trong MySQL Server và có thể gọi lại nhiều lần.
Tạo Procedure
DELIMITER $$
CREATE PROCEDURE GetUsers()
BEGIN
SELECT *
FROM users;
END $$
DELIMITER ;
Thực thi Procedure
CALL GetUsers();
Xóa Procedure
DROP PROCEDURE GetUsers;
Function
Function hoạt động tương tự Procedure nhưng luôn trả về một giá trị.
Tạo Function
DELIMITER $$
CREATE FUNCTION TotalPrice(price DECIMAL(10,2), qty INT)
RETURNS DECIMAL(10,2)
BEGIN
RETURN price * qty;
END $$
DELIMITER ;
Gọi Function
SELECT TotalPrice(100000,3);
Trigger
Trigger tự động thực thi khi xảy ra sự kiện INSERT, UPDATE hoặc DELETE trên bảng.
Tạo Trigger
CREATE TRIGGER before_insert_user
BEFORE INSERT
ON users
FOR EACH ROW
SET NEW.created_at = NOW();
Xem Trigger
SHOW TRIGGERS;
Xóa Trigger
DROP TRIGGER before_insert_user;
Khóa ngoại (Foreign Key)
Foreign Key giúp đảm bảo tính toàn vẹn dữ liệu giữa các bảng.
Tạo Foreign Key
ALTER TABLE orders
ADD CONSTRAINT fk_user
FOREIGN KEY(user_id)
REFERENCES users(id);
Xóa Foreign Key
ALTER TABLE orders
DROP FOREIGN KEY fk_user;
Quản lý User trong MySQL
Tạo User
CREATE USER 'demo'
IDENTIFIED BY '123456';
Đổi mật khẩu
ALTER USER 'demo'
IDENTIFIED BY 'newpassword';
Xóa User
DROP USER 'demo';
Xem danh sách User
SELECT user
FROM mysql.user;
Phân quyền User
Cấp toàn bộ quyền
GRANT ALL PRIVILEGES
ON webmoi.*
TO 'demo';
Chỉ cấp quyền SELECT
GRANT SELECT
ON webmoi.*
TO 'demo';
Thu hồi quyền
REVOKE INSERT
ON webmoi.*
FROM 'demo';
Cập nhật quyền
FLUSH PRIVILEGES;
Xuất dữ liệu (Export)
Xuất toàn bộ Database
mysqldump -u root -p webmoi > backup.sql
Xuất một bảng
mysqldump -u root -p webmoi users > users.sql
Khôi phục dữ liệu (Import)
Import Database
mysql -u root -p webmoi < backup.sql
Import từ dòng lệnh
source backup.sql;
Các kiểu dữ liệu thường dùng trong MySQL
Việc lựa chọn đúng kiểu dữ liệu sẽ giúp tối ưu dung lượng lưu trữ, tăng tốc độ truy vấn và giảm nguy cơ phát sinh lỗi trong quá trình phát triển ứng dụng.
Kiểu số nguyên
| Kiểu dữ liệu | Mô tả |
|---|---|
| TINYINT | Số nguyên rất nhỏ |
| SMALLINT | Số nguyên nhỏ |
| MEDIUMINT | Số nguyên trung bình |
| INT | Số nguyên phổ biến nhất |
| BIGINT | Số nguyên rất lớn |
Kiểu số thực
| Kiểu dữ liệu | Mục đích |
|---|---|
| FLOAT | Số thực |
| DOUBLE | Số thực độ chính xác cao |
| DECIMAL | Dữ liệu tài chính, tiền tệ |
Kiểu chuỗi
| Kiểu dữ liệu | Mục đích |
|---|---|
| CHAR | Chuỗi có độ dài cố định |
| VARCHAR | Chuỗi có độ dài thay đổi |
| TEXT | Văn bản dài |
| LONGTEXT | Văn bản rất dài |
Kiểu ngày giờ
| Kiểu dữ liệu | Mục đích |
|---|---|
| DATE | Ngày |
| TIME | Giờ |
| DATETIME | Ngày và giờ |
| TIMESTAMP | Dấu thời gian |
| YEAR | Năm |
Các toán tử thường gặp trong MySQL
| Toán tử | Ý nghĩa |
|---|---|
| = | Bằng |
| Khác | |
| > | Lớn hơn |
| Nhỏ hơn | |
| >= | Lớn hơn hoặc bằng |
| Nhỏ hơn hoặc bằng | |
| LIKE | Tìm kiếm chuỗi |
| IN | Nằm trong danh sách |
| BETWEEN | Khoảng giá trị |
| EXISTS | Kiểm tra tồn tại |
| IS NULL | Giá trị NULL |
Các hàm tổng hợp phổ biến
| Hàm | Ý nghĩa |
|---|---|
| COUNT() | Đếm số lượng |
| SUM() | Tính tổng |
| AVG() | Trung bình |
| MAX() | Lớn nhất |
| MIN() | Nhỏ nhất |
Đếm số lượng người dùng
SELECT COUNT(*)
FROM users;
Tổng doanh thu
SELECT SUM(total_amount)
FROM orders;
Doanh thu trung bình
SELECT AVG(total_amount)
FROM orders;
Các lệnh SHOW hữu ích
Nhóm lệnh SHOW giúp kiểm tra nhanh cấu hình và trạng thái của MySQL.
Hiển thị Database
SHOW DATABASES;
Hiển thị bảng
SHOW TABLES;
Hiển thị cột
SHOW COLUMNS
FROM users;
Hiển thị Index
SHOW INDEX
FROM users;
Hiển thị Engine
SHOW ENGINES;
Hiển thị Charset
SHOW CHARACTER SET;
Hiển thị Collation
SHOW COLLATION;
Hiển thị Process
SHOW PROCESSLIST;
Hiển thị biến hệ thống
SHOW VARIABLES;
Hiển thị trạng thái
SHOW STATUS;
Một số mẹo tối ưu truy vấn MySQL
Cheat Sheet sẽ chưa thật sự đầy đủ nếu thiếu các kinh nghiệm tối ưu hiệu năng. Đây là những nguyên tắc được áp dụng trong rất nhiều dự án thực tế.
- Chỉ SELECT những cột cần sử dụng, hạn chế dùng SELECT *.
- Tạo Index cho các cột thường xuyên tìm kiếm.
- Không tạo quá nhiều Index không cần thiết.
- Sử dụng LIMIT khi chỉ cần một phần dữ liệu.
- Dùng EXPLAIN để kiểm tra kế hoạch thực thi.
- Đặt điều kiện WHERE càng cụ thể càng tốt.
- Ưu tiên VARCHAR thay vì CHAR nếu dữ liệu có độ dài thay đổi.
- Không lưu dữ liệu trùng lặp ở nhiều bảng.
- Chuẩn hóa cơ sở dữ liệu trước khi tối ưu truy vấn.
- Sử dụng Transaction khi cập nhật nhiều bảng.
- Thường xuyên sao lưu dữ liệu.
- Định kỳ tối ưu và phân tích bảng lớn.
Bảng MySQL Cheat Sheet tổng hợp nhanh
| Thao tác | Câu lệnh |
|---|---|
| Tạo Database | CREATE DATABASE |
| Xóa Database | DROP DATABASE |
| Tạo bảng | CREATE TABLE |
| Xóa bảng | DROP TABLE |
| Thêm dữ liệu | INSERT INTO |
| Truy vấn dữ liệu | SELECT |
| Cập nhật dữ liệu | UPDATE |
| Xóa dữ liệu | DELETE |
| Nhóm dữ liệu | GROUP BY |
| Lọc sau khi nhóm | HAVING |
| Sắp xếp | ORDER BY |
| Giới hạn bản ghi | LIMIT |
| Kết hợp bảng | JOIN |
| Gộp kết quả | UNION |
| Tạo View | CREATE VIEW |
| Tạo Index | CREATE INDEX |
| Phân tích truy vấn | EXPLAIN |
| Bắt đầu Transaction | START TRANSACTION |
| Lưu thay đổi | COMMIT |
| Hoàn tác | ROLLBACK |
Kết luận
Một MySQL Cheat Sheet đầy đủ không chỉ giúp bạn tra cứu cú pháp nhanh mà còn đóng vai trò như một tài liệu tham khảo hữu ích trong quá trình học tập, phát triển phần mềm và quản trị cơ sở dữ liệu. Khi nắm vững các nhóm lệnh từ cơ bản đến nâng cao như thao tác với Database, Table, JOIN, Subquery, Transaction, View, Index, Trigger, Stored Procedure hay quản lý người dùng, bạn sẽ làm việc với MySQL hiệu quả hơn rất nhiều.
Để đạt hiệu suất tối ưu, ngoài việc ghi nhớ cú pháp, hãy kết hợp sử dụng EXPLAIN để phân tích truy vấn, xây dựng Index hợp lý, chuẩn hóa cơ sở dữ liệu và thường xuyên sao lưu dữ liệu. Đây là những kinh nghiệm thực tế giúp hệ thống MySQL hoạt động ổn định, an toàn và có khả năng mở rộng tốt trong các dự án từ nhỏ đến lớn.
- 0 Bình luận
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *