2010-02-15 4 views
5

J'utilise un déclencheur pour insérer une ligne et je souhaite utiliser le dernier identifiant créé à utiliser dans la requête suivante.Obtenir le dernier identifiant inséré dans un déclencheur?

Comment est-ce que je pourrais faire ceci?

Le code ressemble à:

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 

Répondre

7

Avez-vous regardé LAST_INSERT_ID()? Mais il faut savoir:

Si vous insérez plusieurs lignes en utilisant une seule instruction INSERT , LAST_INSERT_ID() renvoie la valeur générée pour la première ligne insérée seulement.

+0

Lorsque j'utilise cela dans un after_trigger, elle renvoie le précédent ID inséré pour une raison quelconque ... par exemple 'NEW.id' peut être utilisé cependant. Et par exemple 'OLD.id' peut être utilisé sur delete ou update (au moins c'est ce qui est écrit dans les docs.). [docs.] (https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html) – ravo10

1

Je voulais utiliser un sigle de l'entreprise comme « AAA » et ajoutez l'ID d'insert et de l'utiliser en tant que société interne ID et c'est ainsi que je pris le dernier ID d'insertion actuel

DELIMITER // 
CREATE TRIGGER company_run_before_insert BEFORE INSERT ON ap_company 
FOR EACH ROW 
BEGIN 

SET @lastID = (SELECT id FROM ap_company ORDER BY id DESC LIMIT 1); 
IF @lastID IS NULL OR @lastID = '' THEN 
    SET @lastID = 0; 
END IF; 
SET @lastID = @lastID +1; 
SET NEW.ap_company_id = concat(NEW.company_initials,'-', @lastID); 
END; 
+0

Merci beaucoup ... – Ivan

0

UTILISATION 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

Après déclenchement aura la dernière valeur Incrémenter automatique du schéma d'information. J'avais écrit ce déclencheur pour générer une limace. Par exemple, si le nom de la colonne est "Nom" et que la colonne a une valeur telle que "Robin Shankar", le déclencheur remplacerait les espaces par "-" et ajouterait également l'Id d'incrémentation automatique à la fin du slug, donc faire une limace unique.

robin_shankar_9071

DELIMITER // 
CREATE TRIGGER insert_slug_sd 
BEFORE INSERT ON `your_table_name` 
FOR EACH ROW 
BEGIN 

DECLARE auto_increment_ INT(11); 

SELECT 
    `auto_increment` 
INTO 
    auto_increment_ 
FROM INFORMATION_SCHEMA.TABLES 
    WHERE 
table_name = 'your_table_name'; 

SET NEW.`Slug` = CONCAT(LOWER(REPLACE(NEW.`Name`,' ','-')),'-',auto_increment_); 
END; // 

DELIMITER; 
0
SET NEW.num=CONCAT("А-", (
    SELECT `auto_increment` 
    FROM INFORMATION_SCHEMA.TABLES  
    WHERE table_name = 'menu') 
) 
+0

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

Questions connexes