Đây là cách bạn có thể có các trường createdDate / lastModified tự động & linh hoạt bằng cách sử dụng kích hoạt:
Đầu tiên xác định chúng như thế này:
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`),
)
Sau đó thêm các kích hoạt này:
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);
- Nếu bạn chèn mà không chỉ định createDate hoặc lastModified, chúng sẽ bằng nhau và được đặt thành dấu thời gian hiện tại.
- Nếu bạn cập nhật chúng mà không chỉ định createdDate hoặc lastModified, lastModified sẽ được đặt thành dấu thời gian hiện tại.
Nhưng đây là phần hay:
- Nếu bạn chèn , bạn có thể chỉ định một createdDate cũ hơn dấu thời gian hiện tại , cho phép nhập từ thời gian cũ hoạt động tốt (lastModified sẽ bằng với createdDate).
- Nếu bạn cập nhật , bạn có thể chỉ định một LastModified cũ hơn giá trị trước đó ('0000-00-00 00:00:00' hoạt động tốt), cho phép cập nhật một mục nếu bạn đang thay đổi mỹ phẩm (sửa lỗi chính tả trong một nhận xét ) và bạn muốn giữ ngày cũ cuối cùng . Điều này sẽ không sửa đổi ngày cuối cùng.