8
votes

Obtenez le dernier identifiant inséré dans un déclencheur?

J'utilise un déclencheur pour insérer une ligne et je veux utiliser le dernier identifiant créé pour utiliser dans la requête ultérieure.

Comment pourrais-je faire cela? P>

Le code ressemble à: p >

BEGIN
IF (NEW.counter >= 100) THEN
INSERT INTO tagCategories (name, counter) VALUES ('unnamed', NEW.counter);
// here i want to have access to the above inserted id
UPDATE tagCategories2tagPairs SET tagCategoryId = <<ID_HERE>> WHERE tagPairId = OLD.id
END IF;
END


0 commentaires

5 Réponses :


8
votes

Avez-vous regardé last_insert_id () ? Mais sachez:

Si vous insérez plusieurs rangées en utilisant un Déclaration à insertion unique, Last_insert_id () renvoie la valeur généré pour la première rangée insérée seulement.


2 commentaires

Lorsque j'utilise cela dans un antérieur_trigger, il renvoie l'identifiant inséré précédent pour une raison quelconque ... E.G. new.id peut cependant être utilisé. Et par exemple Old.Id peut être utilisé sur Supprimer ou mettre à jour (au moins c'est ce qui est écrit dans les documents.). DOCS.


@ Ravo10 Exactement, il faut utiliser les nouveaux et les anciens objets pour éviter le problème avec plusieurs insertions de lignes au lieu de Last_Insert_ID (). Ceci est montré dans Cette réponse .



3
votes

Je voulais utiliser des initiales de la société telles que "AAA" et ajouter l'ID d'insertion et l'utiliser comme ID d'entreprise interne et c'est ainsi que j'ai pris le dernier identifiant d'insertion actuelle xxx / p>


0 commentaires

-1
votes

Utilisez NEW.ID

BEGIN
insert INTO test_questions (test_id, question, variant1, variant2, variant3, w1, type_id) 
SELECT NEW.id, t1.question, t1.v1, t1.v2, t1.v3, t1.answer, 1
FROM new_minitest_questions t1
WHERE t1.mt_id = NEW.old_id;
END


0 commentaires

-1
votes

Le déclencheur suivant obtiendra la dernière valeur d'incrémentation automatique du schéma d'informations. J'avais écrit cette gâchette pour générer une limace.

Pour les instances, si le nom de la colonne est "Nom" et la colonne a une valeur telle que "Robin Shankar", le déclencheur remplacerait des espaces avec "-" et ajoute également l'auto ID d'incrément à la fin de la limace, ce qui fait une limace unique.

robin_sharankar_9071 xxx


0 commentaires

-1
votes
SET NEW.num=CONCAT("А-", (
  SELECT `auto_increment` 
  FROM INFORMATION_SCHEMA.TABLES    
  WHERE table_name = 'menu')
)

1 commentaires

max (id) et ainsi de suite est de ne pas travailler si vous supprimez un dernier enregistrement