Cú pháp
Sử dụng biến user-defined (@ten_bien) gán từ subquery hoặc trực tiếp.
Cách 1: SET với subquery
Tạo bảng:
CREATE TABLE DemoTable631 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(100)
);
INSERT INTO DemoTable631(StudentName) VALUES
('John Smith'), ('Adam Smith'), ('David Miller');
Lưu tên sinh viên ID=2 vào biến:
SET @fullName = (SELECT StudentName FROM DemoTable631 WHERE StudentId = 2);
Hiển thị biến:
SELECT @fullName;
Kết quả: Adam Smith.
Cách 2: SELECT INTO (trong stored program)
DELIMITER //
CREATE PROCEDURE GetStudentName(IN p_id INT, OUT p_name VARCHAR(100))
BEGIN
SELECT StudentName INTO p_name
FROM DemoTable631
WHERE StudentId = p_id;
END //
DELIMITER ;
Gọi:
CALL GetStudentName(2, @name);
SELECT @name;
Cách 3: SELECT ... INTO @var (ngoài stored program)
SELECT StudentName INTO @fullName
FROM DemoTable631
WHERE StudentId = 2;
Lưu ý quan trọng
- Subquery trong SET phải trả về đúng 1 dòng, 1 cột. Nếu 0 dòng → NULL, nếu >1 dòng → ERROR 1242.
- Biến
@varlà session-scoped (sống suốt connection). - Không cần DECLARE cho @var (khác với local variable trong stored program).
- Kiểu dữ liệu tự động suy luận từ giá trị gán.
Ứng dụng
- Truyền giá trị giữa các statement trong cùng session.
- Dynamic SQL:
SET @sql = CONCAT('SELECT * FROM ', @table); PREPARE stmt FROM @sql; EXECUTE stmt;. - Lưu cấu hình, counter, flag trong script SQL dài.