2010-02-15 12 views
5

Uso un disparador para insertar una fila y quiero usar la última ID creada para usar en la siguiente consulta.¿Obtienes la última identificación insertada en un desencadenante?

¿Cómo podría hacer esto?

El código es el siguiente:

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 

Respuesta

7

¿Has mirado en LAST_INSERT_ID()? Pero tenga en cuenta:

Si inserta varias filas utilizando una sola instrucción INSERT , LAST_INSERT_ID() devuelve el valor generada por la primera fila insertada solamente.

+0

Cuando utilizo esto en un after_trigger, devuelve el ID insertada anterior por alguna razón, por ejemplo ... 'NEW.id' se puede utilizar sin embargo. Y p. 'OLD.id' se puede usar en eliminar o actualizar (al menos esto es lo que está escrito en los documentos). [documentos] (https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html) – ravo10

1

que quería utilizar una compañía iniciales como "AAA" y añadir el ID de inserción a ella y utilizarla como una identificación interna de la empresa y esto es lo que recogí el último ID actual inserto

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

Muchas gracias ... – Ivan

0

USO 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

siguiente trigger obtendrá el último valor de incremento automático de la información de esquema. Había escrito este disparador para generar una babosa.

Por ejemplo, si el nombre de la columna es "Nombre" y la columna tiene un valor como "Robin Shankar", el activador reemplazará los espacios con "-" y también agregará el Aumento automático Id al final de la barra, por lo tanto, haciendo una babosa única.

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) y así sucesivamente no funciona si eres eliminar un último registro –

Cuestiones relacionadas