J'ai une table comme indiqué ci-dessous. Afin de travailler par défaut maintenant em> la restriction de colonne de MySQL, j'ai utilisé la pointe comme indiqué sur ici My SQL_Mode n'inclut pas no_zero_date code> comme indiqué sur ICI My Sortie: P>
ERROR 1067 (42000) at line xx in file: '/myschema.sql': Invalid default value for 'create_date'
4 Réponses :
Vous ne pouvez avoir que one em> colonne d'horodatage par défaut sur Pour surmonter ceci, faites votre valeur par défaut pour la colonne créée une valeur horodatale valide, puis insérez l'horodatage dans votre code d'application CRUD.
Utilisez Matériau de référence:
http://dev.mysql.com/doc/refman/5.1/fr /timestamp.html p> Pour illustrer davantage la lacune de MySQL dans cette zone, considérez le code suivant: p> la sortie de ceci affichera : p> Ceci est une bummer car l'utilisation d'une gâchette dans ce cas serait un bon travail autour. P> P> actuel_timettamp code> ou
maintenant () code> par table. Ceci est un bug bien connu dans MySQL.
NOW () CODE> ou
CURCENT_TIMESTAMP CODE> pour votre colonne mise à jour Par défaut de la colonne. P>
Ce n'est pas un bogue, il s'agit d'une fonctionnalité: "Pour une colonne d'horodatage dans une table, vous pouvez affecter l'horodatage actuel en tant que valeur par défaut et la valeur automatique de mise à jour. Il est possible d'avoir l'horodatage actuel la valeur par défaut pour Initialisation de la colonne, pour la valeur de mise à jour automatique, ou les deux. Il n'est pas possible d'avoir l'horodatage actuel la valeur par défaut pour une colonne et la valeur de mise à jour automatique d'une autre colonne. "
Le débat sur la question de savoir si c'est un «bogue» ou non, car cela est sérieusement ennuyeux. Pourquoi puis-je ne pas avoir deux colonnes horodatées avec une valeur par défaut de maintenant () avec la deuxième fois la mise à jour automatique de la colonne? La réponse est que MySQL ne le fait pas. Je n'appelle pas vraiment qu'une fonctionnalité.
Randy merci pour votre réponse. Je suis au courant du lien que vous avez fourni. Je cherche juste une solution de contournement. Cependant, il semble que toutes les astuces montrées sur Internet ne fonctionnent tout simplement pas.
Ce n'est pas une fonctionnalité qu'il est plutôt idiote. Il est tout à fait raisonnable d'avoir une colonne créée et une colonne mise à jour avec l'ancien étant fait défaut de la date d'insertion et de ce dernier étant mis à jour sur insertion ainsi que sur les mises à jour.
Cette restriction a été levé comme de mysql 5.6.5.
Merci pour la mise à jour, @david. Cela va être une fonctionnalité de GA très bienvenue!
En fait, le code de Randy est cassé. Cela ne fonctionnera pas car c'est une gâchette mutation. Vous ne pouvez pas mettre à jour la table qui a initié la mise à jour. Par exemple, si vous mettez à jour les sessions de la table, vous ne pouvez pas utiliser la modification de la table dans votre déclencheur à l'aide d'une instruction UPDATE, INSERT ou DELETE. La seule façon dont vous êtes autorisé à modifier la table à laquelle le déclencheur est joint est d'utiliser les préfixes "nouveaux" ou "anciens" comme illustré ci-dessous. (Bien sûr, vous êtes autorisé à mettre à jour d'autres tables à volonté.) Voici un exemple de la façon de surmonter le problème décrit par l'OP.
create table sessions ( id integer not null, created timestamp not null default 0, updated timestamp not null default 0 ); delimiter // create trigger bifer_sessions_ts before insert on sessions for each row begin set new.created = now(); set new.updated = now(); end; // create trigger bufer_sessions_ts before update on sessions for each row begin set new.updated = now(); end; // delimiter ;
Pour ce faire et le faire fonctionner:
col1 TIMESTAMP DEFAULT 0, col2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
L'horodatage par défaut n'est pas pris en charge dans MySQL avant les versions 5.6.1 dans la même table.
Après la version MySQL 5.6. + Il permet deux colonnes horodatées ou plus dans la même table.
Vous pouvez essayer de mettre à jour votre version MySQL P>