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