2010-02-15 10 views
5

Używam wyzwalacza do wstawienia wiersza i chcę użyć ostatnio utworzonego identyfikatora do użycia w kolejnym zapytaniu.Uzyskaj najnowszy wstawiony identyfikator w wyzwalaczu?

Jak mogę to zrobić?

Kod wygląda następująco:

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 

Odpowiedz

7

Pan spojrzał na LAST_INSERT_ID()? Ale należy pamiętać:

Jeśli wstawić wiele wierszy przy użyciu pojedynczego INSERT, LAST_INSERT_ID() zwraca wartość wygenerowany dla pierwszego wstawionego tylko rzędu .

+0

Kiedy używać to w after_trigger, zwraca poprzedni wstawiony identyfikator z jakiegoś powodu ... np Można jednak użyć 'NEW.id'. I np. 'OLD.id' może być użyty przy usuwaniu lub aktualizacji (przynajmniej to jest napisane w dokumentach.). [docs.] (https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html) – ravo10

1

chciałem używać inicjałów firma jak „AAA” i dodać identyfikator insert do niego i używać go jako wewnętrzny ID firmy iw ten sposób Podniosłem ostatni aktualny 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; 
+0

Dziękuję bardzo ... – 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

po spust dostanie ostatnią wartość automatycznego przyrostu z informacji Schema. Napisałem ten spust, aby wygenerować ślimak.

Dla instancji, jeśli nazwa kolumny to "Nazwa", a kolumna ma wartość taką jak "Robin Shankar", spust zamieni spacje na "-", a także doda identyfikator automatycznej inkrementacji do końca ślimaka, stąd tworzenie unikalnego ślimaka.

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) i tak dalej nie działają jeśli usuniesz ostatnie zapisy –

Powiązane problemy