Как установить второй столбец отметки времени в mySQL v5.5.52 с помощью триггера при вставке? - PullRequest
0 голосов
/ 02 октября 2019

У меня есть таблица, которая содержит записи инвентаризации и содержит 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, будет записано в таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...