77 votes

MySQL CURRENT_TIMESTAMP sur créer et mettre à jour

Je veux définir une table qui aura 2 champs TIMESTAMP, comme ceci:

 CREATE TABLE `msgs` (
    `id` INT PRIMARY KEY AUTO_INCREMENT,
    `msg` VARCHAR(256),
    `ts_create` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `ts_update` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
 

Comment faire cela en évitant les erreurs:

 ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
 

Le point essentiel est de conserver le comportement souhaité de ts_create et ts_update dans le schéma de table.

56voto

Clement P Points 1941

C'est une limitation de MySQL. Vous ne pouvez pas avoir deux colonnes TIMESTAMP avec des valeurs par défaut qui font référence à CURRENT_TIMESTAMP. La seule façon de le faire serait d'utiliser un type DATETIME pour ts_create qui, malheureusement, ne peut pas avoir une valeur par défaut de NOW (). Vous pouvez lancer votre propre déclencheur pour y arriver cependant.

1voto

Klem Quiñones Points 1

Vous ne pouvez pas avoir deux colonnes TIMESTAMP avec la même valeur par défaut de CURRENT_TIMESTAMP sur votre table. Veuillez vous référer à ce lien: http://www.mysqltutorial.org/mysql-timestamp.aspx

0voto

Nanne Points 35880

Je dirais que vous n'avez pas besoin d'avoir le nom DEFAULT CURRENT_TIMESTAMP sur votre ts_update: s'il est vide, il n'est pas mis à jour, votre "dernière mise à jour" est donc le ts_create.

0voto

Brian Points 4716

Je pense que vous voulez peut-être ts_create comme date / heure (donc renommer -> dt_create) et uniquement ts_update comme horodatage? Cela garantira qu'il ne changera pas une fois défini.

D'après ce que j'ai compris, datetime correspond à des valeurs contrôlées manuellement, et l'horodatage est un peu "spécial" en ce sens que MySQL le conservera pour vous. Dans ce cas, datetime est donc un bon choix pour ts_create.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X