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.
K popsanému příkladu si můžete prohlédnout i test ke stažení.
Takhle to řeším já.
- DROP TABLE IF EXISTS test;
- CREATE TABLE IF NOT EXISTS `test` (
- `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
- `name` varchar(100) COLLATE utf8_czech_ci NOT NULL,
- `ditime` timestamp NULL DEFAULT NULL,
- `dutime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
- DROP TRIGGER IF EXISTS test_insert;
- DELIMITER //
- CREATE TRIGGER test_insert BEFORE INSERT ON test
- FOR EACH ROW BEGIN
- IF NEW.ditime IS NULL THEN
- SET NEW.ditime = NOW();
- END IF;
- END//
- DELIMITER ;
Problém je v tom, že chcete, aby časy se správně ukládali za těchto podmínek:
- update s definovaným date insert nebo date update, nebo obojí,
- insert s definovaným date insert nebo date update, nebo obojí,
- i v případě vynechání date insert nebo date update v sql dotazu.
komentáře
RSS Komentáře
seš si jistý tím že datum se přepíše? zkoušel si? nevím jestli verze mysql se chovají jinak, ale mám za to že se mi nezmění v případě že se nezmění data
jinak s triggerem mám právě ten problém co povídáš, představ si že děláš dump, měníš název databáze nebo něco podobného, replikuješ data atd. tak právě potřebuješ tomu sloupečku vnutit ten čas, chci zachovat původní čas ne všude aktuální



s
timestamp on update current_timestampje ten problém, že ho lze obejít implicitním vložením údaje, který automaticky generovaný čas přebije. trigger obejít nejde. u tvého řešení je zase ten problém, že se čas updatu zapíše i když nedošlo při zápisu k modifikaci dat (když vložím stejná data jaká už v řádku jsou, trigger se i přesto provede).já detekuji, jestli skutečně došlo ke změně dat v řádku a až poté zapisuji info o změně. to je ale dost složité na ruční psaní triggerů a tak jsem si na to napsal automat, který mi hotový trigger vygeneruje: http://gist.github.com/477277