Je kunt er maar één hebben tijdstempelkolom die standaard is ingesteld op CURRENT_TIMESTAMP
of NOW()
per tafel. Dit is een bekende bug in MySQL.
Om dit te verhelpen, maakt u uw standaardwaarde voor de gemaakte kolom een geldige tijdstempelwaarde en voegt u vervolgens de tijdstempel in uw CRUD-toepassingscode in. Gebruik NOW()
of CURRENT_TIMESTAMP
voor uw bijgewerkte kolomstandaard.
Referentiemateriaal:http://dev.mysql.com/doc/ refman/5.1/nl/timestamp.html
Overweeg de volgende code om de tekortkoming van MySQL op dit gebied verder te illustreren:
CREATE TABLE testing_timestamps (
id INT NOT NULL AUTO_INCREMENT,
pk_id INT NOT NULL,
col1 TIMESTAMP DEFAULT 0,
col2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(id)
);
delimiter $$
CREATE TRIGGER testing_timestamps_trigger
AFTER INSERT ON testing_timestamps
FOR EACH ROW
BEGIN
UPDATE testing_timestamps SET col1 = NOW() WHERE id = MAX(id);
END;
$$
delimiter ;
INSERT INTO testing_timestamps (id) VALUES (0);
De uitvoer hiervan wordt weergegeven:
mysql> INSERT INTO testing_timestamps (id) VALUES (0);
ERROR 1442 (HY000): Can't update table 'testing_timestamps' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Dit is jammer, omdat het in dit geval een goede oplossing zou zijn om een trigger te gebruiken.