

FUNCTION Trong MySQL – Định Nghĩa Hàm Tùy Chỉnh Trả Về Giá Trị
- 08-07-2025
- Toanngo92
- 0 Comments
Trong bài viết này, chúng ta sẽ tìm hiểu về FUNCTION
trong MySQL – một thành phần quan trọng bên cạnh Stored Procedure
. FUNCTION
giúp bạn định nghĩa một hàm có thể tái sử dụng, trả về giá trị, và có thể được sử dụng trực tiếp trong câu lệnh SQL như một biểu thức.
Mục lục
✅ 1. FUNCTION
là gì?
FUNCTION
trong MySQL là hàm do người dùng tự định nghĩa, nhận đầu vào và trả về một giá trị duy nhất.- Khác với
Stored Procedure
(có thể trả về nhiều dữ liệu),FUNCTION
chỉ dùng trong biểu thức và trả về một giá trị đơn.
✅ 2. Khi nào nên dùng FUNCTION
?
Dùng FUNCTION khi… | Lý do |
---|---|
Cần tái sử dụng logic tính toán đơn lẻ | Tránh viết lại nhiều lần |
Cần gọi trong SELECT , WHERE , ORDER BY , v.v. | Hàm có thể dùng như biểu thức SQL |
Cần xử lý cột dữ liệu động | Ví dụ: định dạng, phân loại, chuyển đổi dữ liệu… |
✅ 3. Cú pháp tạo FUNCTION
DELIMITER $$
CREATE FUNCTION ten_ham (tham_so KIEU)
RETURNS kieu_tra_ve
DETERMINISTIC
BEGIN
-- khai báo biến nếu cần
-- logic tính toán
RETURN gia_tri;
END$$
DELIMITER ;
DETERMINISTIC
: khai báo hàm luôn trả cùng kết quả nếu đầu vào giống nhau (giúp MySQL tối ưu).
✅ 4. Ví dụ cơ bản: Hàm tính bình phương
DELIMITER $$
CREATE FUNCTION BinhPhuong(n INT)
RETURNS INT
DETERMINISTIC
BEGIN
RETURN n * n;
END$$
DELIMITER ;
Gọi trong SELECT
:
SELECT BinhPhuong(5); -- kết quả: 25
Hoặc áp dụng trên bảng:
SELECT name, age, BinhPhuong(age) AS tuoi_binh_phuong
FROM Students;
✅ 5. Hàm phân loại tuổi
DELIMITER $$
CREATE FUNCTION XepLoaiTuoi(tuoi INT)
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
DECLARE loai VARCHAR(20);
IF tuoi < 18 THEN
SET loai = 'Trẻ em';
ELSEIF tuoi <= 60 THEN
SET loai = 'Người lớn';
ELSE
SET loai = 'Người già';
END IF;
RETURN loai;
END$$
DELIMITER ;
SELECT name, age, XepLoaiTuoi(age) AS do_tuoi
FROM Students;
✅ 6. So sánh FUNCTION
và PROCEDURE
Tiêu chí | FUNCTION | PROCEDURE |
---|---|---|
Trả về giá trị | ✅ Có (RETURN ) | ❌ Không, dùng OUT hoặc SELECT |
Dùng trong câu lệnh SELECT | ✅ Có thể dùng như biểu thức | ❌ Không thể gọi trong SELECT |
Gọi bằng CALL | ❌ Không dùng CALL | ✅ Dùng CALL |
Ứng dụng | Tính toán đơn giản, xử lý 1 dòng | Thao tác nhiều dòng, nhiều bảng |
✅ 7. Xem và xóa FUNCTION
Xem danh sách:
SHOW FUNCTION STATUS WHERE Db = 'ten_database';
Xem chi tiết:
SHOW CREATE FUNCTION BinhPhuong;
Xóa hàm:
DROP FUNCTION IF EXISTS BinhPhuong;
✅ 8. Lưu ý khi dùng FUNCTION
Lưu ý | Giải thích |
---|---|
✅ Chỉ trả về một giá trị đơn | Không thể trả về nhiều dòng như SELECT * |
❌ Không được thay đổi dữ liệu trực tiếp | Không dùng INSERT , UPDATE , DELETE trong hàm |
✅ Có thể gọi trong SELECT , WHERE | Nhưng không thể gọi trong CALL |
❌ Không hỗ trợ thao tác phức tạp | Nếu cần thao tác nhiều, hãy dùng Stored Procedure |
📘 Kết Luận
FUNCTION
rất hữu ích khi bạn cần xử lý logic đơn giản, có đầu vào và đầu ra rõ ràng.- Nó giúp bạn viết SQL gọn gàng, dễ tái sử dụng và chuẩn hóa logic tính toán.
- Kết hợp cùng
VIEW
,TRIGGER
,INDEX
,JOIN
sẽ giúp bạn xây dựng hệ thống dữ liệu mạnh mẽ và hiệu quả.