Thủ tục lưu trữ (stored procedure) là các đoạn mã SQL được “đóng gói” lại để dễ dàng sử dụng nhiều lần và nâng cao hiệu suất xử lý của cơ sở dữ liệu. Trong MySQL, việc tạo một thủ tục lưu trữ có thể giúp bạn thực hiện các công việc phức tạp chỉ với một dòng lệnh gọi. Sau đây là hướng dẫn chi tiết về cách tạo thủ tục lưu trữ trong MySQL sử dụng lệnh PROCEDURE.
Bắt đầu với thủ tục lưu trữ
Để bắt đầu, hãy tạo một cơ sở dữ liệu mới hoặc sử dụng một cơ sở dữ liệu đã có sẵn để thực hành. Dưới đây là lệnh để tạo một cơ sở dữ liệu mới:
CREATE DATABASE my_database;
USE my_database;
Cú pháp của lệnh PROCEDURE
Cú pháp cơ bản để tạo một thủ tục lưu trữ trong MySQL như sau:
DELIMITER //
CREATE PROCEDURE procedure_name (parameters)
BEGIN
-- Thân của thủ tục lưu trữ
SQL statements;
END //
DELIMITER ;
Giải thích:
- DELIMITER //: Thay đổi ký tự phân cách mặc định ";" để MySQL có thể hiểu rằng các lệnh trong thân thủ tục đều liên quan với nhau.
- CREATE PROCEDURE procedure_name: Khởi tạo thủ tục lưu trữ với tên là
procedure_name
. - parameters: Danh sách các tham số đầu vào, đầu ra hoặc cả hai.
- BEGIN ... END: Khối lệnh SQL được thực thi khi gọi thủ tục.
Ví dụ cụ thể
Chúng ta sẽ tạo một bảng đơn giản để lưu thông tin nhân viên và sau đó viết một thủ tục lưu trữ để chèn dữ liệu vào bảng.
Tạo bảng nhan_vien
CREATE TABLE nhan_vien (
id INT AUTO_INCREMENT PRIMARY KEY,
ten VARCHAR(100),
tuoi INT,
chuc_vu VARCHAR(100)
);
Tạo thủ tục lưu trữ them_nhan_vien
DELIMITER //
CREATE PROCEDURE them_nhan_vien (
IN p_ten VARCHAR(100),
IN p_tuoi INT,
IN p_chuc_vu VARCHAR(100)
)
BEGIN
INSERT INTO nhan_vien (ten, tuoi, chuc_vu)
VALUES (p_ten, p_tuoi, p_chuc_vu);
END //
DELIMITER ;
Đoạn mã trên tạo ra một thủ tục lưu trữ có tên them_nhan_vien
với ba tham số đầu vào: p_ten
, p_tuoi
, và p_chuc_vu
. Khi gọi thủ tục, những tham số này sẽ được dùng để chèn một bản ghi mới vào bảng nhan_vien
.
Gọi thủ tục lưu trữ
Để gọi thủ tục lưu trữ và chèn một nhân viên mới vào bảng, sử dụng lệnh CALL như sau:
CALL them_nhan_vien('Nguyen Van A', 30, 'Ky su');
Lệnh này sẽ chèn một bản ghi vào bảng nhan_vien
với thông tin tương ứng.
Thủ tục lưu trữ với giá trị trả về
Đôi khi, chúng ta cần một thủ tục lưu trữ trả về giá trị. Dưới đây là một ví dụ cho thủ tục trả về tổng số nhân viên trong bảng nhan_vien
.
DELIMITER //
CREATE PROCEDURE tong_so_nhan_vien (OUT total INT)
BEGIN
SELECT COUNT(*) INTO total FROM nhan_vien;
END //
DELIMITER ;
Để gọi thủ tục và nhận giá trị trả về:
CALL tong_so_nhan_vien(@tong);
SELECT @tong AS TongSoNhanVien;
Kết luận
Thủ tục lưu trữ trong MySQL là công cụ mạnh mẽ giúp tối ưu hóa và tái sử dụng mã SQL hiệu quả. Qua bài viết này, bạn đã có cái nhìn tổng quan về cách tạo, sử dụng và lợi ích của thủ tục lưu trữ. Hãy ứng dụng chúng vào các tác vụ thực tế của bạn để thấy rõ những tiện ích và hiệu quả mà chúng mang lại.
Comments