Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cú pháp tham số đầu vào (biến) trong truy vấn MySQL?

Sử dụng biến người dùng (user-defined variable) với tiền tố @ và lệnh SET để lưu giá trị tạm thời trong session.

Tạo bảng

mysql> CREATE TABLE DemoTable (Id INT, FirstName VARCHAR(20), LastName VARCHAR(20));

Chèn dữ liệu

mysql> INSERT INTO DemoTable VALUES(10, 'Carol', 'Taylor'), (20, 'John', 'Doe'), (30, 'John', 'Smith'), (40, 'David', 'Miller');

Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+------+-----------+----------+
| Id   | FirstName | LastName |
+------+-----------+----------+
| 10   | Carol     | Taylor   |
| 20   | John      | Doe      |
| 30   | John      | Smith    |
| 40   | David     | Miller   |
+------+-----------+----------+

Đặt biến và sử dụng trong WHERE

mysql> SET @myId := 30;
mysql> SELECT * FROM DemoTable WHERE Id = @myId;
+------+-----------+----------+
| Id   | FirstName | LastName |
+------+-----------+----------+
| 30   | John      | Smith    |
+------+-----------+----------+

Cú pháp SET biến

Cú phápVí dụGhi chú
SET @var = valueSET @x = 10Phép gán (có thể gây nhầm lẫn với so sánh trong SELECT)
SET @var := valueSET @x := 10Rõ ràng là gán (khuyên dùng)
SELECT @var := valueSELECT @x := 10Gán trong SELECT

Phạm vi biến

  • @var: Session variable — tồn tại suốt kết nối, chỉ session hiện tại thấy
  • @@var: System variable (global/session)
  • DECLARE var: Local variable — chỉ trong BEGIN...END (Stored Procedure/Function/Trigger)

Ứng dụng thực tế

-- Lưu kết quả truy vấn vào biến
SELECT @max_id := MAX(Id) FROM DemoTable;
SELECT * FROM DemoTable WHERE Id = @max_id;

-- Dùng trong IN
SET @ids = '10,20,30';
SELECT * FROM DemoTable WHERE FIND_IN_SET(Id, @ids); -- Không tối ưu

-- Prepared Statement (an toàn hơn, tránh SQL injection)
PREPARE stmt FROM 'SELECT * FROM DemoTable WHERE Id = ?';
SET @param = 30;
EXECUTE stmt USING @param;
DEALLOCATE PREPARE stmt;

Prepared Statement vs User Variable

Prepared Statement an toàn hơn (parameterized), hiệu năng tốt hơn (parse once), nên dùng trong ứng dụng. Biến @ phù hợp cho ad-hoc query, script, debug.