


Un article expliquant en détail le problème de rapport d'erreurs du paramètre MySQL only_full_group_by
L'environnement de développement est connecté à mysql5.6
, tandis que l'environnement de test est mysql5.7
. Pendant le développement, un ami a écrit une instruction sql
à propos de group by
. Il fonctionne normalement dans l'environnement de développement, mais des exceptions sont trouvées dans l'environnement de test. mysql5.6
,而测试环境是 mysql5.7
。开发中有小伙伴写了有关 group by
的 sql
语句。在开发环境中运行是正常的,而到了测试环境中就发现了异常。
原因分析:MySQL5.7
版本默认设置了 mysql sql_mode = only_full_group_by
属性,导致报错。
其中 ONLY_FULL_GROUP_BY
就是造成这个错误的罪魁祸首了,在这种严格模式下,对于 group by
聚合操作,若在 select
中的列没有在group by
中出现,那么这个 SQL
就是不合法的。因为开发写的 sql
中,select
列不在 group by
从句中,在使用 group by
时就会报错。
测试环境下载安装的是最新版的 mysql5.7.x
版本,默认是开启了 only_full_group_by
模式的。
1. 查看 sql_mode
SELECT` `@@sql_mode;
查询出来的值为:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2. 去掉ONLY_FULL_GROUP_BY,重新设置值。
SET` `@@``global``.sql_mode =``'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'``;
3. 上面是改变了全局sql_mode,对于新建的数据库有效。
对于已存在的数据库,则需要在对应的数据下执行
SET` `sql_mode =``'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'``;
以上方法mysql数据库重启后依然无效,下列方式重启后依然生效
找到 MySQL
的配置文件,在 linux
系统上 /etc/my.cnf
文件,查询 sql_mode
字段,我并没有在配置文件中找到这个关键字,所以我手动添加进去:
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
需要注意的一点是一定要添加在 [mysqld]
配置内,这样添加完后重启mysql
才会生效,退出数据库:exit,重启命令:
service mysqld restart #lnmp重启mysql lnmp restart mysql
刷新页面报错信息消失成功解决,再次连接上数据库查看 sql_mode
配置 select @@sql_mode
:
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
到此这篇关于 Mysql5.7
及以上版本 ONLY_FULL_GROUP_BY
报错的解决方法的文章就介绍到这了,更多相关 Mysql5.7 ONLY_FULL_GROUP_BY
Analyse des causes : la version MySQL5.7
a l'attribut mysql sql_mode = only_full_group_by
défini par défaut, provoquant une erreur.
ONLY_FULL_GROUP_BY
est le coupable de cette erreur Dans ce mode strict, pour l'opération d'agrégation group by
, si en select
Le. les colonnes n'apparaissent pas dans group by
, alors ce SQL
est illégal. Parce que dans le sql
écrit par le développeur, la colonne select
n'est pas dans la clause group by
lors de l'utilisation de group bycode> Signaler une erreur. <p></p>L'environnement de test a téléchargé et installé la dernière version de <code>mysql5.7.x
Le mode only_full_group_by
est activé par défaut.
1. Vérifiez sql_mode
rrreee
La valeur demandée est :ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_C REATE_USER ,NO_ENGINE_SUBSTITUTION
2. Supprimez ONLY_FULL_GROUP_BY et réinitialisez la valeur. .
rrreee
3. Ce qui précède modifie le sql_mode global, qui est valable pour la base de données nouvellement créée.
Pour les bases de données existantes, vous devez l'exécuter sous les données correspondantesrrreeeLa méthode ci-dessus est toujours invalide après le redémarrage de la base de données mysql, et la méthode suivante est toujours efficace après le redémarrage
Fichier MySQL
, dans le fichier /etc/my.cnf
sur le système linux
, interrogez le champ sql_mode
que j'ai fait. Je n'ai pas trouvé ce mot-clé dans le fichier de configuration, je l'ai donc ajouté manuellement : 🎜rrreee🎜Une chose à noter est qu'il doit être ajouté dans la configuration [mysqld]
, afin qu'après l'avoir ajouté, redémarrez. mysql
pour prendre effet et quitter. Base de données : quitter, redémarrer la commande : 🎜rrreee🎜Actualisez la page et le message d'erreur disparaît et est résolu avec succès. Connectez-vous à nouveau à la base de données pour afficher le sql_modecode>. Configurez <code>select @@sql_mode
: 🎜🎜STRICT_TRANS_TABLES . Voilà, plus Mysql5.7 ONLY_FULL_GROUP_BY
🎜🎜🎜Voici la signification des valeurs communes. de sql_mode, référence : 🎜🎜🎜ONLY_FULL_GROUP_BY : Pour les opérations d'agrégation GROUP BY, si la colonne dans SELECT, il n'y a pas d'apparition dans GROUP BY, alors ce SQL est illégal car la colonne n'est pas dans la clause GROUP BY🎜 🎜NO_AUTO_VALUE_ON_ZERO : Cette valeur affecte l'insertion de colonnes à augmentation automatique. Dans les paramètres par défaut, l'insertion de 0 ou NULL représente la génération de la prochaine valeur auto-augmentante. Cette option est utile si l'utilisateur souhaite insérer une valeur de 0 et que la colonne s'augmente automatiquement. 🎜🎜STRICT_TRANS_TABLES : Dans ce mode, si une valeur ne peut pas être insérée dans une table de transactions, l'opération en cours sera interrompue, et il n'y aura aucune limite sur les tables non-transactions 🎜🎜NO_ZERO_IN_DATE : En mode strict, les dates et les mois sont. pas autorisé à être zéro🎜 🎜NO_ZERO_DATE : définir cette valeur. La base de données MySQL ne permet pas l'insertion de dates nulles. L'insertion de dates nulles générera une erreur au lieu d'un avertissement. 🎜🎜ERROR_FOR_DIVISION_BY_ZERO : Lors d'un INSERT ou d'un UPDATE, si les données sont divisées par zéro, une erreur est générée au lieu d'un avertissement. Si le mode n'est pas donné, MySQL renvoie NULL lorsque les données sont divisées par zéro 🎜🎜NO_AUTO_CREATE_USER : empêche GRANT de créer des utilisateurs avec des mots de passe vides 🎜🎜NO_ENGINE_SUBSTITUTION : renvoie une erreur si le moteur de stockage requis est désactivé ou n'est pas compilé. Lorsque cette valeur n'est pas définie, le moteur de stockage par défaut est utilisé à la place et une exception est levée. 🎜🎜PIPES_AS_CONCAT : traitez "||" comme un opérateur de connexion de chaîne au lieu d'un opérateur OR. à la fonction de concaténation de chaînes Concat🎜🎜ANSI_QUOTES : Après avoir activé ANSI_QUOTES, les guillemets doubles ne peuvent pas être utilisés pour citer la chaîne car elle est interprétée comme un identifiant. 🎜🎜Apprentissage recommandé : "🎜Tutoriel vidéo MySQL🎜"🎜🎜
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

