PHP và MySQL Bài 19: Các câu lệnh SQL cơ bản - Nền tảng CRUD (CREATE, INSERT, SELECT, UPDATE, DELETE)
Từ đầu series đến giờ, chúng ta đã học cách dùng PHP để xử lý tính toán, nhận dữ liệu từ Form và kiểm tra đăng nhập. Tuy nhiên, toàn bộ dữ liệu đó (biến, mảng, session) đều nằm trên RAM của máy chủ. Chỉ cần máy chủ khởi động lại, mọi dữ liệu sẽ "bốc hơi" không dấu vết.
Để lưu trữ thông tin vĩnh viễn (như danh sách người dùng, lịch sử giao dịch, bài báo cáo), chúng ta cần một cái "kho". Kho đó chính là Cơ sở dữ liệu (Database), và người quản lý cái kho đó chính là MySQL.
Trong thế giới phát triển phần mềm, dù hệ thống của bạn là một trang blog nhỏ hay một nền tảng thương mại điện tử khổng lồ, thì 90% các thao tác với cơ sở dữ liệu đều xoay quanh 4 hành động cốt lõi. Người ta gọi đó là vòng đời CRUD:
- Create (Tạo mới)
- Read (Đọc/Truy xuất)
- Update (Cập nhật/Sửa đổi)
- Delete (Xóa)
Để thực hiện CRUD trong MySQL, chúng ta sử dụng ngôn ngữ truy vấn cấu trúc (SQL). Dưới đây là 5 câu lệnh SQL "nhập môn" mà bất kỳ Backend Developer nào cũng phải thuộc nằm lòng.
1. Lệnh CREATE TABLE - Xây dựng cấu trúc bảng
Trước khi có thể thêm dữ liệu, chúng ta phải tạo ra một cái "bảng" (Table) để chứa nó, đồng thời quy định rõ mỗi cột trong bảng sẽ lưu kiểu dữ liệu gì (áp dụng kiến thức của Bài 18).
Cú pháp cơ bản:
CREATE TABLE ten_bang (
cot_1 kieu_du_lieu_1 cac_rang_buoc,
cot_2 kieu_du_lieu_2 cac_rang_buoc,
...
);
Ví dụ thực tế: Tạo một bảng users để lưu thông tin tài khoản người dùng.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
status TINYINT(1) DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Giải thích các ràng buộc quan trọng trong ví dụ trên:
AUTO_INCREMENT: Hệ thống sẽ tự động tăng số ID lên 1 mỗi khi có người dùng mới được thêm vào (bạn không cần tự nhập ID).PRIMARY KEY: Khóa chính. Đánh dấu cộtidlà định danh duy nhất cho mỗi dòng, không bao giờ được phép trùng lặp.NOT NULL: Bắt buộc phải có dữ liệu, không được để trống cột này.DEFAULT: Thiết lập giá trị mặc định nếu bạn không nhập gì (Ví dụ: mặc định trạng thái là1- Đang hoạt động, thời gian tạo làCURRENT_TIMESTAMP- Thời điểm hiện tại).
2. Lệnh INSERT (Create) - Thêm bản ghi mới
Khi đã có bảng, lệnh INSERT INTO được sử dụng để đẩy dữ liệu mới vào bảng.
Cú pháp:
INSERT INTO ten_bang (cot_1, cot_2, cot_3) VALUES (gia_tri_1, gia_tri_2, gia_tri_3);
Ví dụ: Thêm một người dùng mới vào bảng users.
-- Chú ý: Chuỗi văn bản phải được đặt trong dấu nháy đơn '...'
INSERT INTO users (username, email) VALUES ('nguyen_van_a', 'vana@example.com');
Mẹo: Chúng ta không cần chèn dữ liệu cho cột
id,statushaycreated_atvì chúng đã có cơ chế tự động điền hoặc giá trị mặc định (DEFAULT) mà ta đã thiết lập ở lệnh tạo bảng.
Bạn cũng có thể thêm nhiều dòng cùng lúc để tối ưu hiệu năng (Bulk Insert):
INSERT INTO users (username, email) VALUES
('tran_thi_b', 'thib@example.com'),
('le_van_c', 'vanc@example.com');
3. Lệnh SELECT (Read) - Truy xuất dữ liệu
Đây là câu lệnh được sử dụng nhiều nhất. Nó dùng để "đọc" hoặc "tìm kiếm" dữ liệu từ cơ sở dữ liệu và trả về dưới dạng một danh sách (Result Set).
- Lấy toàn bộ cột dữ liệu: (Sử dụng dấu
*)SELECT * FROM users; - Lấy dữ liệu của các cột chỉ định (Tối ưu hiệu năng):
Trong thực tế, việc dùng
SELECT *ở các bảng lớn rất ngốn RAM và băng thông. Lời khuyên là chỉ lấy những cột thực sự cần thiết.SELECT username, email FROM users;
4. Lệnh UPDATE (Update) - Cập nhật dữ liệu hiện có
Dùng để thay đổi giá trị của một hoặc nhiều cột trong các bản ghi đã tồn tại.
⚠️ CẢNH BÁO SINH TỬ: Lệnh
UPDATEBẮT BUỘC phải đi kèm với mệnh đềWHERE(Điều kiện). Nếu bạn quênWHERE, MySQL sẽ cập nhật dữ liệu của TOÀN BỘ CÁC DÒNG CÓ TRONG BẢNG. Đây là thảm họa thường gặp nhất của các lập trình viên mới vào nghề.
Cú pháp:
UPDATE ten_bang SET cot_1 = gia_tri_moi, cot_2 = gia_tri_moi WHERE dieu_kien;
Ví dụ: Người dùng có ID là 2 muốn đổi địa chỉ email và bị khóa tài khoản.
UPDATE users SET email = 'email_moi_cua_b@example.com', status = 0 WHERE id = 2;
5. Lệnh DELETE (Delete) - Xóa bản ghi
Dùng để xóa hoàn toàn một hàng dữ liệu khỏi bảng.
⚠️ CẢNH BÁO SINH TỬ: Tương tự như
UPDATE, lệnhDELETEBẮT BUỘC phải có mệnh đềWHERE. Nếu gọiDELETE FROM users;mà không có điều kiện, toàn bộ dữ liệu bảng sẽ bốc hơi.
Cú pháp:
DELETE FROM ten_bang WHERE dieu_kien;
Ví dụ: Xóa tài khoản của người dùng có ID là 3.
DELETE FROM users WHERE id = 3;
Lời khuyên từ thực tế (Soft Delete): Trong các hệ thống lớn như ngân hàng hay quản lý trạm vé, người ta rất hiếm khi dùng lệnh
DELETEthực sự để xóa dữ liệu. Thay vào đó, họ dùng lệnhUPDATEđể chuyển trạng tháistatus = 0(gọi là Xóa mềm - Soft Delete). Việc này giúp giữ lại lịch sử dữ liệu để đối soát khi cần thiết.
Tổng kết
Nắm vững 5 câu lệnh này, bạn đã có thể xây dựng được các chức năng quản lý danh sách cơ bản. Tuy nhiên, khi hệ thống có hàng triệu bản ghi, lệnh SELECT * sẽ làm sập máy chủ. Chúng ta cần những công cụ tìm kiếm và lọc dữ liệu tinh xảo hơn.
Đó sẽ là nội dung của bài tiếp theo: Bài 20: Truy vấn nâng cao với mệnh đề WHERE, ORDER BY, LIMIT, GROUP BY và HAVING.
All rights reserved