У меня есть таблица, которая содержит записи инвентаризации и содержит 22 столбца, из которых последние два являются столбцами отметки времени:
Column Name NULL? Default Value
last_updated_on No-Null 0000-00-00 00:00:00
added_on No-Null CURRENT_TIMESTAMP
Мои цели -
Когда запись впервые вставляется вя хочу, чтобы одно и то же значение CURRENT_TIME было помещено в оба этих столбца, не указав эти столбцы в моем операторе вставки.
Когда обновляется существующая запись, я хочу поместить значение CURRENT_TIME в столбец last_update_on, но оставьте столбец add_on без изменений, опять же, не указав эти столбцы в моем операторе обновления.
В используемой версии mySQL у меня не может быть двух столбцов с метками времени по умолчанию CURRENT_TIMESTAMP, но я долженбыть в состоянии создать триггер при вставке и триггер при обновлении, чтобы установить эти столбцы, как я описал. К сожалению, я не до конца понимаю документацию по созданию триггеров и тел триггеров, поэтому, пожалуйста, посмотрите на мои утверждения / вопросы и исправьте их, если они ошибочны:
1) Для триггеров вставки - старый.field значение столбца по умолчанию для столбца, если он есть?
Столбцы, которые не имеют значения по умолчанию и не указаны в операторе вставки, вызывают ошибку.
2) Для триггеров обновления, является ли old.field значением столбца из таблицы до того, как триггер начнет выполняться?
3) Первоначально для new.field задано значение столбца в операторе вставки / обновления, который вызвалтриггер для выполнения, если он указан, или значение по умолчанию для столбца, если оператор вставки не указывает столбец и столбец имеет значение по умолчанию, или значение столбца таблицы для операторов обновления.
new.fieldможет быть изменено при присвоении значения в триггере.
4) Является новым. Поле значения столбца автоматически сохраняется в базе данных приrigger заканчивает выполнение или мне нужно явно выполнить оператор вставки / обновления, определяющий все новые столбцы внутри триггера?
4a) Если операторы вставки / обновления должны быть явно выполнены в триггере, тогда янужно указать все new.fields?
Если все мои вопросы верны, то ...
Для моего триггера вставки, так как я хочу сохранить значение current_timestamp в обоихиз столбцов тайм-спама мне нужно проверить, что фактическое значение по умолчанию ('0000-00-00 00:00:00') находится в new.last_updated_on и, если это так, назначить NOW для new.last_updated_on. Ничего не нужно делать с new.added_on, потому что он уже имеет значение current_timestamp.
Для моего триггера обновления таблицы помещаются в old.last_updated_on и new.last_updated_on, когда столбец не указан в обновленииоператор, поэтому, если два поля одинаковы, то я хочу присвоить NOW для new.last_updated_on, чтобы захватить дату / время транзакции. Если оператор обновления действительно указывает столбец last_updated_on, то это значение помещается в new.last_updated_on, поэтому мне не нужно ничего делать.
Для обоих триггеров мне нужно явно указать new.fields для всехстолбцы, если требуется явная вставка / обновление, в противном случае все, что находится в new.fields, будет записано в таблицу.