MySQL est un système de gestion de base de données relationnel open source. 1) Créez une base de données et des tables: utilisez les commandes CreateDatabase et CreateTable. 2) Opérations de base: insérer, mettre à jour, supprimer et sélectionner. 3) Opérations avancées: jointure, sous-requête et traitement des transactions. 4) Compétences de débogage: vérifiez la syntaxe, le type de données et les autorisations. 5) Suggestions d'optimisation: utilisez des index, évitez de sélectionner * et utilisez les transactions.

Vous pouvez ouvrir PHPMYADMIN via les étapes suivantes: 1. Connectez-vous au panneau de configuration du site Web; 2. Trouvez et cliquez sur l'icône PHPMYADMIN; 3. Entrez les informations d'identification MySQL; 4. Cliquez sur "Connexion".

MySQL est un système de gestion de la base de données relationnel open source, principalement utilisé pour stocker et récupérer les données rapidement et de manière fiable. Son principe de travail comprend les demandes des clients, la résolution de requête, l'exécution des requêtes et les résultats de retour. Des exemples d'utilisation comprennent la création de tables, l'insertion et la question des données et les fonctionnalités avancées telles que les opérations de jointure. Les erreurs communes impliquent la syntaxe SQL, les types de données et les autorisations, et les suggestions d'optimisation incluent l'utilisation d'index, les requêtes optimisées et la partition de tables.

