2017-02-22 57 views
-1

Я пытаюсь написать триггер, который будет вызываться всякий раз, когда строка создается в определенной таблице, Предположим, что есть таблица «A», и есть другая таблица «B», что я хочу сделать, так это я хочу вставить запись в таблице «B» всякий раз, когда запись вставлена ​​в таблицу «A», но с первичным ключом записи, которая была вставлена ​​в таблицу «A».Как узнать, какая строка вызвала триггер?

Какое решение я натолкнулся на то, что я могу взять первичный ключ последней вставленной записи таблицы «А», но это может создать проблему, если более двух пользователей пытаются вставить одновременно.

ответ

1

Вы можете получить значение вашего авто приращение первичного ключа в пределах ПОСЛЕ INSERT TRIGGER с помощью NEW:

CREATE 
TRIGGER `insert_on_table_a` 
AFTER INSERT ON `table_A` 
FOR EACH ROW 
    BEGIN 
    INSERT INTO table_b (table_a_ID) VALUES (NEW.ID); 
    END IF; 
END; 

В этом примере, ваш автоматическое приращение столбец TABLE_A является ID, и вы получите это значение, используя NEW.ID

+0

Так что NEW.ID даст мне последний идентификатор, который был создан при вставке в таблицу A? Что делать, если какая-либо другая строка также создается в таблице A за это время? –

+0

mysql, как и многие RDBMS, обрабатывает это для вас, используя систему блокировки, которая предотвратит любую вставку, в то время как другая (и ее триггеры) не будет завершена. Это занимает миллисекунды и прозрачно для пользователя –