Получить последний вставленный идентификатор в триггере? - PullRequest
6 голосов
/ 15 февраля 2010

Я использую триггер для вставки строки и хочу использовать последний созданный идентификатор для использования в следующем запросе.

Как я мог это сделать?

Код выглядит так:

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 ]

8 голосов
/ 15 февраля 2010

Вы смотрели на LAST_INSERT_ID () ? Но знайте:

Если вы вставляете несколько строк, используя единственное утверждение INSERT, LAST_INSERT_ID () возвращает значение генерируется для первой вставленной строки только.

2 голосов
/ 13 августа 2013

Я хотел использовать инициалы компании, такие как «AAA», добавить идентификатор вставки и использовать его в качестве внутреннего идентификатора компании, и вот как я выбрал последний текущий идентификатор вставки

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 голосов
/ 16 апреля 2017
SET NEW.num=CONCAT("А-", (
  SELECT `auto_increment` 
  FROM INFORMATION_SCHEMA.TABLES    
  WHERE table_name = 'menu')
)
0 голосов
/ 16 апреля 2016

Следующий триггер получит последнее значение автоинкремента из информационной схемы. Я написал этот триггер для генерации пули.

Например, если имя столбца равно «Имя», а столбец имеет значение, например «Робин Шанкар», триггер заменит пробелы на «-», а также добавит идентификатор автоматического увеличения в конец слага, делая уникальный слизень.

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 голосов
/ 04 декабря 2013

ИСПОЛЬЗОВАТЬ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...