J'ai vu beaucoup de questions connexes, mais je ne peux pas mettre le doigt sur cette question spécifique:
J'ai une table MySQL avec un TIMESTAMP (pour quand le champ a été créé) et un DATETIME (pour chaque fois que le champ est mis à jour). Cela ressemble à ceci:
CREATE TABLE 'vis' (
ID BIGINT PRIMARY KEY AUTO_INCREMENT NOT NULL,
ENTRY VARCHAR(255),
AUTHOR VARCHAR(255),
CREATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UPDATED_AT DATETIME ON UPDATE CURRENT_TIMESTAMP,
UPDATED_BY VARCHAR(255)
)
Quand j'essaye ceci cependant, l'erreur que je reçois est: (SQL Error: 1294 SQL State: HY000) - Invalid ON UPDATE clause for 'updated_at' field
Partout où j'ai lu (même sur Stack Overflow) suggère que je devrais être capable de faire cela, pourtant j'obtiens cette erreur. Peut-être existe-t-il un autre moyen d'avoir un champ qui met automatiquement à jour l'heure chaque fois que je le mets à jour?
J'utilise MySQL Server 5.5.
DATETIME
ne peut pas utiliser CURRENT_TIMESTAMP
lors de la mise à jour. Au lieu de cela, changez-le en TIMESTAMP
.
Ou envisagez d'utiliser un déclencheur pour cette situation: http://dev.mysql.com/doc/refman/5.0/fr/trigger-syntax.html
EDIT: Comme dans les commentaires (merci @ АлександрФишер!), Ce n’est plus le cas depuis MySQL 5.6.5, aussi une autre solution consiste à mettre à jour votre serveur si possible.
Cette fonctionnalité semble avoir été introduite dans 5.6. Fonctionne comme prévu sur mon installation OS X par défaut.
Référence: Propriétés de l'horodatage automatique avant MySQL 5.6.5
MySQL pas autorise l'utilisation de fonctions pour les valeurs DateTime
par défaut. (Voir Type de données MySQL Valeurs par défaut .)
Les types de données TIMESTAMP et (à partir de MySQL 5.6.5) DATETIME offrent une initialisation et une mise à jour automatiques à la date et à l'heure actuelles. Pour plus d'informations, voir Section 11.3.5, «Initialisation et mise à jour automatiques pour TIMESTAMP et DATETIME» .
Oui, et si vous le changez en horodatage, sans DEFAULT CURRENT_TIMESTAMP
ni ON UPDATE CURRENT_TIMESTAMP
, cela revient à spécifier DEFAULT CURRENT_TIMESTAMP
et ON UPDATE CURRENT_TIMESTAMP
.
Insérer et mettre à jour la date/heure automatiquement
Fonctionne avec le type de données: DATETIME ou TIMESTAMP
Testé sur: MySQL 5.6.27-2 et MariaDB 10.1.10
Stocke la date et l'heure actuelles dans INSERT
CREATE TABLE table_demo (
...
`CreatedAt` datetime DEFAULT CURRENT_TIMESTAMP
...
);
Stocke la date et l'heure actuelles dans les commandes INSERT et UPDATE
CREATE TABLE table_demo (
...
`UpdatedAt` datetime EFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
...
);
Stocke la date et l'heure actuelles uniquement dans UPDATE
REMARQUE: à quel moment la valeur par défaut INSERT est-elle «0000-00-00 00:00:00»
CREATE TABLE table_demo (
...
`UpdatedAt` datetime DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP
...
);