IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

CREATE TABLE avec 2 champs TIMESTAMP définit par defaut avec une clause ON UPDATE


Sujet :

MySQL

  1. #1
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut CREATE TABLE avec 2 champs TIMESTAMP définit par defaut avec une clause ON UPDATE
    Bonjour,
    Je souhaiterait créer une table avec la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DROP TABLE IF EXISTS `url`;
    CREATE TABLE IF NOT EXISTS `url` (
      `ID` int(10) unsigned NOT NULL auto_increment,
      `ID_ci` int(10) unsigned NOT NULL,
      `url` varchar(255) NOT NULL,
      `muid` int(10) unsigned NOT NULL,
      `mtime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `cuid` int(10) unsigned NOT NULL,
      `ctime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY  (`ID`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='URL' AUTO_INCREMENT=1 ;
    Mais MySQL tilt, sur la deuxième déclaration TIMESTAMP DEFAULT CURRENT_TIMESTAMP; voici le message:
    #1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
    Comment peut-on outrepasser cette limite?
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Que représentent mtime et ctime ?
    S'il s'agit des heures de création et de modification, il n'est pas très cohérent que mtime ait une valeur par défaut CURRENT_TIMESTAMP à la création. Ça devrait plutôt être DEFAULT NULL.
    S'il s'agit de tout autre chose et que les deux heures doivent être réelles à la création d'une ligne, alors il te faut un trigger.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    mtime, ctime sont date de modif et de creation, come tu l'as deviné.
    Sinon, si je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DROP TABLE IF EXISTS `url`;
    CREATE TABLE IF NOT EXISTS `url` (
      `ID` int(10) unsigned NOT NULL auto_increment,
      `ID_ci` int(10) unsigned NOT NULL,
      `url` varchar(255) NOT NULL,
      `muid` int(10) unsigned NOT NULL,
      `mtime` TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP,
      `cuid` int(10) unsigned NOT NULL,
      `ctime` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY  (`ID`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='URL' AUTO_INCREMENT=1 ;
    cela ne fonctionne pas, le message est identique.
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Idem, il n'est pas logique que la date de création soit mise à jour donc aps de valeur par ON UPDATE !

    Et plutôt que DEFAULT 0 pour le mtime, je mettrais DEFAULT NULL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Après une 3ème tentative, et quelques renseignements anglophones:
    This is a limitation of mySQL, you cannot have two TIMESTAMP columns with defaults that reference CURRENT_TIMESTAMP. The only way to do it would be to use a DATETIME type for ts_create which unfortunately cannot have a default value of NOW(). You can roll your own trigger to make that happen though.
    plus tard: c'est impossible d'utiliser 2 current_timestamp sur des champs différents et dans une même table.
    Sinon, merci de corriger mes fautes d'étourderie
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] la valeur du champ ID soit incrementale par defaut dans une table
    Par fleurrouge dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/02/2012, 10h05
  2. Champ independant: valeur par defaut dans une Table
    Par bakaccess dans le forum Access
    Réponses: 2
    Dernier message: 27/02/2008, 15h35
  3. Réponses: 2
    Dernier message: 22/03/2007, 16h19
  4. Probleme de date avec mysql: pas de date par defaut stp!
    Par kenny49 dans le forum Requêtes
    Réponses: 4
    Dernier message: 01/07/2006, 11h25
  5. where avec un champ timestamp
    Par DBBB dans le forum SQL
    Réponses: 3
    Dernier message: 26/05/2004, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo