2010-02-15 11 views
5

Ich verwende einen Trigger, um eine Zeile einzufügen und die zuletzt erstellte ID für die Verwendung in der nachfolgenden Abfrage zu verwenden.Erhalten Sie die zuletzt eingefügte ID in einem Trigger?

Wie könnte ich das tun?

Der Code sieht so aus:

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 

Antwort

7

Haben Sie bei LAST_INSERT_ID() geschaut? Aber beachten Sie:

Wenn Sie mehrere Zeilen mit einer einzelnen INSERT-Anweisung einfügen, LAST_INSERT_ID() gibt den Wert für die erste eingefügte Zeile erzeugt nur.

+0

Wenn ich dies in einem after_trigger verwenden, ist es die vorherige eingefügt ID aus irgendeinem Grund zurückkehrt ... z.B. 'NEW.id' kann jedoch verwendet werden. Und z.B. 'OLD.id' kann beim Löschen oder Aktualisieren verwendet werden (zumindest ist dies in den Dokumenten geschrieben). [Dok.] (https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html) – ravo10

1

Ich wollte ein Unternehmen Initialen wie „AAA“ verwenden und die Insert-ID, um es hinzuzufügen und sie als unternehmensinterne ID zu verwenden und das ist, wie ich die letzte aktuelle Insert ID

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; 
abgeholt
+0

Vielen Dank ... – Ivan

0

USE 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

nach Trigger wird den letzten Auto Increment Wert aus dem Informationsschema erhalten. Ich hatte diesen Auslöser geschrieben, um eine Schnecke zu erzeugen. Wenn der Name der Spalte "Name" lautet und die Spalte einen Wert wie "Robin Shankar" hat, ersetzt der Trigger Leerzeichen durch "-" und fügt die Auto Increment Id an das Ende des Slugs an. daher eine einzigartige Schnecke.

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) und so weiter ist nicht funktionieren Wenn Sie einen letzten Datensatz löschen –

Verwandte Themen