Trong lập trình máy tính, **CRUD** (viết tắt các chữ cái đầu của ***C**reate-**R**ead-**U**pdate-**D**elete*, nghĩa là "tạo, đọc, cập nhật, xoá") là bốn chức năng cơ bản của lưu trữ liên tục. Các từ thay thế đôi khi được sử dụng khi xác định bốn chức năng cơ bản của CRUD, chẳng hạn như *retrieve* (truy xuất) thay cho *read*; *modify* (sửa đổi) thay cho *update*; *destroy* (hủy) thay cho *delete*. CRUD đôi khi cũng được sử dụng để mô tả các quy ước giao diện người dùng để tạo điều kiện thuận lợi cho việc xem, tìm kiếm và thay đổi thông tin, thường sử dụng các biểu mẫu và báo cáo của máy tính. Thuật ngữ này được cho là phổ biến lần đầu tiên bởi James Martin trong cuốn sách *Managing the Data-base Environment* (Quản lý Môi trường Cơ sở Dữ liệu) năm 1983. Từ viết tắt có thể mở rộng thành CRUDL để bao gồm thao tác *List* (liệt kê danh sách) các tập dữ liệu lớn nhưng đổi lại mang thêm các yếu tố phức tạp như phân trang khi các tập dữ liệu quá lớn để có thể dễ dàng lưu trữ trong bộ nhớ.

Ứng dụng cho cơ sở dữ liệu
--------------------------

Từ CRUD đề cập đến tất cả các chức năng chính được thực hiện trong các ứng dụng cơ sở dữ liệu quan hệ. Mỗi chữ cái trong từ viết tắt có thể viết tương ứng tới mỗi câu lệnh Ngôn ngữ truy vấn có cấu trúc (SQL) tiêu chuẩn, hoặc phương thức trong các giao thức truyền tải siêu văn bản (HTTP) (điều này thường được sử dụng để xây dựng các API RESTful) hoặc thao tác trong Dịch vụ phân phối dữ liệu (DDS):

| CRUD | Nghĩa | SQL | HTTP | DDS |
| --- | --- | --- | --- | --- |
| create | tạo | INSERT | POST | write |
| read | đọc | SELECT | GET | read |
| update | cập nhật | UPDATE | PUT | write |
| delete | xoá | DELETE | DELETE | dispose |

Phương thức POST trong HTTP không phải là một thao tác của CRUD như các phương thức PUT, GET và DELETE, bởi các phương thức kia có *ngữ nghĩa quản lý lưu trữ*, nghĩa là chúng cho phép các tác nhân người dùng thao tác trực tiếp trạng thái của tài nguyên đích. Phương thức POST mặt khác nó là một quy trình hoạt động có *ngữ nghĩa cụ thể của tài nguyên đích* không bao gồm ngữ nghĩa quản lý lưu trữ, vì vậy nó không cho phép tác nhân người dùng thao tác trực tiếp trạng thái của tài nguyên đích. Trái ngược với các thao tác của CRUD, phương thức POST không nhất thiết phải thay đổi giá trị.

Giao diện người dùng
--------------------

CRUD cũng có mặt ở cấp giao diện người dùng của hầu hết các ứng dụng. Ví dụ, trong phần mềm sổ địa chỉ, đơn vị lưu trữ cơ bản là một *mục nhập liên hệ* riêng lẻ. Ở mức tối thiểu, phần mềm phải cho phép người dùng

* tạo hoặc thêm các mục mới;
* đọc, truy xuất, tìm kiếm hoặc xem các mục hiện có;
* cập nhật hoặc chỉnh sửa các mục hiện có;
* xóa, hủy kích hoạt hoặc xóa các mục hiện có.

Nếu thiếu ít nhất bốn thao tác này, phần mềm không thể được coi là hoàn thiện. Bởi vì các hoạt động này rất cơ bản, chúng thường được ghi lại và mô tả dưới một tiêu đề toàn diện, chẳng hạn như "quản lý liên hệ", "quản lý nội dung" hoặc "bảo trì liên hệ" (hoặc "quản lý tài liệu" nói chung, tùy thuộc vào đơn vị lưu trữ cơ bản cho mỗi ứng dụng).

Các biến thể khác
-----------------

Các biến thể khác của CRUD bao gồm:

* ABCD (add, browse, change, delete) - "thêm, duyệt, thay đổi, xóa"
* CRUDL (create, read, update, delete, list) - "tạo, đọc, cập nhật, xoá, liệt kê"
* BREAD (browse, read, edit, add, delete) - "duyệt, đọc, sửa, thêm, xóa"
* DAVE (delete, add, view, edit) - "xóa, thêm, xem, sửa"
* CRAP (create, replicate, append, process) - "tạo, sao chép, nối thêm, xử lý"

Tham khảo
---------

1. ↑  Heller, Martin (ngày 29 tháng 1 năm 2007). "REST and CRUD: the Impedance Mismatch". *Developer World*. InfoWorld.
2. ↑  *Managing the Data-base Environment* tại Google Books
3. ↑  Martin, James (1983). *Managing the Data-base Environment*. Englewood Cliffs, New Jersey: Prentice-Hall. tr. 381. ISBN 0-135-50582-8.
4. ↑  Tom Spencer (16 tháng 9 năm 2014). "No REST for the whippet". Truy cập ngày 2 tháng 4 năm 2021.
5. ↑  Fielding, Roy (tháng 6 năm 2014). "Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content, Section 4". *IETF*. Internet Engineering Task Force (IETF). RFC 7231. Truy cập ngày 14 tháng 2 năm 2018.
6. ↑  Roy T. Fielding (20 tháng 3 năm 2009). "It is okay to use POST". roy.gbiv.com. Truy cập ngày 14 tháng 4 năm 2020.
7. ↑  Paul M. Jones (2008). "BREAD, not CRUD".
8. ↑  McGaw, James (ngày 21 tháng 6 năm 2010). *Beginning Django E-Commerce*. tr. 41. ISBN 9781430225362.
9. ↑  "CRAP and CRUD: From Database to Datacloud - Direct2DellEMC". *Direct2DellEMC* (bằng tiếng Anh). ngày 13 tháng 11 năm 2012. Truy cập ngày 2 tháng 4 năm 2021.