it-swarm.com.de

Wie deklariere ich eine Variable in MySQL?

Wie deklariere ich eine Variable in mysql, damit meine zweite Abfrage sie verwenden kann?

Ich möchte etwas schreiben wie:

SET start = 1;
SET finish = 10;

SELECT * FROM places WHERE place BETWEEN start AND finish;
282
cdub

Es gibt hauptsächlich drei Arten von Variablen in MySQL:

  1. Benutzerdefinierte Variablen (mit @ vorangestellt): 

    Sie können auf jede benutzerdefinierte Variable zugreifen, ohne sie zu deklarieren oder Zu initialisieren. Wenn Sie sich auf eine Variable beziehen, die nicht mit Initialisiert wurde, hat sie den Wert NULL und einen Typ von Zeichenfolge.

    SELECT @var_any_var_name
    

    Sie können eine Variable mit der Anweisung SET oder SELECT initialisieren:

    SET @start = 1, @finish = 10;    
    

    oder 

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

    Benutzervariablen kann ein Wert aus einer begrenzten Menge von Daten zugewiesen werden. Typen: Ganzzahl, Dezimalzahl, Gleitkomma, binäre oder nicht-binäre Zeichenfolge, Wert oder NULL-Wert.

    Benutzerdefinierte Variablen sind sitzungsspezifisch. Das heißt, eine von einem Client definierte Variable "" Kann von anderen Clients nicht gesehen oder verwendet werden.

    Sie können in SELECT-Abfragen mit Advanced MySQL-Benutzervariablentechniken verwendet werden.

  2. Lokale Variablen (ohne Präfix):

    Lokale Variablen müssen vor dem Zugriff auf DECLARE deklariert werden.

    Sie können als lokale Variablen und die Eingabeparameter Innerhalb einer gespeicherten Prozedur verwendet werden: 

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

    Wenn die DEFAULT-Klausel fehlt, lautet der Anfangswert NULL

    Der Gültigkeitsbereich einer lokalen Variablen ist der BEGIN ... END-Block in

  3. Serversystemvariablen (mit @@ vorangestellt):

    Der MySQL-Server verwaltet viele Systemvariablen , die auf einen Standardwert ... konfiguriert sind. Sie können vom Typ GLOBAL, SESSION oder BOTH sein.

    Globale Variablen wirken sich auf den Gesamtbetrieb des Servers aus, während Sitzungsvariablen ihren Betrieb für einzelne Clientverbindungen beeinflussen.

    Um die aktuellen Werte anzuzeigen, die von einem laufenden Server verwendet werden, verwenden Sie die Anweisung SHOW VARIABLES oder SELECT @@var_name

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

    Sie können beim Start des Servers mithilfe von Optionen in der Befehlszeile oder in einer Optionsdatei festgelegt werden. Die meisten von ihnen können dynamisch geändert werden, während der Server mit SET GLOBAL oder SET SESSION läuft:

    -- 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;
    
484
Omesh

EINSTELLEN

SET @var_name = value 

ODER 

SET @var := value

beide Operatoren = und: = werden akzeptiert


WÄHLEN

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

wenn mehrere Datensätze gefunden wurden, ist nur der letzte Wert in col2 keep (override).

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

in diesem Fall enthält das Ergebnis von select keine col2-Werte

20
bortunac

Verwenden Sie set oder select

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

beispiel: 

SELECT @price := MAX(product.price)
FROM product 
10
KouchakYazdi

DECLARE var_name [ var_name] ... type [DEFAULT-Wert] Diese Anweisung deklariert lokale Variablen in gespeicherten Programmen.

Ex. DECLARE id INT vorzeichenlos DEFAULT 1; 

Um einen Standardwert für eine Variable anzugeben, schließen Sie eine DEFAULT-Klausel ein. Der Wert kann als Ausdruck angegeben werden. es muss keine Konstante sein. Wenn die DEFAULT-Klausel fehlt, lautet der Anfangswert NULL.

Lokale Variablen werden wie gespeicherte Routinenparameter bezüglich Datentyp und Überlaufprüfung behandelt.

Variablendeklarationen müssen vor Cursor- oder Handlerdeklarationen erscheinen.

Lokale Variablennamen unterscheiden nicht zwischen Groß- und Kleinschreibung. Zulässige Zeichen und Zitierregeln entsprechen denen für andere Bezeichner

Der Gültigkeitsbereich einer lokalen Variablen ist der BEGIN ... END-Block, in dem sie deklariert wird. Auf die Variable kann in Blöcken innerhalb des deklarierenden Blocks Bezug genommen werden, mit Ausnahme der Blöcke, die eine Variable mit demselben Namen deklarieren.

2
AJS

SET-Wert

 declare Regione int;   
 set Regione=(select  id from users
 where id=1) ;
 select Regione ;
0
Hari Lakkakula

Verschiedene Arten von Variablen:

  • Lokale Variablen (ohne vorangestelltes @) sind stark typisiert und gelten für den gespeicherten Programmblock, in dem sie deklariert sind. Beachten Sie, dass, wie unter DECLARE-Syntax dokumentiert:

DECLARE ist nur innerhalb einer BEGIN ... END-Verbundanweisung zulässig und muss vor allen anderen Anweisungen am Anfang stehen.

  • Benutzervariablen (mit dem Präfix @) werden lose eingegeben und auf die Sitzung beschränkt. Beachten Sie, dass sie weder benötigt noch deklariert werden können - verwenden Sie sie einfach direkt.

Wenn Sie also ein gespeichertes Programm definieren und tatsächlich eine "lokale Variable" möchten, müssen Sie das Zeichen "@" löschen und sicherstellen, dass sich Ihre DECLARE-Anweisung am Anfang Ihres Programmblocks befindet. Andernfalls löschen Sie die DECLARE-Anweisung, um eine "Benutzervariable" zu verwenden.

Außerdem müssen Sie Ihre Abfrage entweder in Klammern setzen, um sie als Unterabfrage auszuführen:

SET @countTotal = (SELECT COUNT (*) FROM nGrams);

Oder verwenden Sie SELECT ... INTO:

SELECT COUNT (*) INTO @countTotal FROM nGrams;

0
mohammadAli

Vergessen Sie nicht, dass jede Person, die @variable in der concat_ws-Funktion verwendet, um verkettete Werte abzurufen, sie mit einem leeren Wert neu initialisiert. Andernfalls kann der alte Wert für dieselbe Sitzung verwendet werden.

Set @Ids = '';

select 
  @Ids := concat_ws(',',@Ids,tbl.Id),
  tbl.Col1,
  ...
from mytable tbl;
0
Imran Javed