Combinaison de différentes réponses:
Dans MySQL 5.5, DEFAULT CURRENT_TIMESTAMP
et ON UPDATE CURRENT_TIMESTAMP
ne peut pas être ajouté DATETIME
mais uniquement surTIMESTAMP
.
Règles:
1) au plus une TIMESTAMP
colonne 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 TIMESTAMP
peut avoir CURRENT_TIMESTAMP
dans DEFAULT
ouON UPDATE
clause
2) La première NOT NULL
TIMESTAMP
colonne sans DEFAULT
valeur explicite comme created_date timestamp default '0000-00-00 00:00:00'
sera implicitement donnée a DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
et donc les TIMESTAMP
colonnes suivantes ne peuvent pas être données CURRENT_TIMESTAMP
sur la clause DEFAULT
orON 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_date
est 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_TIMESTAMP
inDEFAULT
ouON UPDATE
une fois qu'il y a une colonne avecTIMESTAMP
un type de données, peu importe si elle a une clause supplémentaire!