2015-11-15 5 views
0

Возможно ли инициировать вставку всех столбцов для новой строки? В принципе, я хочу сделать копию новой записи в другой таблице, но нужно указать все столбцы.MySQL триггер INSERT все новые столбцы

Что-то вроде

DELIMITER $$ 

CREATE TRIGGER TestTrigger 
AFTER INSERT 
    ON Table1 FOR EACH ROW 

BEGIN 
    INSERT INTO `Table2` SELECT * FROM NEW; 
END$$ 
DELIMITER ; 

Однако это возвращает Table 'Database.NEW' doesn't exist всякий раз, когда я пытаюсь вставить новую строку в Table1.

From MySQL documentation:

В теле триггера, вы можете ссылаться на столбцы в теме таблицы (таблицы, связанной с триггером), используя псевдонимы старого и нового. OLD.col_name ссылается на столбец существующей строки перед ее обновлением или удалением. Имя NEW.col_ ссылается на столбец новой строки, которую нужно вставить, или на существующую строку после ее обновления.

+0

@ lad2025 Это не работает MySQL возвращает «Не удается найти таблицу DatabaseName.NEW» – Wistar

+1

В любом случае укажите все имена столбцов вручную, потому что 'SELECT *' - это плохая практика 9/10 случаев – lad2025

+1

Я действительно не согласен. Я постоянно вижу, что люди говорят, что x - это плохая практика, но x существует для использования, и только потому, что некоторые люди злоупотребляют не означает, что это плохая практика. 'SELECT *' именно то, что вы должны использовать, если хотите ** ВСЕ ** столбцы – Arijoon

ответ

0

Несмотря на то, что этот вопрос не ответил, вы можете SELECT все поля, используя первичный ключ в исходной таблице, если он у вас есть.

CREATE TRIGGER replicated_table AFTER INSERT ON source_table FOR EACH ROW 
BEGIN 
    INSERT INTO replicated_table SELECT * FROM source_table WHERE id=NEW.id; 
END 

Кроме того, может быть, вы можете предпочесть использовать REPLACE вместо INSERT, чтобы обеспечить таблица не будет оставаться в стороне от sincronization.

+0

Здесь почти такая же проблема: https: // stackoverflow .com/questions/15419227/mysql-trigger-to-copy-all-field-values-to-another-table-how и такое же решение можно применить –

Смежные вопросы