MySQL est choisi pour ses performances, sa fiabilité, sa facilité d'utilisation et son soutien communautaire. 1.MySQL fournit des fonctions de stockage et de récupération de données efficaces, prenant en charge plusieurs types de données et opérations de requête avancées. 2. Adoptez l'architecture client-serveur et plusieurs moteurs de stockage pour prendre en charge l'optimisation des transactions et des requêtes. 3. Facile à utiliser, prend en charge une variété de systèmes d'exploitation et de langages de programmation. 4. Avoir un solide soutien communautaire et fournir des ressources et des solutions riches.

Redis utilise une architecture filetée unique pour fournir des performances élevées, une simplicité et une cohérence. Il utilise le multiplexage d'E / S, les boucles d'événements, les E / S non bloquantes et la mémoire partagée pour améliorer la concurrence, mais avec des limites de limitations de concurrence, un point d'échec unique et inadapté aux charges de travail à forte intensité d'écriture.

MySQL et SQL sont des compétences essentielles pour les développeurs. 1.MySQL est un système de gestion de base de données relationnel open source, et SQL est le langage standard utilisé pour gérer et exploiter des bases de données. 2.MySQL prend en charge plusieurs moteurs de stockage via des fonctions de stockage et de récupération de données efficaces, et SQL termine des opérations de données complexes via des instructions simples. 3. Les exemples d'utilisation comprennent les requêtes de base et les requêtes avancées, telles que le filtrage et le tri par condition. 4. Les erreurs courantes incluent les erreurs de syntaxe et les problèmes de performances, qui peuvent être optimisées en vérifiant les instructions SQL et en utilisant des commandes Explication. 5. Les techniques d'optimisation des performances incluent l'utilisation d'index, d'éviter la numérisation complète de la table, d'optimiser les opérations de jointure et d'améliorer la lisibilité du code.

La position de MySQL dans les bases de données et la programmation est très importante. Il s'agit d'un système de gestion de base de données relationnel open source qui est largement utilisé dans divers scénarios d'application. 1) MySQL fournit des fonctions efficaces de stockage de données, d'organisation et de récupération, en prenant en charge les systèmes Web, mobiles et de niveau d'entreprise. 2) Il utilise une architecture client-serveur, prend en charge plusieurs moteurs de stockage et optimisation d'index. 3) Les usages de base incluent la création de tables et l'insertion de données, et les usages avancés impliquent des jointures multiples et des requêtes complexes. 4) Des questions fréquemment posées telles que les erreurs de syntaxe SQL et les problèmes de performances peuvent être déboguées via la commande Explication et le journal de requête lente. 5) Les méthodes d'optimisation des performances comprennent l'utilisation rationnelle des indices, la requête optimisée et l'utilisation des caches. Les meilleures pratiques incluent l'utilisation des transactions et des acteurs préparés

La récupération des lignes supprimées directement de la base de données est généralement impossible à moins qu'il n'y ait un mécanisme de sauvegarde ou de retour en arrière. Point clé: Rollback de la transaction: Exécutez Rollback avant que la transaction ne s'engage à récupérer les données. Sauvegarde: la sauvegarde régulière de la base de données peut être utilisée pour restaurer rapidement les données. Instantané de la base de données: vous pouvez créer une copie en lecture seule de la base de données et restaurer les données après la suppression des données accidentellement. Utilisez la déclaration de suppression avec prudence: vérifiez soigneusement les conditions pour éviter la suppression accidentelle de données. Utilisez la clause WHERE: Spécifiez explicitement les données à supprimer. Utilisez l'environnement de test: testez avant d'effectuer une opération de suppression.
