Чтение и запись значений автоинкремента из триггера - PullRequest
1 голос
/ 05 января 2012

У меня проблемы с триггерами mysql, назначающими значения первичного ключа.Рассмотрим мои таблицы:

v_object : v_object_id, create_date, .. некоторые общие атрибуты users : user_id, name, .. атрибуты пользователя

У меня есть триггер для таблицы пользователей следующим образом:

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.

Я также хотел бы знать, есть ли способ вставить пользователей без указания идентификатора.Например:

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

Это дает мне ошибку, говоря, что user_id не указан.И это правда ... я пытаюсь создать vobject и сгенерировать id в триггере.

Ответы [ 2 ]

1 голос
/ 05 января 2012

SELECT @Result:=LAST_INSERT_ID(); для получения последнего идентификатора вставки.

или

SET Result=LAST_INSERT_ID();
SELECT Result;
1 голос
/ 05 января 2012

используйте 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...