1. Tổng quan về Biến MySQL
Vai trò và lợi ích của các biến trong MySQL
Các biến MySQL là công cụ hữu ích cho phép bạn lưu trữ giá trị trong các truy vấn và tái sử dụng các giá trị đó trong nhiều truy vấn. Điều này loại bỏ nhu cầu phải truy xuất lại cùng một dữ liệu nhiều lần và giúp các câu lệnh SQL ngắn gọn và hiệu quả hơn.
Có chủ yếu hai loại biến trong MySQL:
- Biến do người dùng định nghĩa : Các biến tạm thời được sử dụng trong một phiên làm việc cụ thể.
- Biến hệ thống : Các biến cấu hình được dùng để kiểm soát hành vi của máy chủ MySQL.
Trong phần này, chúng ta sẽ đầu tiên xem chi tiết về các biến do người dùng định nghĩa và sau đó giải thích cách sử dụng các biến hệ thống.
2. Các loại biến MySQL
2.1 Biến do người dùng định nghĩa
Các biến do người dùng định nghĩa chỉ áp dụng cho một phiên làm việc duy nhất và không thể được truy cập bởi các client khác. Điều này đảm bảo các biến có thể được tái sử dụng một cách an toàn trong cùng một phiên. Các biến được khai báo bằng ký hiệu @.
Ví dụ:
SET @user_id = 123;
SELECT @user_id;
Như đã chỉ ra ở trên, bạn có thể định nghĩa một biến bằng SET và tái sử dụng giá trị của nó trong các truy vấn tiếp theo. Một phương pháp khác để lưu kết quả truy vấn vào biến là SELECT INTO.
SELECT name INTO @user_name FROM users WHERE id = @user_id;
2.2 Biến hệ thống
Các biến hệ thống được dùng để điều chỉnh các thiết lập của máy chủ MySQL. Ví dụ, bạn có thể quản lý số lượng kết nối tối đa hoặc cấu hình các thiết lập thời gian chờ.
Ví dụ:
SHOW VARIABLES LIKE 'max_connections';
Truy vấn này hiển thị số lượng kết nối đồng thời tối đa mà máy chủ MySQL cho phép. Các biến hệ thống có thể được sửa đổi bằng lệnh SET và có thể áp dụng toàn cục hoặc ở mức phiên làm việc.
3. Khai báo và Sử dụng Biến
3.1 Cách khai báo biến
Bạn có thể khai báo biến bằng SET hoặc SELECT INTO. Câu lệnh SET đơn giản và cho phép bạn gán giá trị trực tiếp.
Ví dụ:
SET @user_name = 'Sato';
SELECT @user_name;
Mặt khác, sử dụng SELECT INTO cho phép bạn lưu kết quả truy vấn trực tiếp vào một biến.
Ví dụ:
SELECT name INTO @user_name FROM users WHERE id = 123;
3.2 Sử dụng biến trong truy vấn
Bằng cách sử dụng biến, bạn có thể tái sử dụng chúng như các tham số trong truy vấn. Ví dụ, truy vấn sau đây lấy thông tin người dùng bằng biến @user_id.
Ví dụ:
SELECT * FROM users WHERE id = @user_id;
Bằng cách này, các biến cho phép bạn giữ dữ liệu qua nhiều truy vấn trong cùng một phiên.
4. Các trường hợp sử dụng phổ biến
4.1 Tối ưu hoá truy vấn
Bạn có thể cải thiện hiệu năng bằng cách lưu dữ liệu thường dùng vào một biến một lần và tái sử dụng nó trong các truy vấn tiếp theo.
Ví dụ:
SELECT MAX(id) INTO @max_id FROM users;
Ở đây, ID người dùng tối đa được lưu trong một biến và được tái sử dụng trong các truy vấn sau.
4.2 Các trường hợp sử dụng thao tác ngày và giờ
Sử dụng biến cho các phép tính ngày và giờ hoặc quản lý dữ liệu lịch sử giúp dễ dàng hơn trong việc xử lý dữ liệu chuỗi thời gian.
Ví dụ:
SELECT NOW() INTO @current_time;
SELECT @current_time - INTERVAL 1 DAY INTO @yesterday;
Trong ví dụ này, thời gian hiện tại và một khoảng thời gian cụ thể được lưu trong các biến và được tái sử dụng trong các truy vấn khác. 
5. Sử dụng biến trong Stored Procedures
Sử dụng biến trong stored procedures cho phép bạn xử lý logic phức tạp một cách có cấu trúc và cải thiện khả năng tái sử dụng mã. Ví dụ sau đây minh họa một stored procedure lấy thông tin người dùng.
Ví dụ:
CREATE PROCEDURE get_user_info(IN user_id INT, OUT user_name VARCHAR(255))
BEGIN
SELECT name INTO user_name FROM users WHERE id = user_id;
END;
Bằng cách gọi procedure này, bạn có thể truyền ID người dùng làm đối số và lưu kết quả vào một biến.
6. Các thực tiễn tốt nhất khi sử dụng biến
6.1 Tầm quan trọng của việc khởi tạo
Các biến luôn phải được khởi tạo trước khi sử dụng. Tham chiếu tới một biến chưa được khởi tạo có thể trả về NULL. Điều này đặc biệt quan trọng khi sử dụng cùng một biến trong nhiều truy vấn.
6.2 Quản lý Phạm vi Trong một Phiên
Các biến do người dùng định nghĩa chỉ có hiệu lực trong một phiên. Khi phiên kết thúc, các biến sẽ được đặt lại. Nếu bạn cần sử dụng biến qua các phiên, hãy cân nhắc các phương pháp thay thế như bảng tạm.
7. Kỹ thuật Nâng cao
7.1 Xử lý Dữ liệu Bằng Cursors
Khi xử lý một lượng lớn dữ liệu, bạn có thể sử dụng cursors để xử lý kết quả truy vấn từng hàng một. Điều này cho phép bạn lưu kết quả truy vấn vào các biến trong khi thực hiện xử lý tuần tự.
Ví dụ:
DECLARE cursor_user CURSOR FOR SELECT id, name FROM users;
Sử dụng cursors cho phép xử lý hiệu quả nhiều hàng dữ liệu.
8. Kết luận
Bằng cách sử dụng các biến MySQL, bạn có thể quản lý truy vấn một cách hiệu quả và cải thiện cả khả năng đọc mã và hiệu năng. Việc phân biệt đúng giữa các biến do người dùng định nghĩa và các biến hệ thống cho phép thực hiện các thao tác dữ liệu tinh vi hơn. Đặc biệt, kết hợp các biến với các kỹ thuật nâng cao như stored procedures và cursors có thể tăng đáng kể khả năng xử lý dữ liệu trong MySQL.


