Для меня триггерный подход сработал лучше всего, но я обнаружил загвоздку с этим подходом. Рассмотрим основной триггер для установки поля даты на текущее время при вставке:
CREATE TRIGGER myTable_OnInsert BEFORE INSERT ON `tblMyTable`
FOR EACH ROW SET NEW.dateAdded = NOW();
Обычно это замечательно, но, скажем, вы хотите установить поле вручную с помощью оператора INSERT, например:
INSERT INTO tblMyTable(name, dateAdded) VALUES('Alice', '2010-01-03 04:30:43');
Что происходит, так это то, что триггер немедленно перезаписывает предоставленное вами значение для поля, и поэтому единственный способ установить не текущее время - это последующий оператор UPDATE - хм! Чтобы переопределить это поведение при предоставлении значения, попробуйте этот слегка измененный триггер с оператором IFNULL:
CREATE TRIGGER myTable_OnInsert BEFORE INSERT ON `tblMyTable`
FOR EACH ROW SET NEW.dateAdded = IFNULL(NEW.dateAdded, NOW());
Это дает лучшее из обоих миров: вы можете указать значение для вашего столбца даты, и оно примет, а в противном случае по умолчанию будет установлено текущее время. Это все еще гетто относительно чего-то чистого, например, DEFAULT GETDATE () в определении таблицы, но мы приближаемся!