2012-08-01 77 views
192

Làm thế nào để khai báo một biến trong mysql, để truy vấn thứ hai của tôi có thể sử dụng nó?Làm thế nào để khai báo một biến trong MySQL?

Tôi muốn viết một cái gì đó như:

SET start = 1; 
SET finish = 10; 

SELECT * FROM places WHERE place BETWEEN start AND finish; 

Trả lời

337

chủ yếu Có ba loại biến trong MySQL:

  1. User-defined variables (bắt đầu bằng @):

    Bạn có thể truy cập bất kỳ biến do người dùng xác định nào mà không khai báo hoặc khởi tạo kích thước nó. Nếu bạn tham chiếu đến biến chưa được khởi tạo , giá trị này có giá trị là NULL và một loại chuỗi.

    SELECT @var_any_var_name 
    

    Bạn có thể khởi tạo một biến sử dụng SET hoặc SELECT tuyên bố:

    SET @start = 1, @finish = 10;  
    

    hoặc

    SELECT @start := 1, @finish := 10; 
    
    SELECT * FROM places WHERE place BETWEEN @start AND @finish; 
    

    biến Người dùng có thể được gán một giá trị từ một tập hạn chế về dữ liệu loại: integer , thập phân, dấu chấm động, nhị phân hoặc chuỗi không phải là chuỗi, hoặc giá trị NULL.

    Biến do người dùng xác định là phiên cụ thể. Tức là, một biến số người dùng được xác định bởi một khách hàng không thể được xem hoặc sử dụng bởi các khách hàng khác.

    Chúng có thể được sử dụng trong SELECT truy vấn sử dụng Advanced MySQL user variable techniques.

  2. Local Variables (không có tiền tố):

    biến địa phương cần phải được khai báo sử dụng DECLARE trước truy cập vào nó.

    Chúng có thể được sử dụng như là biến địa phương và các đầu vào thông số bên trong một thủ tục lưu trữ:

    DELIMITER // 
    
    CREATE PROCEDURE sp_test(var1 INT) 
    BEGIN 
        DECLARE start INT unsigned DEFAULT 1; 
        DECLARE finish INT unsigned DEFAULT 10; 
    
        SELECT var1, start, finish; 
    
        SELECT * FROM places WHERE place BETWEEN start AND finish; 
    END; // 
    
    DELIMITER ; 
    
    CALL sp_test(5); 
    

    Nếu mệnh đề DEFAULT là mất tích, giá trị ban đầu là NULL.

    Phạm vi của biến cục bộ là khối BEGIN ... END trong phạm vi được khai báo.

  3. Server System Variables (bắt đầu bằng @@):

    Các máy chủ MySQL duy trì nhiều system variables cấu hình để một giá trị mặc định. Chúng có thể thuộc loại GLOBAL, SESSION hoặc BOTH.

    Biến toàn cầu ảnh hưởng đến hoạt động chung của máy chủ trong khi các biến phiên ảnh hưởng đến hoạt động của nó đối với các kết nối máy khách riêng lẻ.

    Để xem các giá trị hiện tại được máy chủ đang chạy sử dụng, hãy sử dụng câu hỏi SHOW VARIABLES hoặc SELECT @@var_name.

    SHOW VARIABLES LIKE '%wait_timeout%'; 
    
    SELECT @@sort_buffer_size; 
    

    Chúng có thể được đặt lúc khởi động máy chủ bằng cách sử dụng tùy chọn trên dòng lệnh hoặc trong tệp tùy chọn. Hầu hết trong số họ có thể thay đổi tự động trong khi máy chủ đang chạy sử dụng SET GLOBAL hoặc SET SESSION:

    -- Syntax to Set value to a Global variable: 
    SET GLOBAL sort_buffer_size=1000000; 
    SET @@global.sort_buffer_size=1000000; 
    
    -- Syntax to Set value to a Session variable: 
    SET sort_buffer_size=1000000; 
    SET SESSION sort_buffer_size=1000000; 
    SET @@sort_buffer_size=1000000; 
    SET @@local.sort_buffer_size=10000; 
    
+1

Bằng cách nào đó toán tử '' '' = '' '' không hoạt động đối với tôi. Nó hoạt động tốt khi tôi sử dụng toán tử '' '': = '' ''. – divinedragon

+14

'=' toán tử chỉ hoạt động trong mệnh đề 'SET'. Để gán giá trị cho một biến trong truy vấn 'SELECT', bạn có thể sử dụng toán tử': = ', ví dụ: 'SELECT @start: = 1' – Omesh

+2

Bạn có thể làm rõ điều này có nghĩa là:" Không cần khai báo biến Session do người dùng xác định được biểu thị bằng tiền tố @ "? – billynoah

8

Sử dụng thiết hoặc chọn

SET @counter := 100; 
SELECT @variable_name := value; 

dụ:

SELECT @price := MAX(product.price) 
FROM product 
7

SET

SET @var_name = value 

HOẶC

SET @var := value 

cả các nhà khai thác =: = được chấp nhận


CHỌN

SELECT col1, @var_name := col2 from tb_name WHERE "conditon"; 

nếu nhiều bộ hồ sơ chỉ có giá trị cuối cùng trong col2 là giữ (ghi đè);

SELECT col1, col2 INTO @var_name, col3 FROM ..... 

trong trường hợp này là kết quả của chọn không chứa giá trị col2

+0

Sự khác nhau giữa '=' và ': =' là gì? –

+1

Tôi đoán rằng đối với cú pháp SELECT mysql là cần thiết để tách ý nghĩa của = (so sánh) từ: = (asign) – bortunac

2

DECLARE var_name [, var_name] ... loại [DEFAULT value] Tuyên bố này tuyên bố các biến địa phương trong chương trình lưu trữ.

Ví dụ: DECLARE id INT chưa ký DEFAULT 1;

Để cung cấp giá trị mặc định cho biến, hãy bao gồm mệnh đề DEFAULT. Giá trị có thể được chỉ định làm biểu thức; nó không cần phải là hằng số. Nếu mệnh đề DEFAULT bị thiếu, giá trị ban đầu là NULL.

Biến cục bộ được xử lý như các tham số thông thường được lưu trữ liên quan đến kiểu dữ liệu và kiểm tra tràn.

Tuyên bố biến phải xuất hiện trước khai báo con trỏ hoặc trình xử lý.

Tên biến cục bộ không phân biệt chữ hoa chữ thường.Các ký tự được phép và quy tắc trích dẫn giống như đối với các số nhận dạng khác

Phạm vi của biến cục bộ là BEGIN ... khối END trong đó được khai báo. Biến có thể được tham chiếu trong các khối lồng nhau trong khối khai báo, ngoại trừ các khối khai báo một biến có cùng tên.

Các vấn đề liên quan