SETvariable_assignment[,variable_assignment] ...variable_assignment:user_var_name=expr| [GLOBAL | SESSION]system_var_name=expr| [@@global. | @@session. | @@]system_var_name=expr
        Die Anweisung SET weist verschiedenen Arten
        von Variablen, die sich auf den Betrieb des Servers oder Ihres
        Clients auswirken, Werte zu.
      
        Dieser Abschnitt beschreibt die Verwendung von
        SET zur Zuweisung von Werten an System- oder
        Benutzervariablen. Allgemeine Informationen zu diesen
        Variablentypen finden Sie in
        Abschnitt 5.2.2, „Server-Systemvariablen“, und
        Abschnitt 9.3, „Benutzerdefinierte Variablen“. Eine Liste der
        Systemvariablen, die dynamisch zur Laufzeit geändert werden
        können, finden Sie in
        Abschnitt 5.2.3.2, „Dynamische Systemvariablen“.
      
        Hinweis: Ältere Versionen von MySQL
        verwendeten SET OPTION. Diese Funktionalität
        ist jedoch veraltet – mittlerweile wird SET
        nur noch ohne OPTION benutzt.
      
        Es gibt auch Varianten der SET-Syntax, die in
        anderen Kontexten verwendet werden:
      
            SET PASSWORD weist Kontenpasswörter zu.
            Siehe auch Abschnitt 13.5.1.6, „SET PASSWORD“.
          
            SET TRANSACTION ISOLATION LEVEL bestimmt
            die Isolierungsstufe für die Transaktionsverarbeitung.
            Siehe auch Abschnitt 13.4.6, „SET TRANSACTION“.
          
            SET wird in gespeicherten Routinen
            benutzt, um lokalen Routinenvariablen Werte zuzuweisen.
            Siehe auch Abschnitt 19.2.7.2, „Variable SET-Anweisung“.
          
        Die folgende Erläuterung zeigt die verschiedenen
        SET-Syntaxen, die zur Einstellung von
        Variablen benutzt werden können. In den Beispielen wird jeweils
        der Zuweisungsoperator = benutzt, der
        Operator := ist aber ebenfalls zulässig.
      
        Eine Benutzervariable wird als
        @
        geschrieben und kann wie folgt eingestellt werden:
      var_name
SET @var_name=expr;
        Systemvariablen werden in SET-Anweisungen als
        var_name referenziert. Unter
        Umständen kann ihnen auch ein Modifizierer vorangestellt sein:
      
            Um explizit anzugeben, dass eine Variable eine globale
            Variable ist, stellen Sie dem Namen
            GLOBAL oder @@global.
            voran. Zum Einstellen globaler Variablen ist die
            Berechtigung SUPER erforderlich.
          
            Um explizit anzugeben, dass eine Variable eine
            Sitzungsvariable ist, stellen Sie dem Namen
            SESSION oder
            @@session. voran.
          
            LOCAL und @@local.
            sind Synonyme von SESSION bzw.
            @@session..
          
            Ist kein Modifizierer vorhanden, dann stellt
            SET die Sitzungsvariable ein.
          
Ein paar Beispiele:
SET sort_buffer_size=10000; SET @@local.sort_buffer_size=10000; SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000; SET @@sort_buffer_size=1000000; SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;
        Die Syntax
        @@ für
        Systemvariablen wird unterstützt, damit die MySQL-Syntax mit
        einigen anderen Datenbanksystemen kompatibel ist.
      var_name
        Wenn Sie mehrere Systemvariablen in derselben Anweisung
        einstellen, wird die zuletzt angegebene
        GLOBAL- oder
        SESSION-Option für Variablen verwendet,
        deren Modus nicht näher spezifiziert ist.
      
