2010-02-15 61 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