2010-02-15 41 views
5

Tôi sử dụng trình kích hoạt để chèn hàng và muốn sử dụng id được tạo cuối cùng để sử dụng trong truy vấn tiếp theo.Lấy id được chèn mới nhất trong trình kích hoạt?

Tôi làm cách nào để thực hiện việc này?

Mã này trông giống như:

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 

Trả lời

7

Bạn đã nhìn LAST_INSERT_ID()? Nhưng lưu ý:

Nếu bạn chèn nhiều hàng sử dụng một tuyên bố INSERT duy nhất, LAST_INSERT_ID() trả về giá trị tạo cho hàng chèn đầu tiên chỉ.

+0

Khi tôi sử dụng này trong một after_trigger, nó sẽ trả về ID chèn trước đó vì một lý do ... ví dụ 'NEW.id' có thể được sử dụng mặc dù. Và ví dụ: 'OLD.id' có thể được sử dụng để xóa hoặc cập nhật (ít nhất đây là những gì được viết trong tài liệu.). [docs.] (https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html) – ravo10

1

Tôi muốn sử dụng một tên viết tắt của công ty như "AAA" và thêm ID chèn vào nó và sử dụng nó như một ID nội bộ công ty và đây là cách tôi nhặt cuối cùng ID chèn hiện tại

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

Cảm ơn bạn rất nhiều ... – 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

Trình kích hoạt sau sẽ nhận giá trị tăng dần tự động cuối cùng từ Lược đồ thông tin. Tôi đã viết trình kích hoạt này để tạo ra một con sên. Đối với các trường hợp, nếu tên cột là "Tên" và cột có giá trị như "Robin Shankar", trình kích hoạt sẽ thay thế dấu cách bằng dấu "-" và cũng gắn thêm Id tăng trưởng tự động vào cuối sên, do đó tạo ra một con sên độc đáo.

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) và vân vân không hoạt động nếu bạn xóa một bản ghi cuối cùng –

Các vấn đề liên quan