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_name
SESSION
-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.