Combinaison de différentes réponses:
Dans MySQL 5.5, DEFAULT CURRENT_TIMESTAMPet ON UPDATE CURRENT_TIMESTAMPne peut pas être ajouté DATETIMEmais uniquement surTIMESTAMP .
Règles:
1) au plus une TIMESTAMPcolonne par table pourrait être automatiquement (ou manuellement [ Mon ajout ]) initialisée ou mise à jour à la date et à l'heure actuelles. (Documents MySQL).
Donc, un seul TIMESTAMPpeut avoir CURRENT_TIMESTAMPdans DEFAULTouON UPDATE clause
2) La première NOT NULL TIMESTAMPcolonne sans DEFAULTvaleur explicite comme created_date timestamp default '0000-00-00 00:00:00'sera implicitement donnée a DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPet donc les TIMESTAMPcolonnes suivantes ne peuvent pas être données CURRENT_TIMESTAMPsur la clause DEFAULTorON UPDATE
CREATE TABLE `address` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`village` int(11) DEFAULT NULL,
`created_date` timestamp default '0000-00-00 00:00:00',
`updated_date` timestamp null on update current_timestamp,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=132 DEFAULT CHARSET=utf8;
INSERT INTO address (village,created_date) VALUES (100,null);
mysql> select * from address;
+
| id | village | created_date | updated_date |
+
| 132 | 100 | 2017-02-18 04:04:00 | NULL |
+
1 row in set (0.00 sec)
UPDATE address SET village=101 WHERE village=100;
mysql> select * from address;
+
| id | village | created_date | updated_date |
+
| 132 | 101 | 2017-02-18 04:04:00 | 2017-02-18 04:06:14 |
+
1 row in set (0.00 sec)
Autre option (mais updated_dateest la première colonne):
CREATE TABLE `address` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`village` int(11) DEFAULT NULL,
`updated_date` timestamp null on update current_timestamp,
`created_date` timestamp not null ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=132 DEFAULT CHARSET=utf8;
CURRENT_TIMESTAMPinDEFAULTouON UPDATEune fois qu'il y a une colonne avecTIMESTAMPun type de données, peu importe si elle a une clause supplémentaire!