Stored Procedures (Thủ tục lưu trữ) trong MySQL là một tập hợp các câu lệnh SQL được lưu trữ trên máy chủ cơ sở dữ liệu và có thể được thực thi nhiều lần với các tham số đầu vào. Stored Procedures giúp cải thiện hiệu suất, bảo mật và tính bảo trì của ứng dụng cơ sở dữ liệu.
Lợi ích của Stored Procedures
- Hiệu suất Tốt Hơn: Thủ tục lưu trữ giúp giảm thiểu số lượng dữ liệu cần truyền qua mạng giữa ứng dụng và cơ sở dữ liệu vì các câu lệnh SQL đã được lưu trữ trên máy chủ cơ sở dữ liệu và thực thi trực tiếp tại đó.
- Bảo Mật Tốt Hơn: Bạn có thể hạn chế quyền truy cập trực tiếp vào các bảng và chỉ cho phép truy cập qua các thủ tục lưu trữ. Điều này giúp bảo vệ dữ liệu và giảm nguy cơ lỗi.
- Tái Sử Dụng Mã: Thủ tục lưu trữ cho phép bạn viết mã SQL một lần và sử dụng lại nhiều lần mà không cần phải viết lại mã trong từng ứng dụng hoặc câu lệnh SQL.
- Khả Năng Bảo Trì: Thay vì cập nhật mã SQL ở nhiều nơi khác nhau, bạn chỉ cần cập nhật mã trong một thủ tục lưu trữ, giúp dễ dàng quản lý và bảo trì.
- Xử Lý Lỗi: Thủ tục lưu trữ cung cấp các cơ chế xử lý lỗi và kiểm soát giao dịch, giúp quản lý các hoạt động cơ sở dữ liệu phức tạp.
Cú Pháp Cơ Bản
- Tạo Stored Procedure Để tạo một thủ tục lưu trữ, sử dụng câu lệnh
CREATE PROCEDURE
. Cú pháp cơ bản là:
DELIMITER // CREATE PROCEDURE ten_thu_tuc (tham_so1 TYPE, tham_so2 TYPE) BEGIN -- Câu lệnh SQL END // DELIMITER ;
DELIMITER //
vàDELIMITER ;
: Thay đổi ký tự phân cách lệnh từ;
sang//
để định nghĩa kết thúc thủ tục lưu trữ, sau đó khôi phục lại ký tự phân cách lệnh mặc định.CREATE PROCEDURE ten_thu_tuc
: Tạo một thủ tục lưu trữ mới với tênten_thu_tuc
.(tham_so1 TYPE, tham_so2 TYPE)
: Các tham số đầu vào của thủ tục.BEGIN ... END
: Phần thân của thủ tục, nơi bạn viết các câu lệnh SQL.
- Gọi Stored Procedure Để gọi một thủ tục lưu trữ, sử dụng câu lệnh
CALL
:
CALL ten_thu_tuc(tham_so1, tham_so2);
- Ví Dụ Cụ Thể Giả sử bạn muốn tạo một thủ tục lưu trữ để tính tổng số lượng đơn hàng của một khách hàng cụ thể:
DELIMITER // CREATE PROCEDURE TinhTongDonHang(IN khachHangID INT, OUT tongDonHang DECIMAL(10,2)) BEGIN SELECT SUM(tong_tien) INTO tongDonHang FROM DonHang WHERE MaKhachHang = khachHangID; END // DELIMITER ;
IN khachHangID INT
: Tham số đầu vào, ID của khách hàng.OUT tongDonHang DECIMAL(10,2)
: Tham số đầu ra, tổng số tiền của đơn hàng.SELECT SUM(tong_tien) INTO tongDonHang FROM DonHang WHERE MaKhachHang = khachHangID
: Tính tổng số tiền của đơn hàng và lưu vào biếntongDonHang
. Để gọi thủ tục này và lấy kết quả:
CALL TinhTongDonHang(123, @tongDonHang); SELECT @tongDonHang AS TongDonHang;
Quản Lý Stored Procedures
- Danh Sách Stored Procedures Để xem danh sách tất cả các thủ tục lưu trữ trong cơ sở dữ liệu hiện tại:
SHOW PROCEDURE STATUS;
- Xóa Stored Procedure Để xóa một thủ tục lưu trữ:
DROP PROCEDURE IF EXISTS ten_thu_tuc;
- Sửa Đổi Stored Procedure Để sửa đổi một thủ tục lưu trữ, bạn có thể sử dụng câu lệnh
ALTER PROCEDURE
(có sẵn trong một số phiên bản MySQL) hoặc bạn cần phải xóa và tạo lại thủ tục nếu không hỗ trợALTER
.
Tóm tắt
- Stored Procedures là tập hợp các câu lệnh SQL lưu trữ trên máy chủ cơ sở dữ liệu, giúp cải thiện hiệu suất, bảo mật và khả năng bảo trì.
- Tạo Stored Procedure với
CREATE PROCEDURE
, Gọi Stored Procedure vớiCALL
, và có thể quản lý chúng bằng các lệnh nhưSHOW PROCEDURE STATUS
vàDROP PROCEDURE
. - Stored Procedures có thể sử dụng tham số đầu vào (
IN
), tham số đầu ra (OUT
), và tham số đầu vào/đầu ra (INOUT
).