在触发器中获取最新插入的ID?

时间:2010-02-15 00:28:17

标签: mysql database triggers

我使用触发器插入一行,并希望在后续查询中使用最后创建的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

5 个答案:

答案 0 :(得分:8)

你看过LAST_INSERT_ID()了吗?但请注意:

  

如果使用a插入多行   单个INSERT语句,   LAST_INSERT_ID()返回值   为第一个插入的行生成   仅

答案 1 :(得分:2)

我想使用像“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;

答案 2 :(得分:-1)

使用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

答案 3 :(得分:-1)

以下触发器将从信息架构中获取最后一个自动增量值。我写过这个触发器来生成一个slu ..

例如,如果列的名称为“Name”且列具有诸如“Robin Shankar”的值,则触发器将用“ - ”替换空格,并且还将自动增量ID附加到slug的末尾,因此制作一个独特的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;

答案 4 :(得分:-1)

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