web-dev-qa-db-fra.com

MySQL n'autorise pas ON UPDATE CURRENT_TIMESTAMP pour un champ DATETIME.

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.

12
Michael Plautz

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.

24
slugonamission

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

5
rich remer

MySQL pas autorise l'utilisation de fonctions pour les valeurs DateTime par défaut. (Voir Type de données MySQL Valeurs par défaut .)

2
Anshu

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» .

0
原习斌

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.

0
FSP

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
    ...
);
0
SandroMarques

Regarde ma photo. 

Définissez la colonne Filed Type timestamp, Attributes on Mettez également à jour CURRENT_TIMESTAMP & Extra. Aucun problème après avoir changé le type de fichier dans la base de données, dans mon cas. Mais pas sûr pour tous les cas.  enter image description here

0
Shihab Uddin