Wenn Sie eine sitzungsspezifische Systemvariable einstellen, bleibt der Wert gültig, bis die aktuelle Sitzung endet oder Sie der Variablen einen anderen Wert zuweisen. Stellen Sie eine globale Systemvariable ein, dann wird der Wert gespeichert und bis zum nächsten Neustart des Servers für alle neuen Verbindungen verwendet. Wenn Sie den Wert einer globalen Systemvariablen permanent ändern wollen, sollten Sie diesen in eine Optionsdatei eintragen. Siehe auch Abschnitt 4.3.2, „my.cnf-Optionsdateien“.
        Um eine falsche Verwendung zu verhindern, erzeugt MySQL einen
        Fehler, wenn Sie SET GLOBAL für eine
        Variable verwenden, für die nur SET SESSION
        zulässig ist, oder GLOBAL (bzw.
        @@global.) beim Einstellen einer globalen
        Variablen nicht angeben.
      
        Um eine SESSION-Variable auf den
        GLOBAL-Wert oder eine
        GLOBAL-Variable auf den in MySQL
        einkompilierten Standardwert zu setzen, verwenden Sie das
        Schlüsselwort DEFAULT. So sind
        beispielsweise die beiden folgenden Anweisungen dahingehend
        identisch, dass sie den Sitzungswert von
        max_join_size auf den globalen Wert setzen:
      
SET max_join_size=DEFAULT; SET @@session.max_join_size=@@global.max_join_size;
        Es lassen sich nicht alle Systemvariablen auf
        DEFAULT setzen. In solchen Fällen tritt bei
        Verwendung von DEFAULT ein Fehler auf.
      
        Eine Liste der Systemvariablen und ihrer Werte zeigen Sie mit
        der SHOW VARIABLES-Anweisung an. (Siehe auch
        Abschnitt 13.5.4.24, „SHOW VARIABLES“.) Um einen bestimmten
        Variablennamen oder eine Liste der Namen zu erhalten, die einem
        Muster entsprechen, verwenden Sie eine
        LIKE-Klausel wie folgt:
      
SHOW VARIABLES LIKE 'max_join_size'; SHOW GLOBAL VARIABLES LIKE 'max_join_size';
        Zum Anzeigen einer Variablenliste, deren Namen einem Muster
        entsprechen, verwenden Sie das Jokerzeichen
        ‘%’:
      
SHOW VARIABLES LIKE '%size%'; SHOW GLOBAL VARIABLES LIKE '%size%';
Jokerzeichen können an beliebiger Position im Vergleichsmuster stehen.
        Sie können den Wert einer bestimmten Systemvariablen auch mit
        SELECT ermitteln, indem Sie die Syntax
        @@[global.|session.]
        benutzen:
      var_name
SELECT @@global.max_join_size, @@session.max_join_size;
        Wenn Sie eine Variable mit SELECT
        @@ (ohne
        Modifizierer) abrufen, gibt MySQL den
        var_nameSESSION-Wert, sofern dieser vorhanden ist,
        und andernfalls den GLOBAL-Wert zurück.
        (Hier liegt ein Unterschied zu SET
        @@ vor, wo immer der
        Sitzungswert referenziert wird.)
      var_name =
        value
        Die folgende Liste beschreibt Variablen, die keine
        Standardsyntax aufweisen oder nicht in der in
        Abschnitt 5.2.2, „Server-Systemvariablen“, aufgeführten Liste
        der Systemvariablen beschrieben sind. Zwar werden die hier
        beschriebenen Variablen nicht von SHOW
        VARIABLES angezeigt, Sie können die Werte aber mit
        SELECT abrufen (Ausnahmen sind
        CHARACTER SET und SET
        NAMES). Zum Beispiel:
      
