从触发器读取和写入自动增量值

时间:2012-01-05 08:37:41

标签: mysql database triggers

我在使用mysql触发器分配主键值时遇到问题。考虑一下我的表:

v_object :v_object_id,create_date,..一些通用属性
 用户:用户的user_id,name,..属性

我在users表上有一个触发器,如下所示:

create trigger new_vobject_for_user before insert on users
for each row begin
    insert into v_object(v_type,...) values(...);
    set NEW.id = // How do i get the new v_object's id here?
end;

当我插入用户时,我需要创建vobject并为user_id使用其新的自动递增值。

我还想知道是否有一种方法可以在不指定id的情况下插入用户。例如:

insert into users(n1,n2,n3,...) values(m1,m2,m3,...);

它给出了一个错误,指出未指定user_id。这是真的..我想要做的是创建vobject&在触发器中生成id。

2 个答案:

答案 0 :(得分:1)

使用LAST_INSERT_ID()

create trigger new_vobject_for_user before insert on users
for each row begin
    insert into v_object(v_type,...) values(...);
    set NEW.id = LAST_INSERT_ID();
end;

或者查看INFORMATION_SCHEMA表并获取表v_object的最后一次自动增量

create trigger new_vobject_for_user before insert on users
for each row begin
    insert into v_object(v_type,...) values(...);
    set NEW.id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES
        WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'v_object')
end;

答案 1 :(得分:1)

SELECT @Result:=LAST_INSERT_ID();获取最后一个插入ID。

SET Result=LAST_INSERT_ID();
SELECT Result;