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 :

Récupérer la valeur d'un champs auto incrémenté


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Octobre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 46
    Par défaut Récupérer la valeur d'un champs auto incrémenté
    Bonjour,

    Je suis débutant et j'utilise table 'action' qui possède une association réflexive.
    La clé primaire de cette table est 'act_id' qui est auto-incrémentée et je souhaiterais affecter par défaut à la clé étrangère 'act_action_origine', qui appartient aussi à la table 'action', la valeur de la clé primaire.

    J'ai essayé en utilisant un trigger AFTER INSERT ou en définissant la valeur par défaut de 'act_action_origine' avec LAST_INSERT_ID() mais rien n'y fait, j'ai toujours une erreur et l'insertion n'est pas effectuée.

    Est ce que quelqu'un connait le moyen de résoudre mon problème?
    Merci d'avance.

  2. #2
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Par défaut
    C'est quoi l'erreur affiché par Mysql?.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Octobre 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 46
    Par défaut
    Je vous donne le code SQL de ma table 'action' et celui du trigger :

    Table 'action' :
    CREATE TABLE IF NOT EXISTS `gestion`.`action` (
    `act_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
    `act_action_origine` INT(10) UNSIGNED NULL ,
    `act_creation` INT UNSIGNED NOT NULL DEFAULT 1 ,
    `act_modification` INT UNSIGNED NULL ,
    `act_statut` ENUM('Valide','Supprimée') CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT 'Valide' ,
    `act_type` ENUM('Interne','Externe') CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT 'Interne' ,
    `act_document_source` INT UNSIGNED NULL ,
    `act_detail` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL DEFAULT 'Essai' ,
    `act_responsable` INT UNSIGNED NULL ,
    `act_delai` DATETIME NULL DEFAULT NOW() ,
    `act_relance_mail` TINYINT(1) NULL DEFAULT 0 ,
    `act_priorite` ENUM('Basse','Moyenne','Haute') CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT 'Basse' ,
    `act_avancement` ENUM('Plannifiée','Réalisée','Vérifiée','Soldée') CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT 'Plannifiée' ,
    `act_cloture` DATETIME NULL DEFAULT NULL ,
    `act_document_cloture` INT UNSIGNED NULL DEFAULT NULL ,
    `act_efficacite` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
    PRIMARY KEY (`act_id`) ,
    INDEX `fk_action_action_idx` (`act_action_origine` ASC) ,
    INDEX `fk_action_creation_idx` (`act_creation` ASC) ,
    INDEX `fk_action_modificaton_idx` (`act_modification` ASC) ,
    CONSTRAINT `fk_action_action`
    FOREIGN KEY (`act_action_origine` )
    REFERENCES `gestion`.`action` (`act_id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
    CONSTRAINT `fk_action_creation`
    FOREIGN KEY (`act_creation` )
    REFERENCES `gestion`.`creation` (`cre_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
    CONSTRAINT `fk_action_modification`
    FOREIGN KEY (`act_modification` )
    REFERENCES `gestion`.`modification` (`mod_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
    ENGINE = InnoDB
    Trigger :
    -- Full Trigger DDL Statements
    -- Note: Only CREATE TRIGGER statements are allowed
    DELIMITER $$

    USE `gestion`$$

    CREATE TRIGGER `action_BINS` BEFORE INSERT ON action FOR EACH ROW
    -- Edit trigger body code below this line. Do not edit lines above this one
    BEGIN
    DECLARE IdIncremente int;
    IF (NEW.act_action_origine IS NULL) THEN
    SET IdIncremente = (SELECT NEW.act_id) ;
    SET NEW.act_action_origine = IdIncremente ;
    END IF;
    END
    $$
    Lorsque j'essaie d'insérer un nouvel enregistrement, voici l'erreur qui apparaît :

    ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (`gestion`.`action`, CONSTRAINT `fk_action_action` FOREIGN KEY (`act_action_origine`) REFERENCES `action` (`act_id`) ON DELETE CASCADE ON UPDATE CASCADE)

    SQL Statement:

    INSERT INTO `gestion`.`action` (`act_creation`, `act_detail`) VALUES ('1', 'Essai')
    J'espère que ça pourra aider dans la recherche d'une solution.

Discussions similaires

  1. récupérer la valeur d'un champ auto-incrémente
    Par mehdi.cheddani dans le forum VB.NET
    Réponses: 16
    Dernier message: 27/01/2014, 17h39
  2. [PHP 5.3] Récupérer la valeur d'un champ auto-incrementé
    Par herve911 dans le forum Langage
    Réponses: 24
    Dernier message: 18/09/2011, 20h59
  3. Récupérer la valeur d'un champ auto increment dans Firebird
    Par mls dans le forum Bases de données
    Réponses: 11
    Dernier message: 30/09/2009, 19h35
  4. Réponses: 1
    Dernier message: 23/07/2007, 20h57
  5. Connaître la valeur d'un champ auto incrémenté
    Par soltani1 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/05/2006, 14h55

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