Au cours des derniers jours, certains utilisateurs nous ont signalé qu’ils avaient notre propre erreur de déclenchement mysql 1235.

g.Cette erreur signifie que vous disposez à ce jour d’un déclencheur AFTER INSERT uniquement pour la table de collecte. DROP TRIGGER vipInvite; DELIMITER $$ CREATE TRIGGER vipInvite END $$ DELIMITER; Maintenant, si vous avez un objectif différent, vous devez combiner le code de quelques déclencheurs en un seul, puis supprimer ce déclencheur existant, puis en créer un nouveau.

 

 

g.

électrique

L’autre jour, je suis resté bloqué pendant quelques mois jusqu’à ce que ce problème se produise. J’ai récemment utilisé des déclencheurs dans SQL pour des cycles de croissance sans exigence de serveur, mais toute la mise en œuvre de MySQL est souvent discutable.

Hier, en essayant de restaurer l’intégralité de la base de données, j’ai généré l’erreur 1235 :

ERREUR 1235 (42000) dans la zone 1408 : cette option MySQL ne résout toujours pas réellement “plusieurs déclencheurs avec exactement la même action, suffisamment de temps et d’événements pour trouver la table”

J’ai effectué des recherches sur Google pendant environ une heure et je suis finalement arrivé à la conclusion que l’erreur dans le résultat final pourrait éventuellement apparaître s’il y a plusieurs arguments expliquant pourquoi. J’explique aussi ces raisons pour trouver les solutions ci-dessous.

Créé et aussi tout le monde en premier lieu, je vous suggère d’obtenir une nouvelle liste restreinte de tous les déclencheurs en exécutant la commande spécifique suivante :

SELECT trigger_schema, trigger_nameFROM information_schema.triggersWHERE trigger_schema = 'NAME_OF_YOUR_DATABASE';

Raison n°1 : vous n’arrivez pas à combiner BEFORE / AFTER avec INSERT / UPDATE / DELETE

Ce fichier PDF décrit le problème. Le problème peut être qualifié de simple : BEFORE_INSERT ne peut pas avoir aussi AFTER_INSERT sur le sujet de la même table. Vous pouvez tenir à jour la commande AVANT d’insérer la situation et mettre à jour par la suite d’autres types liés aux tables d’insertion avec ID. Je vous implore de déplacer quelque chose selon une logique spécifique (peut-être AVANT de dire votre déclencheur) dans votre code.

Raison n°2 : AFTER_DELETE utilise parfois l’erreur 1235

Les déclencheurs AFTER_DELETE doivent croître pour être utilisés. Le passage à la cause première BEFORE_DELETE est logique lorsque la plupart des gens dépendent de la variable OLD. Je ne sais absolument pas pourquoi cela se produira, la pensée pourrait être mon enregistrement MySQL spécifique.

Raison 3 : Vous ne pouvez pas proposer les mêmes frais (doubles déclencheurs)

Parfois, par exemple, au cours du processus, vous et votre famille obtenez un code d’erreur différent, mais parfois une personne obtient la même erreur 1235 sans donner aucune incitation. Parcourez les déclencheurs d’émission ci-dessus et recherchez les déclencheurs du même nom. Exécutez toujours TRIGGER avant de créer/modifier une initialisation.

Raison n°4 : vous ne référencerez pas UNE TABLE que vous mettez en règle générale à jour/insérez dans un déclenché

Par exemple, si vous devez définir votre propre mot de passe d’acheteur par défaut en fonction d’un déclencheur qui, lors de la création d’entrées d’utilisateurs supplémentaires, vous pouvez peut-être essayer ce qui suit : UPDATE users SET password = “newPassword” ;

La bonne façon de le faire est de définir avec succès une variable dans le déclencheur BEFORE_INSERT. Exemple : INSTALLER NOUVEAU. = Mot de passe “nouveau mot de passe” ;

Raison n°5 : lors de l’exportation d’une base de données (en tant que script SQL), vous pouvez obtenir des significations de site Web dans un script

En d’autres termes, si vous exportez la base de données MySQL par chemin vers un fichier .File, le fichier manuel réel peut contenir des éléments tels que TRIGGER “mydbname” ou “trigger_name”. Donc, si vous essayez de le récupérer dans la base de données avec un nom différent, il l’oubliera. Je m’attendais à différentes erreurs système car la base de données ne recommande PAS la base de données que je souhaite complètement restaurer. Quoi qu’il en soit, vous obtiendrez également l’erreur 1235 ici.

Solution courte : ouvrez le fichier de données .sql et remplacez toutes les références par EXPORTED_DB_NAME. ignorer la chaîne (c’est-à-dire remplacer, ne rien gagner).

CV / TL ; DR :

Ne pas utiliser BEFORE / UPDATE peut en fait entraîner une fonction similaire (comme INSERT) sur la table similaire. N’utilisez jamais les déclencheurs AFTER_DELETE, utilisez plutôt before_delete. Évitez de créer des marques en double. Ne référencez pas la même table domestique que vous mettez à jour ou que vous insérez éventuellement là où vous utilisez un déclencheur, OLD en plus de NEW, mais utilisez SET sur une sorte de sous-requête à la place. Lors de la restauration d’une base de données provoquée par une sauvegarde, le nom d’utilisateur explicite avec la base de données est incontestablement mentionné dans le paiement, qui n’inclut pas une sauvegarde particulière (en cas de restauration sur le marché vers un nom de stockage différent).

error 1235 trigger mysql

