Trong các ứng dụng thực tế, đôi khi bạn cần thực hiện một chuỗi các thao tác SQL lặp đi lặp lại. Nếu mỗi lần bạn phải viết lại toàn bộ câu lệnh, vừa tốn thời gian, vừa dễ sai sót. Đó là lúc Stored Procedure (Thủ tục lưu trữ) phát huy tác dụng.
Stored Procedure giúp bạn đóng gói logic xử lý SQL vào một khối, có thể gọi lại nhiều lần, thậm chí có thể truyền tham số vào. Nó giống như việc bạn viết một hàm (function) trong ngôn ngữ lập trình vậy, nhưng ở đây là hàm dành cho SQL Server, MySQL, hay PostgreSQL.
Stored Procedure là gì?
Stored Procedure là một tập hợp các câu lệnh SQL được lưu trữ trong cơ sở dữ liệu, có thể gọi thực thi nhiều lần với cú pháp ngắn gọn.
Stored Procedure có thể:
- Nhận đầu vào (IN)
- Trả kết quả ra (OUT)
- Thực thi các thao tác như INSERT, UPDATE, DELETE, SELECT
- Giúp giảm số lần giao tiếp giữa ứng dụng và database → tối ưu hiệu năng
Cú pháp tạo Stored Procedure (MySQL)
DELIMITER //
CREATE PROCEDURE ten_thu_tuc(IN ten NVARCHAR(100))
BEGIN
SELECT * FROM users WHERE name = ten;
END //
DELIMITER ;
Giải thích:
DELIMITER //
: Tạm đổi dấu kết thúc câu lệnh từ;
sang//
để tránh nhầm với dấu;
bên trong procedure.CREATE PROCEDURE
: Tạo thủ tục mới.IN ten
: Tham số đầu vào tênten
.BEGIN ... END
: Khối chứa logic của thủ tục.
Gọi thủ tục đã tạo
CALL ten_thu_tuc('Linh');
Ví dụ 1: Tạo thủ tục thêm người dùng
DELIMITER //
CREATE PROCEDURE them_nguoi_dung(
IN ten NVARCHAR(100),
IN email NVARCHAR(100)
)
BEGIN
INSERT INTO users (name, email) VALUES (ten, email);
END //
DELIMITER ;
Gọi:
CALL them_nguoi_dung('Nam', 'nam@example.com');
Ví dụ 2: Thủ tục có giá trị trả ra (OUT)
DELIMITER //
CREATE PROCEDURE dem_so_luong_users(OUT so_luong INT)
BEGIN
SELECT COUNT(*) INTO so_luong FROM users;
END //
DELIMITER ;
Gọi:
CALL dem_so_luong_users(@ketqua);
SELECT @ketqua;
Khi nào nên dùng Stored Procedure?
Trường hợp | Nên dùng? |
---|---|
Logic phức tạp, nhiều bước xử lý | ✅ |
Tái sử dụng nhiều lần | ✅ |
Tăng bảo mật, che giấu truy vấn SQL | ✅ |
Truy vấn đơn giản, chỉ dùng 1 lần | ❌ |
Lưu ý:
- Đôi khi cần phân quyền để sử dụng / tạo Stored Procedure.
- Trong nhiều hệ quản trị như PostgreSQL, syntax sẽ có một vài khác biệt (ví dụ:
LANGUAGE plpgsql
…). - Quản lý stored procedure nên cẩn thận – khó bảo trì nếu viết quá dài.
Thực hành
- Tạo thủ tục
xem_don_hang
– truyềnuser_id
và liệt kê tất cả đơn hàng của họ. - Tạo thủ tục
cap_nhat_gia_san_pham
– truyềnproduct_id
,gia_moi
. - Tạo thủ tục
bao_cao_doanh_thu
– tính tổng doanh thu theo tháng.
Kết luận
Stored Procedure là một công cụ mạnh mẽ trong việc tối ưu hóa truy vấn và xử lý logic phía database. Dùng đúng lúc, đúng cách, bạn sẽ cải thiện hiệu suất hệ thống và bảo trì dễ dàng hơn.
👉 Trong bài sau, ta sẽ học đến Trigger – kích hoạt tự động khi dữ liệu thay đổi, giúp bạn kiểm soát database sâu hơn.
Thảo luận