556 Stimmen

Wie deklariert man eine Variable in MySQL?

Wie deklariere ich eine Variable in Mysql, so dass meine zweite Abfrage sie verwenden kann?

Ich würde gerne etwas schreiben wie:

SET start = 1;
SET finish = 10;

SELECT * FROM places WHERE place BETWEEN start AND finish;

892voto

Omesh Punkte 26519

In MySQL gibt es hauptsächlich drei Arten von Variablen:

  1. Benutzerdefinierte Variablen (mit vorangestelltem @ ) :

    Sie können auf jede benutzerdefinierte Variable zugreifen, ohne sie zu deklarieren oder sie zu initialisieren. Wenn Sie auf eine Variable verweisen, die noch nicht initialisiert wurde, hat sie einen Wert von NULL und einen String-Typ.

    SELECT @var_any_var_name

    Sie können eine Variable initialisieren mit SET o SELECT Erklärung:

    SET @start = 1, @finish = 10;    

    o

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

    Benutzervariablen kann ein Wert aus einem begrenzten Satz von Daten zugewiesen werden Typen zugewiesen werden: Ganzzahl, Dezimalzahl, Fließkommazahl, binäre oder nichtbinäre Zeichenkette, oder NULL-Wert.

    Benutzerdefinierte Variablen sind sitzungsspezifisch. Das heißt, eine benutzer Variable, die von einem Client definiert wurde, kann von anderen Clients nicht gesehen oder verwendet werden. Klienten.

    Sie können verwendet werden in SELECT Abfragen mit Fortgeschrittene Techniken für MySQL-Benutzervariablen .

  2. Lokale Variablen (keine Vorsilbe) :

    Lokale Variablen müssen deklariert werden mit DECLARE vor darauf zugreifen.

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

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

    の場合は DEFAULT Klausel fehlt, ist der Anfangswert NULL .

    Der Geltungsbereich einer lokalen Variablen ist der BEGIN ... END Block innerhalb in dem er deklariert wird.

  3. Server-Systemvariablen (mit vorangestelltem @@ ) :

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

    Globale Variablen wirken sich auf den Gesamtbetrieb des Servers aus, während Sitzungsvariablen seinen Betrieb für einzelne Client-Verbindungen beeinflussen.

    Um die aktuellen Werte zu sehen, die von einem laufenden Server verwendet werden, verwenden Sie die SHOW VARIABLES Erklärung oder SELECT @@var_name .

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

    Sie können beim Start des Servers über Optionen in der Befehlszeile oder in einer Optionsdatei festgelegt werden. Die meisten von ihnen können dynamisch geändert werden, während der Server läuft, indem man 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;

68voto

bortunac Punkte 4266

SETZEN

SET @var_name = value;     /* or */     SET @var_name := value;

beide Betreiber \= y := werden akzeptiert


SELECT

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

wenn mehrere Datensätze gefunden werden, nur der letzte Wert in col2 beibehalten wird (Override);

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

in diesem Fall das Ergebnis von Select nicht enthalten ist col2 Werte


Ex beide Methoden verwendet

-- TRIGGER_BEFORE_INSERT --- Setzen eines Spaltenwertes aus Berechnungen

...
SELECT count(*) INTO @NR FROM a_table WHERE a_condition;
SET NEW.ord_col = IFNULL( @NR, 0 ) + 1;
...

24voto

使用する einstellen. o Wählen Sie

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

Beispiel:

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

15voto

mohammadAli Punkte 165

Verschiedene Arten von Variablen:

  • lokale Variablen (denen kein @ vorangestellt ist) sind stark typisiert und auf den gespeicherten Programmblock beschränkt, in dem sie deklariert sind. Beachten Sie, dass, wie dokumentiert unter DECLARE Syntax :

DECLARE ist nur innerhalb eines BEGIN ... END-Verbundanweisung zulässig und muss an deren Anfang stehen, vor allen anderen Anweisungen.

  • Benutzer-Variablen (denen ein @ vorangestellt ist) sind locker typisiert und auf die Sitzung beschränkt. Beachten Sie, dass sie weder deklariert werden müssen noch können - verwenden Sie sie einfach direkt.

Wenn Sie also ein gespeichertes Programm definieren und tatsächlich eine "lokale Variable" wollen, müssen Sie das @-Zeichen weglassen und sicherstellen, dass Ihre DECLARE-Anweisung am Anfang Ihres Programmblocks steht. Andernfalls, wenn Sie eine "Benutzervariable" verwenden wollen, lassen Sie die DECLARE-Anweisung weg.

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

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

Oder Sie könnten SELECT ... INTO verwenden:

SELECT COUNT(*) INTO @countTotal FROM nGrams;

11voto

yaya Punkte 6190
  • Erklären: SET @a = 1;

  • 使用することです。 INSERT INTO `t` (`c`) VALUES (@a);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X