Я склонен использовать вариант того, что мю слишком коротко опубликовано:
INSERT INTO something_log
SELECT NULL, s.*
FROM something AS s
WHERE s.id = 1;
Пока таблицы имеют одинаковые поля (за исключением автоматического приращения в таблице журнала), тогда это работает хорошо.
Поскольку я использую хранимые процедуры, когда это возможно (чтобы облегчить жизнь другим программистам, которые не слишком знакомы с базами данных), это решает проблему необходимости возвращаться и обновлять процедуры каждый раз, когда вы добавляете новое полек таблице.
Это также гарантирует, что если вы добавите новые поля в таблицу, они начнут появляться в таблице журнала немедленно, без необходимости обновлять запросы к вашей базе данных (если, конечно, у вас есть некоторые, которые устанавливают поле явно)
Предупреждение: Вам нужно будет обязательно добавлять любые новые поля в обе таблицы одновременно, чтобы порядок полей оставался прежним ... в противном случае вы начнете становиться страннымошибок.Если вы единственный, кто пишет интерфейсы базы данных, и вы очень осторожны, то это работает хорошо.В противном случае, придерживайтесь названия всех ваших полей.
Примечание: Если подумать, если вы не работаете над сольным проектом, вы уверены, что другие не будут работать над ним.перечислять все имена полей в явном виде и обновлять операторы журнала при изменении схемы.Этот ярлык, вероятно, не стоит долговременной головной боли, которую он может вызвать ... особенно в производственной системе.