Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL:@variable so với biến. Có gì khác biệt?

MySQL có khái niệm về biến do người dùng xác định .

Chúng là các biến được nhập lỏng lẻo có thể được khởi tạo ở đâu đó trong một phiên và giữ nguyên giá trị của chúng cho đến khi phiên kết thúc.

Chúng được thêm vào trước bằng @ ký tên, như thế này:@var

Bạn có thể khởi tạo biến này bằng SET câu lệnh hoặc bên trong một truy vấn:

SET @var = 1

SELECT @var2 := 2

Khi bạn phát triển một thủ tục được lưu trữ trong MySQL, bạn có thể chuyển các tham số đầu vào và khai báo các biến cục bộ:

DELIMITER //

CREATE PROCEDURE prc_test (var INT)
BEGIN
    DECLARE  var2 INT;
    SET var2 = 1;
    SELECT  var2;
END;
//

DELIMITER ;

Các biến này không được thêm vào trước bất kỳ tiền tố nào.

Sự khác biệt giữa biến thủ tục và biến do người dùng xác định theo phiên cụ thể là biến thủ tục được khởi động lại thành NULL mỗi khi thủ tục được gọi, trong khi biến phiên cụ thể thì không:

CREATE PROCEDURE prc_test ()
BEGIN
    DECLARE var2 INT DEFAULT 1;
    SET var2 = var2 + 1;
    SET @var2 = @var2 + 1;
    SELECT  var2, @var2;
END;

SET @var2 = 1;

CALL prc_test();

var2  @var2
---   ---
2     2


CALL prc_test();

var2  @var2
---   ---
2     3


CALL prc_test();

var2  @var2
---   ---
2     4

Như bạn thấy, var2 (biến thủ tục) được khởi động lại mỗi khi thủ tục được gọi, trong khi @var2 (biến theo phiên cụ thể) thì không.

(Ngoài các biến do người dùng xác định, MySQL còn có một số "biến hệ thống" được xác định trước, có thể là "biến toàn cục", chẳng hạn như @@global.port hoặc "biến phiên" chẳng hạn như @@session.sql_mode; các "biến số phiên" này không liên quan đến các biến số phiên cụ thể do người dùng xác định.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khám phá MySQL Binlog Server - Ripple

  2. Cách Chèn Nhiều Hàng trong MySQL

  3. MySQL chọn với điều kiện CONCAT

  4. Làm cách nào để trích xuất hai chữ số liên tiếp từ một trường văn bản trong MySQL?

  5. Sự khác biệt giữa hai cách tiếp cận bảng nối này?