Est-il une commande pour tester une requête SQL sans l'exécuter? ( MySQL ou SQL ANSI )
Est-il quelque chose comme ceci:
TEST DELETE FROM user WHERE somekey = 45;
Que peut retourner toutes les erreurs, par exemple, que somekey n'existe pas, ou certains de violation de contrainte ou de quoi que ce soit, de reporting et de combien de lignes seraient touchés, mais pas l'exécution de la requête?
Je sais que vous pouvez facilement transformer n'importe quelle requête dans une requête select qui n'a pas d'écrire ou de supprimer l'effet dans la ligne, mais qui peut conduire à des erreurs et il n'est pas très pratique si vous voulez tester et de déboguer les nombreuses requêtes.
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est un peu une vieille question, mais pour l'exhaustivité...
Si l'intention est de trouver le traitement des requêtes sans avoir à retourner toutes les lignes (j'en ai besoin assez souvent, je veux savoir combien de temps un morceau de code, je suis en utilisant prendra sans avoir de retour d'un couple de millions de lignes, je ne suis pas intéressé à voir) puis le BLACKHOLE moteur peut être très utile:
https://dev.mysql.com/doc/refman/8.0/en/blackhole-storage-engine.html
Par exemple dire que j'ai 2 tables, t1 & t2, avec des millions de lignes, que je vais rejoindre ensemble. Je veux vérifier combien de temps cela va probablement prendre, dans une interface graphique (Contrairement à d'autres ou mysql workbench ou somesuch) sans rentrer des millions de lignes qui va manger de la mémoire, et sans doute prendre du temps pour l'interface utilisateur pour le traitement et l'affichage. J'utilise le blackhole moteur pour "décharger" les lignes de nulle part.
Par exemple:
Noter que comme je suis juste à la recherche pour les temps d'exécution, je ne les dérange pas de retourner toutes les colonnes (c'est à dire avec "*") mais juste un espace réservé ("1" dans ce cas).
La seule chose que je sais c'est de l'envelopper dans une transaction qui n'est toujours restaurée:
Assurez-vous d'exécuter le bloc entier et pas seulement l'instruction delete. Aussi, NE PAS s'exécuter sur n'importe quel environnement de production ou de n'importe quel système où vous ne pouvez pas se permettre de perdre les données.
START TRANSACTION;
(requête, avec un point virgule)ROLLBACK;
. Appris à leurs dépens.Dans MySQL utiliser cette
Il est important d'utiliser ";" parce que si vous ne le faites pas, ça ne marchera pas. Par exemple
Référence ici http://dev.mysql.com/doc/refman/5.0/en/commit.html
ANSI SQL: No.
MySQL: Peut-Être. L'EXPLIQUER mot-clé à l'origine travaillé uniquement avec des SELECT, mais, il aurait été étendu à mettre à JOUR et SUPPRIMER maintenant.
MySQL 5.6, le
EXPLAIN
mot clé fonctionne avecSELECT
,DELETE
,INSERT
,REPLACE
, etUPDATE
consolidés.Si votre requête contient une erreur de syntaxe, alors il échouera toujours, cependant, en cas de succès, vous ne verrez que les résultats de l'EXPLIQUER et de la requête ne sera pas apporter des modifications.
C'est beaucoup plus simple que de faire des modifications de schéma, à l'aide de tables temporaires, ou l'abandon des transactions que tout ce que vous devez faire est d'insérer "EXPLIQUER" en face de votre requête existante.
Plus d'informations:
https://dev.mysql.com/doc/refman/5.6/en/explain.html
À ma connaissance, il n'existe pas. En outre, il ne serait pas une erreur si aucun
somekey
avec la valeur 45 n'existe pas. Il serait juste de ne pas supprimer n'importe quoi.Vous pouvez utiliser F11 avec Teradata SQL Assistant pour ce faire
Sorte de. Disons que vous avez un tableau que vous souhaitez mettre à jour: "Entrée". Vous pouvez
Dans ce cas, Col1 et Col2 sont les colonnes de la table d'Entrée. Si vous avez écrit
au lieu de la première SÉLECTIONNEZ, vous auriez votre mise à jour. Il ne fonctionne pas pour tous les scénarios, mais, si c'est une simple mise à jour, vous pouvez obtenir un aperçu rapide de cette façon.