SET variable_assignment [, variable_assignment] ... variable_assignment: user_var_name = expr | [GLOBAL | SESSION] system_var_name = expr | @@[global. | session.]system_var_name = expr
SET
permet de configurer plusieurs options
qui affectent le comportement de votre serveur ou de votre
client.
En MySQL 4.0.3, nous avons ajouté les options
GLOBAL
et SESSION
et
permis la modification des variables systèmes les plus
importantes dynamiquement, durant l'exécution du serveur. Le
système de variables que vous pouvez utiliser est décrit
dans Section 5.2.3.1, « Variables système dynamiques ».
Dans les anciennes versions de MySQL, nous avions autorisé
l'utilisation de la syntaxe SET OPTION
,
mais elle est maintenant abandonnée. Omettez simplement le
mot OPTION
.
Les exemples suivants montrent les différentes syntaxes qu'on peut utiliser pour configurer des variables.
Une variable utilisateur s'écrit sous la forme
@var_name
et peut être configurée comme
ceci :
SET @var_name = expr;
Plus d'informations sur les variables utilisateurs sont données dans Section 9.3, « Variables utilisateur ».
Les variables système peuvent être identifiées dans une
commande SET
sous la forme
var_name
. Le nom peut être optionnellement
précédé par GLOBAL
ou
@@global.
pour indiquer que cette variable
est globale, ou par SESSION
,
@@session.
, ou @@
pour
indiquer que cette variable est une variable de session.
LOCAL
et @@local.
son
synonymes de SESSION
et
@@session.
. Si aucune option n'est
présente, SET
spécifie une variable de
session.
La syntaxe @@var_name
pour les variables
système est supportée pour rendre la syntaxe MySQL
compatible avec les autres bases.
Si vous configurez plusieurs variables sur une seule ligne de
commande, le dernier mode GLOBAL | SESSION
utilisé est pris en compte.
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;
Si vous utilisez SESSION
(par défaut)
l'option que vous configurez garde son effet jusqu'à ce que
la session courante se termine, ou que vous modifiez à
nouveau cette option. Si vous utilisez
GLOBAL
, qui requière le privilège
SUPER
, l'option est gardée en mémoire et
utilisée pour les nouvelles connexion jusqu'au redémarrage
du serveur. Si vous voulez qu'un changement reste permanent,
vous devez l'effectuer dans l'un des fichiers d'options de
MySQL. See Section 4.3.2, « Fichier d'options my.cnf
».
Pour éviter un mauvais usage, MySQL donnera une erreur si
vous utilisez SET GLOBAL
avec une variable
qui ne peut être inutilisée que par SET
SESSION
ou si vous n'utilisez pas SET
GLOBAL
avec une variable globale.
Si vous voulez configurer une variable
SESSION
à une valeur
GLOBAL
ou une valeur
GLOBAL
à la valeur par défaut de MySQL,
vous pouvez la configurer à DEFAULT
.
SET max_join_size=DEFAULT; SET @@session.max_join_size=@@global.max_join_size;
Vous pouvez obtenir une liste de la plupart des variables avec
SHOW VARIABLES
. See
Section 13.5.3.18, « Syntaxe de SHOW VARIABLES
». Vous pouvez obtenir la
valeur d'une variable spécifique avec la syntaxe
@@[global.|local.]nom_variable
:
SHOW VARIABLES LIKE 'max_join_size'; SHOW GLOBAL VARIABLES LIKE 'max_join_size';
Vous pouvez aussi obtenir une valeur spécifique d'une
variable en utilisant la syntaxe
@@[global.|local.]var_name
avec
SELECT
:
SELECT @@max_join_size, @@global.max_join_size;
Lorsque vous lisez la valeur d'une variable avec la syntaxe
SELECT @@var_name
(c'est à dire, sans
spécifier global.
,
session.
ou local.
),
MySQL retourne la valeur de SESSION
si elle
existe, et la valeur GLOBAL
sinon.
Vous trouverez ici une description des variables qui utilisent
une syntaxe non-standard de SET
. Les
définitions des autres variables peuvent être trouvées dans
la section des Section 5.2.3, « Variables serveur système », avec
les options de démarrage ou dans la description de
SHOW VARIABLES
.
Même si ces variables ne sont pas affichées par
SHOW VARIABLES
, vous pouvez obtenir leur
valeur avec la commande SELECT
(à
l'exception de CHARACTER SET
). Par
exemple :
mysql> SELECT @@AUTOCOMMIT;
+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+
AUTOCOMMIT= {0 | 1}
Si définie à 1
tous les changements
dans une table se feront en une seule fois. Pour démarrer
une transaction multi-commandes, vous devez utiliser la
commande BEGIN
. See
Section 13.4.1, « Syntaxes de START TRANSACTION
,
COMMIT
et ROLLBACK
». Si définie à
0
vous devez utiliser
COMMIT
/ ROLLBACK
pour accepter/annuler cette transaction. Notez que quand
vous passez du mode non AUTOCOMMIT
vers
le mode AUTOCOMMIT
, MySQL fera un
COMMIT
automatique sur toutes les
transactions en cours.
Si définie à 1
, toutes les tables
temporaires sont stockées sur le disque plutôt qu'en
mémoire. Cela sera un peu plus lent, mais vous
n'obtiendrez jamais l'erreur The table
nom_de_table is full
pour les grands
SELECT
qui requièrent une table
temporaire. La valeur par défaut pour une nouvelle
connexion est 0
(qui est d'utiliser la
mémoire pour les tables temporaires). Cette option se
nommait avant SQL_BIG_TABLES
.
CHARACTER SET {charset_name | DEFAULT}
Cela change le jeu de caractère dans toutes les chaînes
du et vers le client avec le jeu donné. Jusqu'à
maintenant, la seule option pour
nom_jeu_de_caractères
est
cp1251_koi8
, mais vous pouvez
facilement ajouter d'autres possibilités en éditant le
fichier sql/convert.cc
dans la
distribution des sources MySQL. Le jeu de caractères par
défaut peut être restauré en utilisant la valeur
DEFAULT
de
nom_jeu_de_caractères
DEFAULT
.
Notez que la syntaxe pour configurer l'option
CHARACTER SET
diffère de la syntaxe
pour configurer les autres options.
FOREIGN_KEY_CHECKS = {0 | 1}
Si cette option vaut 1
(par défaut),
les contraintes de clé étrangères des tables
InnoDB
sont vérifiées. Si cette
option vaut 0
, elles sont ignorées.
Désactiver les clés étrangères peut être pratique
pour recharger des tables InnoDB
dans
un ordre différent que celui qu'impose les relations de
contraintes. Cette variable a été ajoutée en MySQL
3.23.52. See
Section 15.7.4, « Contraintes de clés étrangères FOREIGN KEY
».
IDENTITY = valeur
Cette variable est un synonyme de la variable
LAST_INSERT_ID
. Elle existe pour des
raisons de compatibilité avec les autres bases. Depuis
MySQL 3.23.25, vous pouvez lire sa valeur avec
SELECT @@IDENTITY
. Depuis MySQL 4.0.3,
vous pouvez aussi modifier cette valeur avec SET
IDENTITY
.
INSERT_ID = valeur
Configure la valeur à utiliser par l'appel suivant à la
commande INSERT
ou ALTER
TABLE
lors de l'insertion d'une valeur
AUTO_INCREMENT
. Cela est souvent
utilisé par le log des modifications.
LAST_INSERT_ID = valeur
Configure la valeur qui doit être retournée par
LAST_INSERT_ID()
. C'est enregistré
dans le log de mises à jour quand vous utilisez
LAST_INSERT_ID()
dans une commande qui
met à jour une table.
NAMES {'charset_name' | DEFAULT}
SET NAMES
spécifie les valeurs des
trois variables systèmes de session
character_set_client
,
character_set_connection
et
character_set_results
avec le jeu de
caractères donné.
La valeur par défaut de ces variables peut être
rappelée avec DEFAULT
.
Notez que la syntaxe de SET NAMES
diffère en cela des autres options. Cette commande est
disponible depuis MySQL 4.1.0.
SQL_AUTO_IS_NULL = {0 | 1}
Si définie à 1
(par défaut) alors on
peut trouver la dernière ligne insérée dans une table
avec une colonne AUTO_INCREMENT
avec la
construction suivante :
WHERE auto_increment_column IS NULL
Ceci est utilisé par des programmes ODBC tel que Access.
SQL_AUTO_IS_NULL
a été ajouté en
MySQL 3.23.52.
SQL_BIG_SELECTS = {0 | 1}
Si configuré à 0
, MySQL interrompra
les requêtes SELECT
qui prendront
probablement trop de temps. C'est utile lorsqu'une clause
WHERE
déconseillée a été utilisée.
Une grosse requête est définie comme étant un
SELECT
qui devra probablement étudier
plus de max_join_size
lignes. La valeur
par défaut d'une nouvelle connexion est
1
(qui permet toutes les requêtes
SELECT
).
SQL_BUFFER_RESULT = {0 | 1}
SQL_BUFFER_RESULT
forcera les
résultats des requêtes SELECT
à
être placés dans une table temporaire. Cela aidera MySQL
à libérer les verrous sur table plus tôt et améliorera
les cas où le jeu de résultats de la requête prend trop
de temps à être envoyée au client.
SQL_LOG_BIN = {0 | 1}
Si cette option vaut 0
, aucun log n'est
fait dans le log binaire du client, si le client a les
droits de SUPER
.
SQL_LOG_OFF = {0 | 1}
Si cette option vaut 1
, aucun log n'est
fait dans le log standard du client, si le client a les
droits de SUPER
.
SQL_LOG_UPDATE = {0 | 1}
Si définie à 0
, aucune trace des
requêtes ne sera gardée dans le log des mises à jour
pour le client, si le client à le privilège
SUPER
. Cette variable est abandonnée
depuis la version 5.0.0 et est remplacée par
SQL_LOG_BIN
(see
Section C.1.7, « Changements de la version 5.0.0 (22 décembre 2003 : Alpha) »).
SQL_QUOTE_SHOW_CREATE = {0 | 1}
Si vous le configurez à 1
,
SHOW CREATE TABLE
protégera les noms
de tables et de colonnes. Ceci est activé par défaut,
pour que la réplication des tables avec des noms à
risques fonctionne. Section 13.5.3.5, « Syntaxe de SHOW CREATE TABLE
».
SQL_SAFE_UPDATES = {0 | 1}
Si définit à 1
, MySQL annulera si un
UPDATE
ou un DELETE
est exécuté alors qu'il n'utilise pas de clef ou de
LIMIT
dans la clause
WHERE
. Cela permet de bloquer les
requêtes erronées crées à la main.
SQL_SELECT_LIMIT = valeur | DEFAULT
Le nombre maximal des enregistrements que doivent
retourner les requêtes SELECT
. Si un
SELECT
possède une clause
LIMIT
, celle-ci est utilisée. La
valeur par défaut pour une nouvelle connexion est
``illimitée.'' Si vous avez changé la limite, la valeur
par défaut peut être retrouvée en utilisant la valeur
DEFAULT
avec
SQL_SELECT_LIMIT
.
SQL_WARNINGS = {0 | 1}
Cette variable contrôle le fait que les insertion
mono-ligne INSERT
produisent une
chaîne d'information si une alerte survient. La valeur
par défaut est 0. Donnez la valeur de 1 pour avoir un
message d'information. Cette variable a été ajoutée en
MySQL 3.22.11.
TIMESTAMP = valeur_timestamp | DEFAULT
Configure le temps pour ce client. C'est utilisé pour
obtenir le timestamp d'origine si vous utilisez le log de
mises à jour pour restaurer des lignes.
valeur_timestamp
doit être un
timestamp Unix, et non un timestamp MySQL.
UNIQUE_CHECKS = {0 | 1}
Si cette option vaut 1
(par défaut),
les tests d'unicité sur les index secondaires des tables
InnoDB
sont effectués. Si l'option
vaut 0
, aucun test d'unicité n'est
fait. Cette variable a été ajouté en MySQL 3.23.52. See
Section 15.7.4, « Contraintes de clés étrangères FOREIGN KEY
».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.