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

Requêtes MySQL Discussion :

TIMESTAMP ON UDATE CURRENT_TIMESTAMP


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut TIMESTAMP ON UDATE CURRENT_TIMESTAMP
    Bonjour,

    J'essaie de créer une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE IF NOT EXISTS tblCreateur(
    	id int(255) unsigned NOT NULL auto_increment,
    	id_createur int(255) unsigned NOT NULL ,
    	id_cours int(255) unsigned NOT NULL,
                 date_creation TIMESTAMP default CURRENT_TIMESTAMP,
    	cours_last_modif TIMESTAMP default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    	id_test int(255) unsigned NOT NULL,
    	test_last_modif TIMESTAMP default CURRENT_TIMESTAMP  ON UPDATE CURRENT_TIMESTAMP,
    	PRIMARY KEY(id)
    );
    J'ai parcouru le site et la documentation 'légal' de mysql au sujet de timestamp.

    J'ai bien compris que je ne pouvais pas mettre le champ date_creation en TIMESTAMP default CURRENT_TIMESTAMP. Seul TIMESTAMP NULL m'est permis car ON UPDATE CURRENT_TIMESTAMP est déjà dans une colonne.

    Mais je ne comprends pas pourquoi cette restriction ???

    Je désire à l'insertion d'une ligne que date_creation se définisse seul ainsi que le champ cours_last_modif et test_last_modif.
    ET lors d'une modification de ligne que les champs cours_last_modif et test_last_modif se mettent à jour sans une intervention commandée !

    Pouvez-vous me guider ou m'expliquer ?

    Merci
    Cyrille

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    L'informatique est très rapide. Je suppose que cette restriction existe parce que CURRENT_TIMESTAMP n'aurait pas la même valeur, le temps d'alimenter toutes les colonnes dont c'est la valeur par défaut.

    Passons au côté sémantique de ce que tu veux faire.
    Lorsque tu crées une ligne, elle n'est pas encore modifiée ni cette dernière modification testée donc il n'est pas logique de vouloir alimenter ces colonnes avec un CURRENT_TIMESTAMP en valeur par défaut.
    Tu devrais plutôt mettre DEFAULT NULL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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é
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut
    ok
    Je ne suis pas un habitué de Timestamp. Mais ceci n'est pas une raison !!

    Néanmoins, si je te suis bien, je modifie ma table ainsi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE IF NOT EXISTS tblCreateur(
    	id int(255) UNSIGNED NOT NULL AUTO_INCREMENT,
    	id_createur int(255) UNSIGNED NOT NULL ,
    	id_cours int(255) UNSIGNED NOT NULL,
                 date_creation TIMESTAMP DEFAULT null,
    	cours_last_modif TIMESTAMP DEFAULT null ON UPDATE CURRENT_TIMESTAMP,
    	id_test int(255) UNSIGNED NOT NULL,
    	test_last_modif TIMESTAMP DEFAULT null ON UPDATE CURRENT_TIMESTAMP,
    	PRIMARY KEY(id)
    );
    Donc cela suppose que les champ date_creation, cours_last_modif, test_last_modif doivent être spécifié lors de la création d'une ligne de la table !
    Et lors d'une modification de ligne via UPDATE, les champs cours_last_modif et test_last_modif changent sans intervention de ma part !
    Est-ce cela?

    Je sais : tu pourrais me dire "Essaye et tu verras!" mais je profite en effet de tes connaissances pour éclaircir les éventuelles erreurs que je pourrais rencontrer lors du débogage du code

    Merci

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Tu dois pouvoir laisser la colonne date_creation en DEFAULT CURRENT_TIMESTAMP, ce qui serait logique.

    Pour le ON UPDATE, je ne sais pas, je n'ai jamais essayé.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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é
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut
    J'ai essayé mais j'ai une erreur m'indiquant que je ne peux pas cumuler DEFAULT CURRENT_TIMESTAMP et ON UPDATE CURRENT_TIMESTAMP sur plusieurs colonnes !

    Donc je suppose qu'un seul champ peut avoir current_timestamp comme paramètre !

    J'ai changé de fusil d'épaule : Je place tous mes champs sous TIMESTAMP DEFAULT "0000-00-00 00:00:00"
    et je les modifierai dans le code

    C'est dommage, la fonction aurait pu être sympa !

    Merci

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Je serais toi je laisserais le DEFAULT CURRENT_TIMESTAMP sur date_creation et le DEFAULT NULL sur les autres colonnes TIMESTAMP et je virerais simplement le ON UPDATE.

    Quand tu mets une ligne à jour, il est facile de générer le CURRENT_TIMESTAMP dans une variable par le programme et de lui envoyer la valeur de la variable.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

Discussions similaires

  1. de char à timestamp
    Par imtinene dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 13/05/2004, 17h01
  2. [struts][validation][Timestamp] comment faire?
    Par anas.rih dans le forum Struts 1
    Réponses: 6
    Dernier message: 16/04/2004, 23h59
  3. Réponses: 4
    Dernier message: 06/02/2004, 16h23
  4. Conversion Timestamp vers varchar
    Par stejutt dans le forum SQL
    Réponses: 4
    Dernier message: 08/01/2004, 08h46
  5. recuperation du mois avec un timestamp
    Par matrxjean1984 dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/10/2003, 14h41

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