Chúng ta bấm nút nguồn trên remote để mở tivi xem phim. Hầu như chúng ta không biết, không quan tâm nó truyền tia hồng ngoại hay sóng gì. Đến khi tivi không lên, hành động đầu tiên của ta là đập đập cái remote vào lòng bàn tay.
Có một sự thật "phũ phàng"
Nếu bạn đã làm website một thời gian...
Thì khả năng cao bạn đã sử dụng CRUD rồi.
Chỉ là...
Bạn chưa biết nó có tên là CRUD thôi.
Ví dụ.
Bạn tạo tài khoản.
↓
Create
Bạn xem danh sách tài khoản.
↓
Read
Bạn sửa thông tin.
↓
Update
Bạn xóa tài khoản.
↓
Delete
Bốn thao tác.
Hết.
Nhưng gần như toàn bộ website có Database đều xoay quanh bốn việc này. Đơn giản như...đang giỡn vậy!
CRUD là gì?
CRUD là viết tắt của:
C – Create: Tạo dữ liệu.
R – Read: Đọc hoặc lấy dữ liệu.
U – Update: Cập nhật dữ liệu.
D – Delete: Xóa dữ liệu.
CRUD là nhóm bốn thao tác cơ bản mà ứng dụng thường sử dụng để làm việc với dữ liệu trong Database.
Ví dụ một website bán hàng có thể:
Create: thêm sản phẩm.
Read: xem sản phẩm.
Update: sửa sản phẩm.
Delete: xóa sản phẩm.
Ví dụ một ngày đẹp trời...
Hãy tưởng tượng.
Bạn có một cuốn sổ danh bạ.
Trong đó có:
An 0901...
Bình 0902...
Cường 0903...
Một ngày đẹp trời, chim hót líu lo, tinh thần sảng khoái.
Bạn làm bốn việc.
1. Thêm người mới
Bạn ghi:
Dũng 0904...
Đó là:
Create.
2. Xem thông tin
Bạn mở sổ.
Tìm:
Bình
Đó là:
Read.
3. Sửa thông tin
Bình đổi số điện thoại.
Bạn gạch số cũ.
Ghi số mới.
Đó là:
Update.
4. Xóa người
Cường chuyển sang sống trên sao Hỏa.
Bạn xóa Cường khỏi danh bạ.
Đó là:
Delete.
CRUD trong Database
Đổi cuốn sổ.
Thành MySQL.
Ta có bảng:
users
Ví dụ:
id | name | email
---|--------|----------------
1 | An | an@email.com
2 | Bình | binh@email.com
3 | Cường | cuong@email.com
Bốn thao tác CRUD sẽ tương ứng với SQL.
C – Create
Muốn thêm dữ liệu.
Chúng ta dùng:
INSERT
Ví dụ:
INSERT INTO users (name, email)
VALUES ('Dũng', 'dung@email.com');Database sẽ thêm:
4 | Dũng | dung@email.com
Bạn vừa thực hiện:
Create.
R – Read
Muốn đọc dữ liệu.
Chúng ta thường dùng:
SELECT
Ví dụ:
SELECT * FROM users;
Database trả về danh sách.
An
Bình
Cường
Dũng
Đây là:
Read.
U – Update
Bình đổi email.
Bạn cần sửa dữ liệu.
Dùng:
UPDATE
Ví dụ:
UPDATE users
SET email = 'binh-new@email.com'
WHERE id = 2;Bình.
Có email mới.
Đó là:
Update.
D – Delete
Cường không còn dùng tài khoản.
Bạn muốn xóa.
Dùng:
DELETE
Ví dụ:
DELETE FROM users
WHERE id = 3;
Cường biến mất khỏi bảng.
Đó là:
Delete.
Chua thêm...cái tủ!
Bạn mua một cái tủ.
Create
→ Bỏ đồ mới vào.
Read
→ Mở tủ xem đồ.
Update
→ Đổi vị trí đồ.
Delete
→ Vứt đồ không dùng.
Database cũng chẳng khác mấy.
Chỉ có điều...
Database không có cái tủ.
Nó có:
- INSERT
- SELECT
- UPDATE
- DELETE
CRUD và một website bán hàng
Hãy tưởng tượng.
Bạn có trang quản trị sản phẩm trên website bán hàng.
Thêm sản phẩm
Tên: iPhone
Giá: 999
[Thêm sản phẩm]
↓
Create
Xem sản phẩm
iPhone
Samsung
Laptop
iPad
↓
Read
Sửa sản phẩm
iPhone
999 → 899
↓
Update
Xóa sản phẩm
iPad
[Xóa]
↓
Delete
Bạn vừa xây một hệ thống CRUD.
CRUD và PHP
Nếu dùng PHP thuần.
Bạn có thể viết:
<?php
$sql = "SELECT * FROM users";
$result = mysqli_query($conn, $sql);Đây là:
Read.
Thêm dữ liệu:
$sql = "INSERT INTO users (name, email)
VALUES ('An', 'an@email.com')";
↓Create.
Sửa:
$sql = "UPDATE users
SET name = 'An Nguyễn'
WHERE id = 1";↓
Update.
Xóa:
$sql = "DELETE FROM users
WHERE id = 1";
↓
Delete.
CRUD và Laravel
Laravel.
Framework.
↓
MVC.
↓
CRUD.
Ví dụ.
Một trang quản lý sản phẩm.
ProductController
có thể xử lý:
- index()
- create()
- store()
- edit()
- update()
- destroy()
Bạn sẽ thấy những cái tên này rất nhiều khi học Laravel.
Và bây giờ.
Bạn đã biết chúng đang làm gì.
CRUD có phải chỉ dành cho website?
Không.
CRUD xuất hiện ở rất nhiều nơi.
Ví dụ:
Ứng dụng quản lý nhân viên
Create → Thêm nhân viên.
Read → Xem nhân viên.
Update → Sửa thông tin.
Delete → Xóa nhân viên.
Blog
Create → Viết bài.
Read → Đọc bài.
Update → Sửa bài.
Delete → Xóa bài.
Website bán hàng
Create → Thêm sản phẩm.
Read → Xem sản phẩm.
Update → Sửa sản phẩm.
Delete → Xóa sản phẩm.
Quản lý bệnh nhân
Create → Thêm hồ sơ.
Read → Xem hồ sơ.
Update → Cập nhật hồ sơ.
Delete → Xóa hồ sơ.
Hiểu lầm "làm mưa làm gió"
Nhiều người nghĩ:
"CRUD là một ngôn ngữ lập trình."
Không.
CRUD chỉ là:
Bốn loại thao tác cơ bản với dữ liệu.
Nó không phải:
PHP.
Không phải:
MySQL.
Không phải:
Laravel.
Không phải:
Framework.
Nó chỉ là một cách gọi rất tiện.
CRUD có giống SQL không?
Không hoàn toàn.
SQL là:
Ngôn ngữ truy vấn Database.
CRUD là:
Khái niệm về bốn thao tác dữ liệu.
SQL có thể thực hiện CRUD.
Ví dụ:
Create → INSERT
Read → SELECT
Update → UPDATE
Delete → DELETE
Đây là cách nhớ cực kỳ dễ.
CRUD và REST API
Một REST API thường có các HTTP method như:
- POST
- GET
- PUT/PATCH
- DELETE
Chúng thường được ánh xạ tương ứng với CRUD:
- POST --> Create
- GET --> Read
- PUT/PATCH --> Update
- DELETE --> Delete
Ví dụ.
Bạn gửi:
GET /api/products
↓
Lấy danh sách sản phẩm.
Read.
Bạn gửi:
POST /api/products
↓
Tạo sản phẩm mới.
Create.
Bạn gửi:
PUT /api/products/10
↓
Cập nhật sản phẩm số 10.
Update.
Bạn gửi:
DELETE /api/products/10
↓
Xóa sản phẩm số 10.
Delete.
Bây giờ CRUD bắt đầu nối được:
Database → Backend → API → Frontend.
Đó là tư duy cần có.
Một lỗi nguy hiểm
Trong CRUD.
Đặc biệt cẩn thận với:
DELETE
Ví dụ:
Bạn viết:
DELETE FROM users;
Không có:
WHERE
Điều gì xảy ra?
...
Xóa toàn bộ users.
Không phải một người.
Không phải mười người.
Mà...
Tất cả.
UPDATE cũng vậy
Bạn viết:
UPDATE users
SET email = 'test@email.com';Không có:
WHERE
Kết quả?
Tất cả user.
Có cùng email.
Đây chính là lý do.
Khi làm CRUD thật.
Bạn phải cực kỳ cẩn thận với:
UPDATE
và
DELETE.
InfinityFree Case
Bạn đang test.
Website quản lý sản phẩm.
Bạn muốn xóa:
id = 15
Bạn viết:
DELETE FROM products
WHERE id = 15;An toàn hơn.
Nhưng nếu bạn vô tình viết:
DELETE FROM products;
...
Xin chia buồn, dữ liệu một đi không trở lại!
Đó là lý do:
Backup Database trước khi "toang"
không phải bài viết cho vui.
Debug CRUD kiểu dev "xịn 100%"
Khi CRUD không hoạt động.
Đừng chỉ nhìn giao diện.
Hãy đi từng bước.
1. Form có gửi dữ liệu không?
Nếu không.
Kiểm tra:
HTML.
Method.
Input name.
2. PHP có nhận dữ liệu không?
Kiểm tra:
$_POST
hoặc:
$_GET
3. SQL có đúng không?
Kiểm tra câu:
INSERT
SELECT
UPDATE
DELETE
4. Database có nhận dữ liệu không?
Mở phpMyAdmin.
Kiểm tra bảng.
5. Có lỗi SQL không?
Đừng chỉ nhìn:
"Không chạy."
Hãy lấy chính xác:
Error message.
6. UPDATE/DELETE có WHERE không?
Đây là bước:
CỰC KỲ QUAN TRỌNG.
Một mẹo cực "đỉnh"
Khi học CRUD.
Đừng chỉ đọc lý thuyết.
Hãy tự xây một mini project.
Ví dụ:
Quản lý danh sách sách trong thư viện.
Bạn cần:
- [Thêm sách]
- [Danh sách sách]
- [Sửa]
- [Xóa]
Nếu làm được bốn chức năng này.
Bạn đã thực hành:
CRUD.
Và đồng thời.
Bạn sẽ đụng phải:
- PHP.
- MySQL.
- Form.
- Validation.
- SQL.
- Session.
- Frontend.
- Backend.
- ...
Một bài tập nhỏ.
Nhưng học được rất nhiều.
Checklist chuẩn không cần chỉnh
- CRUD = Create, Read, Update, Delete
- Create thường dùng INSERT
- Read thường dùng SELECT
- Update dùng UPDATE
- Delete dùng DELETE
- CRUD không phải ngôn ngữ lập trình
- CRUD không phải Framework
- REST API thường ánh xạ HTTP methods với CRUD
- Cẩn thận UPDATE/DELETE không có WHERE
- Luôn backup dữ liệu quan trọng trước thao tác nguy hiểm
FAQ nhanh
CRUD có phải là Database không?
Không. CRUD là bốn thao tác cơ bản với dữ liệu.
CRUD có phải chỉ dành cho MySQL không?
Không. Ý tưởng CRUD có thể áp dụng với nhiều loại Database và hệ thống lưu trữ dữ liệu khác nhau.
CRUD có liên quan đến API không?
Có. REST API thường dùng GET, POST, PUT/PATCH và DELETE để thực hiện các thao tác tương ứng với Read, Create, Update và Delete.
Laravel có hỗ trợ CRUD không?
Có. Laravel cung cấp rất nhiều công cụ giúp xây dựng các ứng dụng CRUD nhanh và có cấu trúc.
CRUD có khó không?
Bản thân CRUD không khó. Cái khó nằm ở việc xây dựng một hệ thống CRUD an toàn, có validation, phân quyền, xử lý lỗi và bảo vệ Database.
Bạn có thể cũng đang gặp
API là gì? (Giải thích như gọi đồ ăn.)
Backup Database đúng cách trước khi "toang"
Session vs Cookie - Hai anh em dễ nhầm nhất của PHP