J’ai le schéma de la table suivante ;
Il échoue avec l’erreur suivante :
Ma question est, puis-je avoir les deux de ces champs ? ou ce que je dois régler manuellement un champ LastUpdated lors de chaque transaction ?
J’ai le schéma de la table suivante ;
Il échoue avec l’erreur suivante :
Ma question est, puis-je avoir les deux de ces champs ? ou ce que je dois régler manuellement un champ LastUpdated lors de chaque transaction ?
À partir de l' MySQL 5.5 documentation:
Une colonne de type TIMESTAMP dans une table peut avoir le timestamp actuel comme valeur par défaut pour l'initialisation de la colonne, comme la mise à jour automatique de la valeur, ou les deux. Il n'est pas possible d'avoir le timestamp actuel être la valeur par défaut pour une colonne et de la mise à jour automatique de la valeur pour une autre colonne.
Les changements dans MySQL 5.6.5:
Auparavant, au plus une colonne de type TIMESTAMP par le tableau pourrait être initialisée automatiquement ou mis à jour à la date et l'heure actuelles. Cette restriction a été levée. Un TIMESTAMP définition de la colonne peut avoir n'importe quelle combinaison de DÉFAUT CURRENT_TIMESTAMP et SUR la mise à JOUR CURRENT_TIMESTAMP clauses. En outre, ces clauses ne peuvent plus être utilisés avec DATETIME définitions de colonne. Pour plus d'informations, voir d'Initialisation Automatique et la mise à Jour de cachet de date et DATETIME.
Il y a une astuce pour avoir les deux horodateurs, mais avec une petite limitation.
Vous pouvez utiliser uniquement une des définitions dans une seule table. Créer deux colonnes timestamp comme suit :
Notez qu’il est nécessaire d’entrer dans les deux colonnes au cours de
:
Vous pouvez avoir les deux, juste enlever le drapeau « CURRENT_TIMESTAMP » sur le champ créé. Chaque fois que vous créez un nouvel enregistrement dans la table, il suffit d’utiliser « NOW() » d’une valeur.
Ou.
Au contraire, supprimez l’indicateur « ON UPDATE CURRENT_TIMESTAMP » et envoyer le NOW() pour ce champ. Ça fait plus de sens.
Si vous décidez d’avoir MySQL de gérer la mise à jour des estampilles, vous pouvez configurer un déclencheur de mise à jour le champ à insérer.
MySQL Reference : http://dev.mysql.com/doc/refman/5.0/en/triggers.html
C'est de cette façon que vous pouvez avoir automatique et flexible createDate/lastModified champs à l'aide de déclencheurs:
D'abord les définir comme ceci:
CREATE TABLE `entity` (
`entityid` int(11) NOT NULL AUTO_INCREMENT,
`createDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`lastModified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`name` varchar(255) DEFAULT NULL,
`comment` text,
PRIMARY KEY (`entityid`),
)
Puis ajouter ces déclencheurs:
DELIMITER ;;
CREATE trigger entityinsert BEFORE INSERT ON entity FOR EACH ROW BEGIN SET NEW.createDate=IF(ISNULL(NEW.createDate) OR NEW.createDate='0000-00-00 00:00:00', CURRENT_TIMESTAMP, IF(NEW.createDate<CURRENT_TIMESTAMP, NEW.createDate, CURRENT_TIMESTAMP));SET NEW.lastModified=NEW.createDate; END;;
DELIMITER ;
CREATE trigger entityupdate BEFORE UPDATE ON entity FOR EACH ROW SET NEW.lastModified=IF(NEW.lastModified<OLD.lastModified, OLD.lastModified, CURRENT_TIMESTAMP);
Mais ici, c'est la partie agréable:
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.