2010-02-15 57 views
5

我使用觸發器來插入一行,並希望使用最後創建的ID在後續查詢中使用。在觸發器中獲取最新插入的ID?

我該怎麼做?

代碼如下:

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 

回答

7

你有沒有看LAST_INSERT_ID()?但要注意:

如果插入使用 單INSERT語句多行, LAST_INSERT_ID()返回 只有第一個插入的行生成的值 。

+0

當我使用這個在after_trigger,它返回以前插入ID出於某種原因...例如'NEW.id'可以使用。並且例如'OLD.id'可以用於刪除或更新(至少這是文檔中寫的)。 [docs。](https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html) – ravo10 2017-12-10 01:53:35

1

我想用公司英文縮寫,如「AAA」和插件ID添加到它,並以此作爲公司內部的ID,這是我撿到最後的當前插入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; 
+0

非常感謝你... – Ivan 2017-05-23 17:08:36

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

以下觸發器將從信息模式中獲取最後一個自動增量值。我寫了這個觸發器來產生一個slu。。例如,如果列的名稱是「Name」並且列中有諸如「Robin Shankar」的值,則觸發器將用「 - 」替換空格,並將自動遞增ID附加到段落的末尾,因此製造出獨特的slu。。

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)等是不起作用的如果你刪除最後一條記錄 – 2017-04-16 20:05:50