mysql> SELECT @@AUTOCOMMIT;
+--------------+
| @@AUTOCOMMIT |
+--------------+
|            1 |
+--------------+
Die Groß-/Kleinschreibung dieser Optionen ist irrelevant.
            AUTOCOMMIT = {0 | 1}
          
            Stellt den Autocommit-Modus ein. Mit der Einstellung 1
            werden alle Änderungen direkt übernommen. Wenn Sie 0
            wählen, müssen Sie eine Transaktion mit
            COMMIT übergeben oder sie mit
            ROLLBACK abbrechen. Standardmäßig
            starten Clientverbindungen mit dem
            AUTOCOMMIT-Wert 1. Wenn Sie
            AUTOCOMMIT von 0 auf 1 umstellen, führt
            MySQL automatisch eine COMMIT-Anweisung
            für alle offenen Transaktionen aus. Eine andere
            Möglichkeit, eine Transaktion zu starten, besteht in der
            Verwendung der Anweisungen START
            TRANSACTION oder BEGIN. Siehe
            auch Abschnitt 13.4.1, „BEGIN/COMMIT/ROLLBACK“.
          
            Beim Wert 1 werden alle Temporärtabellen auf der Festplatte
            statt im Arbeitsspeicher abgelegt. Dies ist ein wenig
            langsamer, aber der Fehler The table
             tritt
            nicht bei tbl_name is fullSELECT-Operationen auf, die
            eine große Temporärtabelle erfordern. Der Standardwert bei
            einer neuen Verbindung ist 0 (d. h., es werden
            speicherresidente Temporärtabellen verwendet). Im
            Normalfall sollten Sie diese Variable niemals umstellen
            müssen, da speicherresidente Tabellen nach Bedarf
            automatisch in festplattenbasierte Tabellen konvertiert
            werden. (Hinweis: Diese
            Variable hieß früher SQL_BIG_TABLES.)
          
            CHARACTER SET
            {
          charset_name |
            DEFAULT}
            Hiermit werden alle Strings vom und an den Client den
            Angaben entsprechend konvertiert. Sie können neue
            Zuordnungen angeben, indem Sie die Datei
            sql/convert.cc in der
            MySQL-Quelldistribution bearbeiten. SET CHARACTER
            SET stellt drei sitzungsspezifische
            Systemvariablen ein: character_set_client
            und character_set_results werden auf den
            angegebenen Zeichensatz gesetzt,
            character_set_connection auf den Wert von
            character_set_database. Siehe auch
            Abschnitt 10.4, „Verbindungszeichensatz und -sortierfolge“.
          
            Die Standardzuordnung kann mit dem Wert
            DEFAULT wiederhergestellt werden.
          
            Beachten Sie, dass die Syntax sich bei SET
            CHARACTER SET von der zur Einstellung der meisten
            anderen Optionen unterscheidet.
          
            FOREIGN_KEY_CHECKS = {0 | 1}
          
            Bei der Einstellung 1 (Vorgabe) werden
            Fremdschlüssel-Constraints für
            InnoDB-Tabellen überprüft. Bei der
            Einstellung 0 werden sie ignoriert. Die Deaktivierung der
            Fremdschlüsselüberprüfung kann nützlich sein, um
            InnoDB-Tabellen in einer anderen als der
            Reihenfolge neu zu laden, die von den
            Parent/Child-Beziehungen erfordert wird. Siehe auch
            Abschnitt 14.2.6.4, „Fremdschlüssel-Beschränkungen“.
          
            IDENTITY =
            
          value
            Diese Variable ist synonym zur Variablen
            LAST_INSERT_ID. Sie ist aus Gründen der
            Kompatibilität mit anderen Datenbanksystemen vorhanden. Sie
            können ihren Wert mit SELECT @@IDENTITY
            auslesen und mit SET IDENTITY einstellen.
          
            INSERT_ID =
            
          value
            Stellt den von der folgenden INSERT- oder
            ALTER TABLE-Anweisung zu verwendenden
            Wert ein, wenn ein AUTO_INCREMENT-Wert
            eingefügt wird. Wird in erster Linie beim Binärlog
            benutzt.
          
            LAST_INSERT_ID =
            
          value
            Stellt den von LAST_INSERT_ID()
            zurückzugebenden Wert ein. Dieser wird im Binärlog
            gespeichert, wenn Sie LAST_INSERT_ID() in
            einer Anweisung verwenden, die eine Tabelle aktualisiert.
            Durch Einstellen dieser Variablen wird der von der
            C-API-Funktion mysql_insert_id()
            zurückgegebene Wert nicht geändert.
          
            NAMES {'
          charset_name' |
            DEFAULT}
            SET NAMES setzt die drei Systemvariablen
            character_set_client,
            character_set_connection und
            character_set_results auf den angegebenen
            Zeichensatz. Das Einstellen von
            character_set_connection auf
            charset_name setzt
            collation_connection auf die
            Standardsortierfolge für charset_name.
            Siehe auch Abschnitt 10.4, „Verbindungszeichensatz und -sortierfolge“.
          
            Die Standardzuordnung kann mit dem Wert
            DEFAULT wiederhergestellt werden.
          
            Beachten Sie, dass die Syntax sich bei SET
            NAMES von der zur Einstellung der meisten anderen
            Optionen unterscheidet.
          
            ONE_SHOT
          
            Diese Option ist ein Modifizierer und keine Variable. Sie
            kann verwendet werden, um die Wirkung von Variablen zu
            beeinflussen, die den Zeichensatz, die Sortierfolge und die
            Zeitzone einstellen. ONE_SHOT wird in
            erster Linie zu Replikationszwecken eingesetzt.
            mysqlbinlog verwendet SET
            ONE_SHOT zur vorübergehenden Änderung der Werte
            von Zeichensatz-, Sortierfolgen- und Zeitzonenvariablen, um
            die ursprünglichen Werte für einen Rollforward zu
            speichern.
          
            Sie können ONE_SHOT nur mit den
            zulässigen Variablen verwenden, andernfalls erhalten Sie
            einen Fehler wie den folgenden:
          
