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. Chúng cho phép người dùng thực hiện các tác vụ phức tạp mà không cần phải viết lại mã SQL mỗi lần. Stored Procedures thường được sử dụng để encapsulate logic nghiệp vụ, xử lý dữ liệu, thực hiện các phép toán trên cơ sở dữ liệu, hoặc thực hiện các truy vấn phức tạp.
Lợi ích của Stored Procedure
- Tăng hiệu suất: Stored Procedure được biên dịch và lưu trữ trong cơ sở dữ liệu, giúp giảm thời gian thực thi khi gọi nhiều lần.
- Giảm băng thông mạng: Chỉ cần gửi lệnh gọi Stored Procedure thay vì nhiều câu lệnh SQL.
- Bảo mật: Có thể hạn chế quyền truy cập trực tiếp vào bảng và chỉ cho phép người dùng gọi Stored Procedure.
- Tính tái sử dụng: Giúp tái sử dụng mã trong nhiều ứng dụng khác nhau.
Ví dụ về Stored Procedure
Tình huống: Tạo một Stored Procedure để thêm một sản phẩm vào bảng products
.
1. Tạo bảng products
:
CREATE TABLE products ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, price DECIMAL(10, 2) NOT NULL );
2. Tạo Stored Procedure:
DELIMITER // CREATE PROCEDURE AddProduct(IN productName VARCHAR(255), IN productPrice DECIMAL(10, 2)) BEGIN INSERT INTO products (name, price) VALUES (productName, productPrice); END // DELIMITER ;
Giải thích:
- DELIMITER: Lệnh này thay đổi ký tự kết thúc câu lệnh mặc định (
;
) thành một ký tự khác (trong ví dụ này là//
). Điều này cho phép bạn viết nhiều câu lệnh trong một Stored Procedure mà không bị lỗi. - CREATE PROCEDURE: Đây là câu lệnh để tạo Stored Procedure. Bạn định nghĩa tên procedure (
AddProduct
) và các tham số đầu vào (trong trường hợp này làproductName
vàproductPrice
). - BEGIN … END: Đánh dấu phần thân của Stored Procedure, nơi bạn có thể viết nhiều câu lệnh SQL.
3. Gọi Stored Procedure trong Node.js
Để gọi Stored Procedure trong Node.js, bạn có thể sử dụng thư viện mysql2. Dưới đây là cách triển khai:
Bước 1: Cài đặt mysql2
npm install mysql2
Bước 2: Kết nối và gọi Stored Procedure
const mysql = require('mysql2/promise'); // Kết nối với cơ sở dữ liệu const pool = mysql.createPool({ host: 'localhost', user: 'root', password: '', database: 'your_database' }); async function addProduct(productName, productPrice) { const connection = await pool.getConnection(); try { // Gọi Stored Procedure await connection.execute('CALL AddProduct(?, ?)', [productName, productPrice]); console.log('Sản phẩm đã được thêm thành công!'); } catch (error) { console.error('Lỗi khi gọi Stored Procedure: ', error.message); } finally { connection.release(); } } // Gọi hàm để thêm sản phẩm addProduct('Sản phẩm A', 100.00);
Giải thích:
- mysql.createPool: Tạo một pool kết nối đến cơ sở dữ liệu để có thể tái sử dụng các kết nối.
- pool.getConnection: Lấy một kết nối từ pool.
- connection.execute: Gọi Stored Procedure với các tham số cần thiết.
- finally: Đảm bảo rằng kết nối được giải phóng sau khi thực hiện xong.
Tổng kết
Stored Procedure là một công cụ mạnh mẽ trong quản lý cơ sở dữ liệu, giúp bạn thực hiện các tác vụ phức tạp một cách hiệu quả và bảo mật hơn. Trong Node.js, bạn có thể dễ dàng gọi Stored Procedure với thư viện mysql2, cho phép bạn tương tác với cơ sở dữ liệu MySQL một cách linh hoạt.

Dương Trần Hà, hiện mình đang là kỹ công nghệ phần mềm và cũng là giám đốc thành lập công ty DTH Solutions. Mình có nhiều năm kinh nghiệm, kiến thức chuyên môn lập trình, nodejs, nestjs, laravel, yii2, reactjs, nextjs. Mình đã phát triển rất nhiều dự án thực tế cho doanh nghiệp, cơ quan. Mình đã đạt được một số thành công nhỏ, đồng thời mình vẫn đang tiếp tục học tập để trau dồi kiến thức mỗi ngày. Mình rất yêu thích công nghệ, đam mê chia sẻ những kiến thức, thông tin hữu ích cho mọi người.