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 :

DATETIME NOT NULL DEFAULT[?]


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut DATETIME NOT NULL DEFAULT[?]
    Bonjour à toutes et à tous,

    j'essaye de gérer 2 champs de type DATETIME de façon automatique.
    Voici ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE `t_groupe` (
      `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
      `nom` VARCHAR(100) NOT NULL,
      `datetime_creation` DATETIME NOT NULL,
      `datetime_modification` DATETIME NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY (`nom`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    J'aimerais :
    1- qu'à la création d'un enregistrement, `datetime_creation` et `datetime_modification` prennent NOW() comme valeur
    2- qu'à la modification d'un enregistrement, `datetime_modification` prends NOW() comme valeur

    J'ai essayé tout un tas de syntaxe (DEFAULT NOW(), CURRENT_TIMESTAMP, etc ) mais rien ne passe.

    Une idée du pourquoi ?
    Merci d'avance
    @ bientôt

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 063
    Par défaut
    Bonjour,

    C'est écrit noir sur blanc dans la documentation de MySQL :
    Une valeur DEFAULT doit être une constante, ça ne peut pas être une fonction ou une expression. Cela signifie notamment que vous ne pouvez pas donner une valeur par défaut à une colonne de date, le résultat de la fonction NOW() ou CURRENT_DATE.
    Il faut déléguer ce rôle à l'application au moment du INSERT et de l'UPDATE. Ou alors passer par des triggers.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    salut,

    je ne sais pas si tu peux faire cela en une seule fois
    Le problème est que tu peux mettre qu'une seule colonne avec comme valeur pour défaut la date

    cela ressemblerait à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE `t_groupe` (
      `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
      `nom` VARCHAR(100) NOT NULL,
      `datetime_modification` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      UNIQUE KEY (`nom`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    bon je me suis finalement tourné vers un trigger à l'insertion et un trigger à la modification.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DROP TRIGGER IF EXISTS insert_datetime_groupe;
     
    delimiter $$
    CREATE TRIGGER insert_datetime_groupe 
    BEFORE INSERT ON t_groupe 
    FOR EACH ROW BEGIN
    SET NEW.datetime_creation = NOW();
    SET NEW.datetime_modification = NOW();
    END;
    $$
    delimiter ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DROP TRIGGER IF EXISTS update_datetime_groupe;
     
    CREATE TRIGGER update_datetime_groupe 
    BEFORE UPDATE ON t_groupe 
    FOR EACH ROW SET NEW.datetime_modification = NOW();
    Merci.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/03/2012, 14h09
  2. Modification du 'not null with default'
    Par genio dans le forum DB2
    Réponses: 3
    Dernier message: 26/10/2007, 14h40
  3. equivallent de int(11) NOT NULL default '0' en oracle
    Par soumia1988 dans le forum Oracle
    Réponses: 4
    Dernier message: 09/03/2007, 15h35
  4. Réponses: 8
    Dernier message: 24/07/2003, 10h45
  5. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 00h07

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