mysql> SET ONE_SHOT max_allowed_packet = 1;
ERROR 1382 (HY000): The 'SET ONE_SHOT' syntax is reserved for purposes
internal to the MySQL server
            Wenn ONE_SHOT mit zulässigen Variablen
            benutzt wird, ändert es die Variablen nach Bedarf –
            jedoch nur für die nächste Anweisung, die nicht
            SET ist. Nachfolgend setzt der Server
            alle zeichensatz-, sortierfolgen- und zeitzonenspezifischen
            Systemvariablen auf ihre vorherigen Werte. Beispiel:
          
mysql>SET ONE_SHOT character_set_connection = latin5;mysql>SET ONE_SHOT collation_connection = latin5_turkish_ci;mysql>SHOW VARIABLES LIKE '%_connection';+--------------------------+-------------------+ | Variable_name | Value | +--------------------------+-------------------+ | character_set_connection | latin5 | | collation_connection | latin5_turkish_ci | +--------------------------+-------------------+ mysql>SHOW VARIABLES LIKE '%_connection';+--------------------------+-------------------+ | Variable_name | Value | +--------------------------+-------------------+ | character_set_connection | latin1 | | collation_connection | latin1_swedish_ci | +--------------------------+-------------------+
            SQL_AUTO_IS_NULL = {0 | 1}
          
            Bei der Einstellung 1 (Vorgabe) ermitteln Sie den zuletzt
            eingefügten Datensatz für eine Tabelle, die eine
            AUTO_INCREMENT-Spalte umfasst, mithilfe
            des folgenden Konstrukts:
          
