2012-08-01 45 views
192

Come dichiarare una variabile in mysql, in modo che la mia seconda query possa usarla?Come dichiarare una variabile in MySQL?

Vorrei scrivere qualcosa di simile:

SET start = 1; 
SET finish = 10; 

SELECT * FROM places WHERE place BETWEEN start AND finish; 

risposta

337

Ci sono principalmente tre tipi di variabili in MySQL:

  1. User-defined variables (prefisso @):

    È può accedere a qualsiasi variabile definita dall'utente senza dichiararla o initi Allinearlo. Se si fa riferimento a una variabile che non è stata inizializzata , ha un valore di NULL e un tipo di stringa.

    SELECT @var_any_var_name 
    

    È possibile inizializzare una variabile utilizzando SET o SELECT dichiarazione:

    SET @start = 1, @finish = 10;  
    

    o

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

    variabili utente può essere assegnato un valore da un numero limitato di dati tipi: integer , decimale, virgola mobile, binaria o non binaria, o valore NULL.

    Le variabili definite dall'utente sono specifiche della sessione. Cioè, una variabile utente definita da un client non può essere vista o utilizzata da altri client .

    Possono essere utilizzati nelle query SELECT utilizzando Advanced MySQL user variable techniques.

  2. Local Variables (senza prefisso):

    variabili locali deve essere dichiarato utilizzando DECLARE prima accedervi.

    Possono essere usati come variabili locali e parametri immessi dentro uno stored procedure:

    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); 
    

    Se la clausola DEFAULT è mancante, il valore iniziale è NULL.

    L'ambito di una variabile locale è il blocco BEGIN ... END all'interno di che viene dichiarato.

  3. Server System Variables (con prefisso @@):

    Il server MySQL mantiene molte system variables configurato per un valore di default. Possono essere di tipo GLOBAL, SESSION o BOTH.

    Le variabili globali influiscono sul funzionamento generale del server mentre le variabili di sessione influiscono sul funzionamento di singole connessioni client.

    Per visualizzare i valori correnti utilizzati da un server in esecuzione, utilizzare l'istruzione SHOW VARIABLES o SELECT @@var_name.

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

    Possono essere impostati all'avvio del server utilizzando le opzioni sulla riga di comando o in un file di opzioni. maggior parte di essi può essere modificato in modo dinamico mentre il server è in esecuzione utilizzando SET GLOBAL o 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

In qualche modo l'operatore '' '= =' '' non ha funzionato per me. Ha funzionato bene quando ho usato l'operatore '' '::' '' '. – divinedragon

+14

L'operatore '=' funziona solo nella clausola 'SET'. Per assegnare un valore a una variabile nella query 'SELECT' puoi usare l'operatore': = ', ad es. 'SELECT @start: = 1' – Omesh

+2

Puoi per favore chiarire cosa significa:" Non c'è bisogno di dichiarare variabili Session definite dall'utente denotate con il prefisso @ "? – billynoah

8

Usa impostato o selezionare

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

esempio:

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

SET

SET @var_name = value 

O

SET @var := value 

entrambi gli operatori = e : = sono accettati


SELEZIONA

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

se più record trovato solo l'ultimo valore in col2 è conservare (override);

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

in questo caso il risultato di SELECT non è che contiene i valori col2

+0

Qual è la differenza tra '=' e ': ='? –

+1

Suppongo che per mysql SELECT la sintassi sia necessaria per separare il significato di = (confronto) da: = (asse) – bortunac

2

DECLARE nome_var [, nome_var] ... Tipo [valore DEFAULT] Questa istruzione dichiara le variabili locali all'interno dei programmi memorizzati.

Es. DICHIARARE id INT unsigned DEFAULT 1;

Per fornire un valore predefinito per una variabile, includere una clausola DEFAULT. Il valore può essere specificato come espressione; non deve essere una costante. Se manca la clausola DEFAULT, il valore iniziale è NULL.

Le variabili locali vengono trattate come parametri di routine memorizzati rispetto al tipo di dati e al controllo di overflow.

Le dichiarazioni delle variabili devono essere visualizzate prima delle dichiarazioni del cursore o del gestore.

I nomi delle variabili locali non fanno distinzione tra maiuscole e minuscole.I caratteri consentiti e le regole di quotazione sono gli stessi di altri identificatori

L'ambito di una variabile locale è il blocco BEGIN ... END entro il quale viene dichiarato. La variabile può essere riferita a blocchi nidificati all'interno del blocco dichiarante, ad eccezione di quei blocchi che dichiarano una variabile con lo stesso nome.

Problemi correlati