

Stored Procedure Trong MySQL — thủ tục lưu trữ
- 08-07-2025
- Toanngo92
- 0 Comments
Stored Procedure
trong MySQL – một tính năng rất mạnh mẽ để đóng gói logic xử lý, tương tự như hàm (function) trong các ngôn ngữ lập trình. Đây là phần quan trọng nếu bạn muốn tách biệt xử lý logic phía CSDL, giảm tải cho ứng dụng phía trên.
Mục lục
✅ 1. Stored Procedure
là gì?
Stored Procedure
(thủ tục lưu trữ) là một tập hợp các câu lệnh SQL được lưu sẵn trong cơ sở dữ liệu và có thể được gọi lại nhiều lần.- Nó giống như một hàm có thể nhận tham số và thực thi một khối SQL.
- Được sử dụng để:
- Tự động hóa các tác vụ lặp lại
- Tách logic nghiệp vụ khỏi ứng dụng
- Nâng cao bảo mật và hiệu suất
✅ 2. Cú pháp tạo Stored Procedure
DELIMITER $$
CREATE PROCEDURE ten_thu_tuc ([IN|OUT|INOUT] tham_so KIEU)
BEGIN
-- câu lệnh SQL
END$$
DELIMITER ;
DELIMITER $$
dùng để tránh nhầm lẫn giữa dấu;
trong câu lệnh và kết thúc thủ tục.
✅ 3. Ví dụ đơn giản
🧪 Bảng mẫu:
CREATE TABLE Students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT
);
📌 Tạo procedure thêm sinh viên:
DELIMITER $$
CREATE PROCEDURE AddStudent(IN p_name VARCHAR(50), IN p_age INT)
BEGIN
INSERT INTO Students(name, age)
VALUES (p_name, p_age);
END$$
DELIMITER ;
🔁 Gọi procedure:
CALL AddStudent('Toan', 20);
✅ 4. Procedure có OUT
và INOUT
DELIMITER $$
CREATE PROCEDURE GetStudentCount(OUT total INT)
BEGIN
SELECT COUNT(*) INTO total FROM Students;
END$$
DELIMITER ;
Gọi và nhận kết quả:
CALL GetStudentCount(@count);
SELECT @count;
✅ 5. Các câu lệnh bên trong Procedure
Bạn có thể dùng:
Lệnh | Mô tả |
---|---|
DECLARE | Khai báo biến |
SET | Gán giá trị cho biến |
IF...THEN | Cấu trúc điều kiện |
LOOP , WHILE , REPEAT | Lặp |
CURSOR | Truy vấn nhiều dòng (ít dùng hơn) |
✅ 6. Ví dụ có IF
logic
DELIMITER $$
CREATE PROCEDURE CheckAge(IN p_age INT)
BEGIN
IF p_age >= 18 THEN
SELECT 'Đã đủ tuổi trưởng thành' AS KetQua;
ELSE
SELECT 'Chưa đủ tuổi' AS KetQua;
END IF;
END$$
DELIMITER ;
CALL CheckAge(20);
✅ 7. Quản lý thủ tục
Xem danh sách procedure:
SHOW PROCEDURE STATUS WHERE Db = 'ten_database';
Xem chi tiết thủ tục:
SHOW CREATE PROCEDURE AddStudent;
Xóa thủ tục:
DROP PROCEDURE IF EXISTS AddStudent;
✅ 8. Ưu và nhược điểm
Ưu điểm | Nhược điểm |
---|---|
✅ Giúp tái sử dụng truy vấn | ❌ Cần hiểu cú pháp riêng |
✅ Bảo mật – không cần lộ SQL | ❌ Debug, log khó hơn phía ứng dụng |
✅ Chạy nhanh hơn truy vấn động | ❌ Không phù hợp logic phức tạp UI |
📘 Kết Luận
Stored Procedure
rất hữu ích khi bạn cần tự động hóa xử lý, giảm logic ở ứng dụng và tăng bảo mật.- Nó giúp bạn đóng gói truy vấn, xử lý logic trực tiếp trong CSDL mà vẫn có thể dễ dàng gọi lại bất cứ lúc nào.
- Nên dùng cho: tạo báo cáo, thêm dữ liệu có điều kiện, cập nhật nhiều bảng…