WHERE auto_increment_column IS NULL
Dieses Verhalten wird von einigen ODBC-Programmen wie etwa Access verwendet.
            SQL_BIG_SELECTS = {0 | 1}
          
            Bei der Einstellung 0 bricht MySQL
            SELECT-Anweisungen ab, deren Ausführung
            voraussichtlich sehr lange dauern wird (d. h., Anweisungen,
            bei denen der Optimierer eine Anzahl von untersuchten
            Datensätzen annimmt, deren Wert
            max_join_size überschreitet. Dies ist
            praktisch, wenn eine nicht empfehlenswerte
            WHERE-Anweisung abgesetzt wurde. Der
            Standardwert für eine neue Verbindung ist 1, d. h., alle
            SELECT-Anweisungen sind zulässig.
          
            Wenn Sie die Systemvariable max_join_size
            auf einen anderen Wert als DEFAULT
            setzen, wird SQL_BIG_SELECTS auf 0
            gesetzt.
          
            SQL_BUFFER_RESULT = {0 | 1}
          
            SQL_BUFFER_RESULT bewirkt, dass
            Ergebnisse aus SELECT-Anweisungen in
            Temporärtabellen abgelegt werden. Auf diese Weise kann
            MySQL die Tabellensperren schnell wieder aufheben. Die
            Option ist zudem in Fällen hilfreich, in denen die
            Übermittlung der Ergebnisse an den Client sehr lange
            dauert.
          
            SQL_LOG_BIN = {0 | 1}
          
            Bei der Einstellung 0 erfolgt für den Client keine
            Aufzeichnung in das Binärlog. Der Client benötigt die
            Berechtigung SUPER, um diese Option
            einzustellen.
          
            SQL_LOG_OFF = {0 | 1}
          
            Bei der Einstellung 1 erfolgt für den Client keine
            Aufzeichnung in das Log für allgemeine Abfragen. Der Client
            benötigt die Berechtigung SUPER, um
            diese Option einzustellen.
          
            SQL_LOG_UPDATE = {0 | 1}
          
            Diese Variable ist veraltet und wird auf
            SQL_LOG_BIN umgesetzt.
          
            SQL_NOTES = {0 | 1}
          
            Bei der Einstellung 1 (Standard) werden Warnungen auf
            Note-Ebene aufgezeichnet. Wird hingegen 0
            gewählt, dann werden Note-Warnungen
            unterdrückt. mysqldump enthält eine
            Ausgabe, die diese Variable auf 0 setzt, sodass ein Neuladen
            der Dumpdatei keine Warnungen für Ereignisse erzeugt, die
            die Integrität des Neuladevorgangs nicht beeinträchtigen.
          
            SQL_QUOTE_SHOW_CREATE = {0 | 1}
          
            Bei der Einstellung 1 setzt der Server Bezeichner für die
            Anweisungen SHOW CREATE TABLE und
            SHOW CREATE DATABASE in
            Anführungszeichen. Bei 0 werden keine Anführungszeichen
            gesetzt. Die Option ist standardmäßig aktiviert, damit die
            Replikation auch bei Bezeichnern funktioniert, die
            Anführungszeichen erfordern. Siehe auch
            Abschnitt 13.5.4.6, „SHOW CREATE TABLE“, und
            Abschnitt 13.5.4.4, „SHOW CREATE DATABASE“.
          
            SQL_SAFE_UPDATES = {0 | 1}
          
            Bei der Einstellung 1 bricht MySQL
            UPDATE- und
            DELETE-Anweisungen ab, die keinen
            Schlüssel in der WHERE-Klausel oder
            einer LIMIT-Klausel verwenden. Auf diese
            Weise lassen sich UPDATE- oder
            DELETE-Anweisungen abfangen, bei denen
            Schlüssel nicht korrekt eingesetzt werden und die unter
            Umständen eine große Zahl von Datensätzen ändern oder
            löschen würden.
          
            SQL_SELECT_LIMIT =
            {
          value | DEFAULT}
            Die maximale Anzahl von Datensätzen, die von
            SELECT-Anweisungen zurückgegeben werden
            können. Der Standardwert bei einer neuen Verbindung lautet
            „unbegrenzt“. Wenn Sie den Grenzwert geändert
            haben, kann der Standardwert mit dem Wert
            DEFAULT für
            SQL_SELECT_LIMIT wiederhergestellt
            werden.
          
            Wenn eine SELECT-Anweisung eine
            LIMIT-Klausel aufweist, hat diese
            LIMIT-Klausel Vorrang vor dem Wert von
            SQL_SELECT_LIMIT.
          
            SQL_SELECT_LIMIT gilt nicht für
            SELECT-Anweisungen, die in gespeicherten
            Routinen ausgeführt werden. Ebenso wenig gelten sie für
            SELECT-Anweisungen, die keine
            Ergebnismenge erzeugen, die an den Client zurückgegeben
            wird. Hierzu gehören SELECT-Anweisungen
            in Unterabfragen, CREATE TABLE ... SELECT
            und INSERT INTO ... SELECT.
          
            SQL_WARNINGS = {0 | 1}
          
            Diese Variable steuert, ob
            INSERT-Anweisungen für einen Datensatz
            einen Informations-String erzeugen, wenn Warnungen
            auftreten. Die Standardeinstellung ist 0. Setzen Sie den
            Wert auf 1, um einen Informations-String zu generieren.
          
            TIMESTAMP =
            {
          timestamp_value |
            DEFAULT}
            Stellt die Zeit für diesen Client ein. Auf deren Basis wird
            der ursprüngliche Zeitstempel ermittelt, wenn Sie
            Datensätze mit dem Binärlog wiederherstellen.
            timestamp_value sollte ein
            Unix-Epochenzeitstempel und kein MySQL-Zeitstempel sein.
          
            UNIQUE_CHECKS = {0 | 1}
          
            Bei der Einstellung 1 (Standard) werden
            Eindeutigkeitsprüfungen für Sekundärindizes in
            InnoDB-Tabellen durchgeführt. Wenn der
            Wert 0 eingestellt wurde, werden keine
            Eindeutigkeitsprüfungen für Indexeinträge durchgeführt,
            die in den InnoDB-Einfügepuffer
            eingefügt wurden. Wenn Sie ganz sicher wissen, dass Ihre
            Daten keine Verstöße gegen das Eindeutigkeitsgebot
            enthalten, können Sie hier 0 wählen, um den Import großer
            Tabellen in InnoDB zu beschleunigen.
          
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.

