การเตรียมข้อมูล
mysql> CREATE TABLE DemoTable1864 (
Id INT,
FirstName VARCHAR(20),
LastName VARCHAR(20)
);
mysql> INSERT INTO DemoTable1864 VALUES
(101, 'Chris', 'Brown'),
(102, 'David', 'Miller'),
(103, 'Adam', 'Smith'),
(104, 'John', 'Doe');
กำหนดค่าตัวแปรด้วย SELECT INTO
mysql> SELECT @fName := FirstName, @lName := LastName
FROM DemoTable1864
WHERE Id = 103;
ผลลัพธ์:
+-------------------+------------------+
| @fName := FirstName | @lName := LastName |
+-------------------+------------------+
| Adam | Smith |
+-------------------+------------------+
การใช้งานตัวแปรต่อไป
mysql> SELECT @fName, @lName;
+--------+--------+
| @fName | @lName |
+--------+--------+
| Adam | Smith |
+--------+--------+
หลักการสำคัญ
- ตัวแปร User-Defined เริ่มต้นด้วย
@(เช่น@varName) - Scope: Session-level (หายเมื่อ Disconnect)
:=ใช้สำหรับ Assignment ใน SELECT (แยกจาก=ใน SET)- ใน SET ใช้
=หรือ:=ก็ได้
วิธีอื่น: SET กับ Subquery
-- ต้องคืนค่า 1 แถว 1 คอลัมน์
SET @fName = (SELECT FirstName FROM DemoTable1864 WHERE Id = 103);
SET @lName = (SELECT LastName FROM DemoTable1864 WHERE Id = 103);
กรณีใช้งานจริง
- เก็บค่าระหว่าง Stored Procedure
- ส่งค่าระหว่าง Query หลายขั้นตอน
- Debug/Inspect ค่าระหว่างการทำงาน
- Dynamic SQL ใน Prepared Statements
ข้อควรระวัง
- Query ต้องคืนค่า 1 แถวเท่านั้น (Error ถ้าหลายแถว)
- ใช้
LIMIT 1ป้องกัน Error - ตัวแปรไม่ได้เป็น Transaction-safe