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

  1. #1
    Nouveau membre du Club
    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
    Points : 36
    Points
    36
    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 du Club
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 60
    Points
    60
    Par défaut
    C'est quoi l'erreur affiché par Mysql?.

  3. #3
    Nouveau membre du Club
    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
    Points : 36
    Points
    36
    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, 18h39
  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, 21h59
  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, 20h35
  4. Réponses: 1
    Dernier message: 23/07/2007, 21h57
  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, 15h55

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