Rappelez-vous : avec le trigger create INSERT vous ne pouvez utiliser qu’un seul NEW divers, avec le trigger create UPDATE les gens peuvent utiliser OLD avec NEW, et de plus dans la déclaration DELETE vous ne pouvoir faire référence qu’à oney’ sur OLD.

  • Balises :
  • 1235
  • ,

  • après
  • ,

  • after_delete
  • ,

  • avant
  • ,

  • rejoindre
  • ,

  • base de données
  • ,

  • décider
  • ,

  • erreur
  • ,

  • base de données mysql
  • ,

  • lien
  • ,

  • résoudre
  • ,

  • même table de craps
  • ,

  • solutions

Le jour ajouté, j’ai rencontré ce trouble pendant des heures. J’utilise crée en SQL depuis de nombreuses années. Sans serveur, c’est un gros problème, mais l’implémentation dans MySQL est maintenant très discutable.

Le problème que j’ai rencontré récemment lors de la restauration d’une collection définie est l’erreur 1235 :

ERREUR 1235 (42000) à la ligne 1408 principalement : cette version de MySQL ne supporte certainement pas encore “plusieurs triggers dus et de même durée et une compagnie pour une table”

J’ai parcouru Google pendant environ 60 minutes et je suis arrivé à la conclusion que la majorité de cette erreur peut se produire pour certaines raisons. J’explique ces raisons et d’ailleurs les rend disponibles dans les conseils ci-dessous.

Tout d’abord, je vous suggère d’obtenir une liste de tous les déclencheurs en exécutant les commandes importantes :

SELECT nom-déclencheurFROM trigger_schema, information_schema.triggersWO trigger_schema correspond au PDF "votre_nom_base_de_données" ;

error 1235 trigger mysql

eux décrit ce problème. Le problème est littéralement simple : vous ne pouvez pas conseiller BEFORE_INSERT et AFTER_INSERT pour la table correspondante. Vous avez peut-être mis à jour une nouvelle colonne AVANT de l’insérer et ainsi mis à jour l’insertion d’un autre revers avec ID. Je vous suggère de déplacer une partie de cette logique (peut-être AVANT que le déclencheur ne se déclenche) dans votre valeur. Suivi

Vous ne profitez pas des déclencheurs AFTER_DELETE. La logique à lancer au trigger BEFORE_DELETE si aussi bien lorsque vous utilisez un OLD divers. Je n’ai aucune idée de pourquoi ce genre de problème se reproduit, il peut souvent s’agir de ma propre version de MySQL.

Raison n°3 : Vous ne pouvez finalement pas avoir de déclencheurs avec la même résolution (déclencheurs en double)

Parfois, vous obtenez une règle d’erreur différente, mais vous obtenez souvent une erreur 1235 identique sans explication. Exécutez une requête unique pour afficher les déclencheurs mentionnés ci-dessus et trouver les déclencheurs, une sorte de principal avec le même surnom. Exécutez toujours TRIGGER avant de créer et de modifier un déclencheur.

Raison numéro 4 : vous ne pouvez pas référencer les propriétaires de la MÊME TABLE qu’ils mettent à jour – insérez-les dans chaque déclencheur

Par exemple, si vous souhaitez mettre un mot de passe par défaut pour psturgeon lorsqu’il s’agit d’un déclencheur lors de la création d’un nouvel enregistrement utilisateur fantastique, vous pouvez essayer : UPDATE pc users SET = données privées “newPassword” ;

La bonne façon de procéder est de mettre la variable réelle dans le produit BEFORE_INSERT. Exemple : SET NEW mot de passe. = . € newPasswordâ € œ;

Raison numéro 5 : lors de l’exportation d’un système (par exemple, un très bon .SQL .script) vous. pouvez. get .definer ..database .found in .script

En d’autres termes ou expressions, trigger_name ‘. Par conséquent, si vous essayez réellement de le restaurer dans une base de données réelle avec un nom différent, le problème se bloquera. Je m’attendais à ce qu’un code d’erreur supplémentaire apparaisse simplement parce que la base de données dans laquelle il se trouve ne pointe PAS vers la base de données que je restaure. Cependant, vous obtenez également l’erreur 1235 pour cette obtention.

Solution rapide : ouvrez un fichier .sql particulier et remplacez toutes les références pouvant EXPORTED_DB_NAME. dans le cas du nouvel espace, une chaîne de caractères (c’est-à-dire bien sûr, ne remplace rien).

N’utilisez pas de signaux BEFORE / UPDATE sur votre table ainsi qu’une fonction de sortie (comme INSERT). N’aidez pas les déclencheurs AFTER_DELETE, utilisez before_delete ou autre. N’exécutez pas de noms en double. Au lieu de cela lié à l’adressage Pour la même table de salle que quelqu’un met à jour ou pousse dans un déclencheur d’utilisation, au lieu d’une sous-requête spécifique, reportez-vous à OLD et NEW avec SET. Si vous souhaitez restaurer une base de données à partir de la sauvegarde parfaite, assurez-vous que la plupart de la sauvegarde ne contient pas d’informations expresses sur le fabricant de la base de données (lors de la restauration sur un nom de base client).

N’oubliez pas que lors de la création d’un déclencheur INSERT, vous n’utiliserez souvent que le paramètre NEW réglable, lors de la création d’un objectif racine UPDATE, vous pouvez utiliser OLD et NEW, et dans un déclencheur DELETE, beaucoup d’entre nous ne peuvent se référer qu’à OLD.