Mysql create/update timestamp, čas vložení a čas poslední úpravy položky

Jak řešíte čas vzniku a čas poslední úpravy řádku v tabulce? Řešení s jedním triggerem.


Ukázky k nahlédnutí createdUpdatedTime.txt.

K popsanému příkladu si můžete prohlédnout i test ke stažení.

Takhle to řeším já.

  1. DROP TABLE IF EXISTS test;
  2. CREATE TABLE IF NOT EXISTS `test` (
  3. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  4. `name` varchar(100) COLLATE utf8_czech_ci NOT NULL,
  5. `ditime` timestamp NULL DEFAULT NULL,
  6. `dutime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
  9. DROP TRIGGER IF EXISTS test_insert;
  10. DELIMITER //
  11. CREATE TRIGGER test_insert BEFORE INSERT ON test
  12. FOR EACH ROW BEGIN
  13. IF NEW.ditime IS NULL THEN
  14. SET NEW.ditime = NOW();
  15. END IF;
  16. END//
  17. DELIMITER ;

Problém je v tom, že chcete, aby časy se správně ukládali za těchto podmínek:

  1. update s definovaným date insert nebo date update, nebo obojí,
  2. insert s definovaným date insert nebo date update, nebo obojí,
  3. i v případě vynechání date insert nebo date update v sql dotazu.