Ini adalah bagaimana Anda dapat memiliki bidang createDate / lastModified otomatis & fleksibel menggunakan pemicu:
Pertama mendefinisikannya seperti ini:
CREATE TABLE `entity` (
`entityid` int(11) NOT NULL AUTO_INCREMENT,
`createDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`lastModified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`name` varchar(255) DEFAULT NULL,
`comment` text,
PRIMARY KEY (`entityid`),
)
Kemudian tambahkan pemicu ini:
DELIMITER ;;
CREATE trigger entityinsert BEFORE INSERT ON entity FOR EACH ROW BEGIN SET NEW.createDate=IF(ISNULL(NEW.createDate) OR NEW.createDate='0000-00-00 00:00:00', CURRENT_TIMESTAMP, IF(NEW.createDate<CURRENT_TIMESTAMP, NEW.createDate, CURRENT_TIMESTAMP));SET NEW.lastModified=NEW.createDate; END;;
DELIMITER ;
CREATE trigger entityupdate BEFORE UPDATE ON entity FOR EACH ROW SET NEW.lastModified=IF(NEW.lastModified<OLD.lastModified, OLD.lastModified, CURRENT_TIMESTAMP);
- Jika Anda menyisipkan tanpa menentukan createDate atau LastModified, mereka akan sama dan diatur ke stempel waktu saat ini.
- Jika Anda memutakhirkannya tanpa menentukan createDate atau lastModified, lastModified akan disetel ke stempel waktu saat ini.
Tapi inilah bagian yang bagus:
- Jika Anda menyisipkan , Anda dapat menentukan tanggal membuat lebih lama dari cap waktu saat ini , memungkinkan impor dari waktu yang lebih lama untuk bekerja dengan baik (lastModified akan sama dengan createDate).
- Jika Anda memperbarui , Anda dapat menentukan yang terakhir dimodifikasi lebih lama dari nilai sebelumnya ('0000-00-00 00:00:00' berfungsi dengan baik), memungkinkan untuk memperbarui entri jika Anda melakukan perubahan kosmetik (memperbaiki kesalahan ketik dalam komentar ) dan Anda ingin menyimpan tanggal Modifikasi terakhir yang lama . Ini tidak akan mengubah tanggal modifikasi terakhir.