Maison > base de données > tutoriel mysql > Une brève introduction au mode serveur SQL de Mysql

Une brève introduction au mode serveur SQL de Mysql

怪我咯
Libérer: 2017-04-01 10:42:39
original
1360 Les gens l'ont consulté

mysql Modes du serveur SQL
Le serveur MySQL peut fonctionner dans différents modes SQL, et différents modes peuvent être appliqués à différents clients. De cette façon, chaque application peut personnaliser le mode de fonctionnement du serveur en fonction de ses propres besoins.
Le schéma définit quelle syntaxe SQL MySQL doit prendre en charge et quel type de contrôles de validation des données doivent être effectués. Cela facilite l'utilisation de MySQL dans différents environnements et avec d'autres serveurs de bases de données. Vous pouvez définir le mode SQL par défaut en démarrant mysqld avec l'option --sql-mode="modes". Cette valeur peut également être laissée vide (--sql-mode = "") si vous souhaitez la réinitialiser. Vous pouvez également utiliser l'instruction SET [SESSION|GLOBAL] sql_mode='modes' pour définir la variable sql_mode

après le démarrage afin de changer le mode SQL. La définition d'une variable GLOBAL nécessite l'autorisation SUPER et affecte le fonctionnement de tous les clients connectés à partir de ce moment. La définition de la variable SESSION n'affecte que le client actuel. Tout client peut modifier sa valeur sql_mode de session à tout moment. Modesis est une série de modes différents séparés par des virgules («, »). Vous pouvez utiliser l'instruction SELECT @@sql_mode pour interroger
le mode actuel. La valeur par défaut est vide (aucun mode n'est défini). Valeur sql_mode principalement importante
・ANSI
Modifier la syntaxe et le comportement pour les rendre plus cohérents avec le SQL standard.
・STRICT_TRANS_TABLES
Abandonnez l'instruction si la valeur donnée ne peut pas être insérée dans la table de transaction. Pour les tables non transactionnelles, si une valeur apparaît dans la ligne 1 d'une instruction à une seule ligne ou d'une instruction à plusieurs lignes, l'instruction est ignorée. Une description plus détaillée est donnée plus loin dans cette section.
・TRADITIONNEL
Faites en sorte que MySQL se comporte comme un système de base de données SQL "traditionnel". Une description simple de ce mode consiste à « donner une erreur au lieu d'un avertissement » lorsqu'une valeur incorrecte est insérée dans une colonne. Remarque
 : abandonnez INSERT/UPDATE dès qu'une erreur est trouvée. Ce n'est pas ce que vous voulez si vous utilisez un moteur de stockage non transactionnel, car les modifications de données apportées avant l'erreur ne seront pas "reconduites", ce qui entraînera des mises à jour "seulement partiellement effectuées". Ce manuel fait référence au « mode strict », ce qui signifie un mode dans lequel au moins STRICT _TRANS_TABLES ou STRICT _ALL_TABLES est activé. Tous les modes pris en charge sont décrits ci-dessous :

・ALLOW_INVALID_DATES
Ne vérifiez pas toutes les dates en mode strict. Vérifie uniquement les mois entre 1 et 12 et les jours entre 1 et 31. Ceci est important dans les applications Web lorsque vous obtenez l'année, le mois et le jour à partir de trois champs différents et que vous souhaitez enregistrer exactement ce que l'utilisateur a inséré (sans validation de date). Ce mode fonctionne pour les colonnes DATE et DATETIME. Ne convient pas aux colonnes TIMESTAMP, qui nécessitent une validation de date. Avec le mode strict activé, le serveur nécessite un mois et un jour valides, pas seulement dans les plages 1 à 12 et 1 à 31 respectivement. Par exemple, « 2004-04-31 » est légal lorsque le mode strict est désactivé, mais illégal lorsque le mode strict est activé. Pour permettre le masquage des dates fixes en mode strict, ALLOW_INVALID_DATES doit également être activé.

・ANSI_QUOTES
Traitez '"' comme un guillemet d'identification (caractère de guillemet '''), et non comme un caractère de guillemet pour chaîne
. En mode ANSI, vous pouvez utilisez toujours ''' pour citer l'identifiant Avec ANSI_QUOTES activé, vous ne pouvez pas citer une chaîne avec des guillemets doubles, car elle est interprétée comme l'identifiant ・ERROR_FOR_pISION_BY_ZEROEn mode strict, pendant. INSERT ou UPDATE, s'il est divisé par zéro (ou MOD(X, 0)), une erreur est générée (sinon un avertissement) lors de la division par zéro. MySQL renvoie
NULL Si utilisé dans INSERT IGNORE ou UPDATE. IGNORER, MySQL génère un avertissement de division par zéro, mais le résultat de l'opération est NULL L'ordre de priorité de l'opérateur est
expression Par exemple, NOT a BETWEEN b AND c est interprété comme NOT (. a ENTRE b ET c). Dans certaines anciennes versions de MySQL, l'expression est interprétée comme (NON a) ENTRE b ET c). Activez le mode HIGH_NOT_PRECEDENCESQL pour obtenir le résultat priorité
supérieur précédent.

mysql> SET sql_mode = '';

mysql> SELECT NOT 1 BETWEEN -5 AND 5;

        -> 0

mysql> SET sql_mode = 'broken_not';

mysql> SELECT NOT 1 BETWEEN -5 AND 5;

        -> 1
Copier après la connexion

・IGNORE_SPACE
autorise les espaces entre les noms de fonctions et '('. Force tous les noms de fonctions à être traités comme des mots enregistrés. Le résultat est que si vous Pour accéder à un nom de base de données, de table ou de colonne enregistré sous forme de mot, vous devez le référencer. Par exemple, grâce à la fonction USER(), le nom de la table utilisateur dans la base de données mysql et la colonne Utilisateur dans la table. sont sauvegardés, vous devez donc les citer :

SELECT "User" FROM mysql."user";
Copier après la connexion

・NO_AUTO_CREATE_USER
防止GRANT自动创建新用户,除非还指定了密码。
・NO_AUTO_VALUE_ON_ZERO
NO_AUTO_VALUE_ON_ZERO影响AUTO_INCREMENT列的处理。一般情况,你可以向该列插入NULL或0生成下一个序列号。NO_AUTO_VALUE_ON_ZERO禁用0,因此只有NULL可以生成下一个序列号。
如果将0保存到表的AUTO_INCREMENT列,该模式会很有用。(不推荐采用该惯例)。例如,如果你用mysqldump转储表并重载,MySQL遇到0值一般会生成新的序列号,生成的表的内容与转储的表不同。重载转储文件前启用NO_AUTO_VALUE_ON_ZERO可以解决该问题。mysqldump在输出中自动包括启用NO_AUTO_VALUE_ON_ZERO的语句。
・NO_BACKSLASH_ESCAPES
禁用反斜线字符(‘\')做为字符串内的退出字符。启用该模式,反斜线则成为普通字符。
・NO_DIR_IN_CREATE
创建表时,忽视所有INDEX DIRECTORY和DATA DIRECTORY指令。该选项对从复制服务器有用。
・NO_ENGINE_SUBSTITUTION
如果需要的存储引擎被禁用或未编译,可以防止自动替换存储引擎。
・NO_FIELD_OPTIONS
不要在SHOW CREATE TABLE的输出中打印MySQL专用列选项。该模式在可移植模式(portability mode)下用于mysqldump。
・NO_KEY_OPTIONS
不要在SHOW CREATE TABLE的输出中打印MySQL专用索引选项。该模式在可移植模式(portability mode)下用于mysqldump。
・NO_TABLE_OPTIONS
不要在SHOW CREATE TABLE的输出中打印MySQL专用表选项(例如ENGINE)。该模式在可移植模式(portability mode)下用于mysqldump。
・NO_UNSIGNED_SUBTRACTION
在减运算中,如果某个操作数没有符号,不要将结果标记为UNSIGNED。请注意这样使UNSIGNED BIGINT不能100%用于上下文中。参见12.8节,“Cast函数和操作符”。
・NO_ZERO_DATE
在严格模式,不要将 '0000-00-00'做为合法日期。你仍然可以用IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告。
・NO_ZERO_IN_DAT
在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入'0000-00-00'。在非严格模式,可以接受该日期,但会生成警告。
・ONLY_FULL_GROUP_BY
不要让GROUP BY部分中的查询指向未选择的列。
・PIPES_AS_CONCAT
将||视为字符串连接操作符(+)(同CONCAT()),而不视为OR。
・REAL_AS_FLOAT
将REAL视为FLOAT的同义词,而不是DOUBLE的同义词。
・STRICT_TRANS_TABLES
为所有存储引擎启用严格模式。非法数据值被拒绝。后面有详细说明。
・STRICT_TRANS_TABLES
为事务存储引擎启用严格模式,也可能为非事务存储引擎启用严格模式。后面有详细说明。
严格模式控制MySQL如何处理非法或丢失的输入值。有几种原因可以使一个值为非法。例如,数据类型错误,不适合列,或超出范围。当新插入的行不包含某列的没有显示定义DEFAULT子句的值,则该值被丢失。
对于事务表,当启用STRICT_ALL_TABLES或STRICT_TRANS_TABLES模式时,如果语句中有非法或丢失值,则会出现错误。语句被放弃并滚动。
对于非事务表,如果插入或更新的第1行出现坏值,两种模式的行为相同。语句被放弃,表保持不变。如果语句插入或修改多行,并且坏值出现在第2或后面的行,结果取决于启用了哪个严格选项:
・对于STRICT_ALL_TABLES,MySQL返回错误并忽视剩余的行。但是,在这种情况下,前面的行已经被插入或更新。这说明你可以部分更新,这可能不是你想要的。要避免这点,最好使用单行语句,因为这样可以不更改表即可以放弃。
・对于STRICT_TRANS_TABLES,MySQL将非法值转换为最接近该列的合法值并插入调整后的值。如果值丢失,MySQL在列中插入隐式 默认值。在任何情况下,MySQL都会生成警告而不是给出错误并继续执行语句。13.1.5节,“CREATE TABLE语法”描述了隐式默认值。
Le mode strict n'autorise pas les dates illégales, telles que « 2004-04-31 ». Il n'autorise pas les dates interdites utilisant la partie « zéro », telles que les dates « 2004-04-00 » ou « zéro ». Pour le désactiver, activez les modes SQL NO_ZERO_IN_DATE et NO_ZERO_DATE basés sur le mode strict.
Si vous n'utilisez pas le mode strict (c'est-à-dire n'activez pas le mode STRICT_TRANS_TABLES ou STRICT_ALL_TABLES), MySQL insérera les valeurs ajustées et donnera un avertissement pour les valeurs illégales ou manquantes. En mode strict, vous pouvez le faire via INSERT IGNORE ou UPDATE IGNORE. Voir Section 13.5.4.22, « Syntaxe SHOW warns ».


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal