MySQL cho phép tạo hàm do người dùng định nghĩa (UDF - User Defined Function) để tái sử dụng logic phức tạp trong truy vấn.
Cú pháp cơ bản
DELIMITER //
CREATE FUNCTION tenHam(thamSo) RETURNS kieuDuLieu
DETERMINISTIC
NO SQL
BEGIN
-- cac lenh
RETURN ketQua;
END //
DELIMITER ;Ví dụ: Tách họ từ họ tên đầy đủ
mysql> DELIMITER //
mysql> CREATE FUNCTION get_First_Name(Name VARCHAR(255)) RETURNS VARCHAR(255)
DETERMINISTIC
NO SQL
BEGIN
RETURN LEFT(Name, LOCATE(' ', Name) - 1);
END
//
Query OK, 0 rows affected (0.20 sec)
mysql> DELIMITER ;Gọi hàm
mysql> select get_First_Name('David Miller');+--------------------------------+
| get_First_Name('David Miller') |
+--------------------------------+
| David |
+--------------------------------+
1 row in set, 2 warnings (0.00 sec)Giải thích các từ khóa:
DETERMINISTIC- hàm luôn trả về cùng kết quả với cùng đầu vào (tối ưu cache)NO SQL- hàm không chứa câu lệnh SQL (có thể làREADS SQL DATAhoặcMODIFIES SQL DATA)DELIMITER- thay đổi ký tự kết thúc câu lệnh để tránh nhầm lẫn với dấu ; bên trong function