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 :

Script sql - LAST_INSERT_ID() affiche plusieurs fois le retour ? [MySQL-5.6]


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 51
    Par défaut Script sql - LAST_INSERT_ID() affiche plusieurs fois le retour ?
    Bien le bonjour,

    J'ai fais un script SQL pour insérer mes données en masse, et lorsque j'en ai besoin je stocke les id que je viens d'insérer dans une variable.
    Mon script marche nickel, les données me semblent bien insérer toussa toussa...

    J'ai cependant un affichage qui me parait bizarre, lorsque je lance le script, chaque appel à cette fonction décuple le nombre de ligne que ça m'affiche...
    J'ai du mal a l'expliquer, je vous laisse un petit script pour tester par vous même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    CREATE TABLE IF NOT EXISTS `test` (
    	`id` INT PRIMARY KEY AUTO_INCREMENT,
    	`truc` VARCHAR(1)
    );
     
     
    INSERT INTO `test`(`truc`) VALUES("A");
    	SELECT @id_1 := LAST_INSERT_ID() FROM `test`;
     
    INSERT INTO `test`(`truc`) VALUES("B");
    	SELECT @id_2 := LAST_INSERT_ID() FROM `test`;
     
    INSERT INTO `test`(`truc`) VALUES("C");
    	SELECT @id_3 := LAST_INSERT_ID() FROM `test`;
     
    INSERT INTO `test`(`truc`) VALUES("D");
    	SELECT @id_1 := LAST_INSERT_ID() FROM `test`;
    Nom : mysql.PNG
Affichages : 146
Taille : 11,2 Ko

    Une idée du pourquoi cet affichage ?

    Merci d'avance !

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    C'est normal : lors du premier appel, il y a une ligne dans la table test, lors du deuxième, il y a deux lignes...

    supprimez le FROM test

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 917
    Par défaut
    Salut fd_caramba.

    1) Ca, c'est complètement stupide !
    Vous déclarez une chaine de caractères de longueur variable et comme longueur, vous mettez 1 !
    La bonne déclaration est :
    2) Vous ne devez pas préciser le nom de la table quand vous utilisez la fonction "last_insert_id()".
    La bonne syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select last_insert_id();
    --> http://dev.mysql.com/doc/refman/5.7/...last-insert-id

    3) attention à la façon dont vous faites vos insertions. Voici un exemple qui ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    SET session collation_connection=latin1_general_ci
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    (
      `id`    integer unsigned  NOT NULL AUTO_INCREMENT primary key,
      `truc`  varchar(255)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `test`(`truc`) VALUES ('Un'), ('Deux')
    --------------
     
    --------------
    SELECT LAST_INSERT_ID()
    --------------
     
    +------------------+
    | LAST_INSERT_ID() |
    +------------------+
    |                1 |
    +------------------+
    --------------
    INSERT INTO `test`(`truc`) VALUES ('Trois'), ('Quatre')
    --------------
     
    --------------
    SELECT LAST_INSERT_ID()
    --------------
     
    +------------------+
    | LAST_INSERT_ID() |
    +------------------+
    |                3 |
    +------------------+
    --------------
    INSERT INTO `test`(`truc`) VALUES ('Cinq'), ('Six'), ('Sept'), ('Huit'), ('Neuf')
    --------------
     
    --------------
    SELECT LAST_INSERT_ID()
    --------------
     
    +------------------+
    | LAST_INSERT_ID() |
    +------------------+
    |                5 |
    +------------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    Les bonnes valeurs sont : 2, 4 et 9 et non pas 1, 3 et 5.

    4) la colonne 'id ' est une colonne auto incrémentée.
    Si vous désirez récupérer la dernière valeur insérée, c'est-à-dire la plus haute valeur, vous devez faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    --------------
    INSERT INTO `test`(`truc`) VALUES ('Un'), ('Deux')
    --------------
     
    --------------
    SELECT auto_increment FROM information_schema.tables WHERE table_schema = 'base' AND table_name='test'
    --------------
     
    +----------------+
    | auto_increment |
    +----------------+
    |              3 |
    +----------------+
    --------------
    INSERT INTO `test`(`truc`) VALUES ('Trois'), ('Quatre')
    --------------
     
    --------------
    SELECT auto_increment FROM information_schema.tables WHERE table_schema = 'base' AND table_name='test'
    --------------
     
    +----------------+
    | auto_increment |
    +----------------+
    |              5 |
    +----------------+
    --------------
    INSERT INTO `test`(`truc`) VALUES ('Cinq'), ('Six'), ('Sept'), ('Huit'), ('Neuf')
    --------------
     
    --------------
    SELECT auto_increment FROM information_schema.tables WHERE table_schema = 'base' AND table_name='test'
    --------------
     
    +----------------+
    | auto_increment |
    +----------------+
    |             10 |
    +----------------+
    Une petite différence, dans la valeur obtenue et qui se nomme l'auto_incrément.
    Il s'agit de la prochaine valeur à insérer dans la colonne 'id'.

    @+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 51
    Par défaut
    @aieu : Merci, impec'

    @francis :

    1) http://cipcnet.insa-lyon.fr/sqltut/nexen/char.html
    2) k
    3) je sais, hors sujet, mais merci quand meme
    4) je sais, hors sujet, mais merci quand meme

  5. #5
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 917
    Par défaut
    Salut fd_caramba.

    Qui est francis ?

    Dans le lien que tu donnes, il y a beaucoup d'inepties. La grosse différence dépend essentiellement du paramétrage de MySql et aussi du type de charset.
    Si tu te bases la dessus, c'est normal que tu ne comprennes pas trop la différence entre char et varchar.

    @+

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 51
    Par défaut
    Salut René,

    Rien à voir.
    Tu n'as pas du bien lire la doc.

    https://dev.mysql.com/doc/

    @+

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

Discussions similaires

  1. Crosstab s'affiche plusieurs fois
    Par soumou dans le forum iReport
    Réponses: 9
    Dernier message: 23/09/2008, 00h57
  2. Sous rapport affiché plusieurs fois
    Par t1mar dans le forum iReport
    Réponses: 2
    Dernier message: 21/03/2007, 19h05
  3. [FLASH 8] Afficher plusieurs fois le même clip
    Par Devil Shark dans le forum Flash
    Réponses: 16
    Dernier message: 27/02/2007, 08h07
  4. Réponses: 12
    Dernier message: 23/01/2007, 19h07
  5. Réponses: 5
    Dernier message: 24/08/2006, 15h00

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