Maison  >  Questions et réponses  >  le corps du texte

Comment insérer par lots les identifiants insérés dans MySQL

J'essaie d'obtenir l'insertid après avoir inséré plusieurs lignes dans la table MySQL à l'aide de cette requête

insert into sometable (id , candidateid , createdby)
    values ('61','3175','1425'),('60','3175','1425'),('42','3175','1425'),('61','3176','1425'),('60','3176','1425'),('42','3176','1425') OUTPUT INSERTED.id

Mais j'obtiens une erreur de syntaxe SQL

code: 'ER_PARSE_ERROR',
  errno: 1064,
  sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUTPUT INSERTED.id' at line 2",
  sqlState: '42000',

Comment obtenir un identifiant d'insertion

P粉738248522P粉738248522228 Il y a quelques jours487

répondre à tous(1)je répondrai

  • P粉614840363

    P粉6148403632024-03-27 00:53:20

    OUTPUT INSERTED La syntaxe est une chose de Microsoft SQL Server. MySQL ne prend pas en charge cette syntaxe.

    Dans votre exemple, vous avez défini les valeurs id explicitement, il n'est donc pas nécessaire de les renvoyer. Récupérez-les simplement à partir de vos propres valeurs, que vous connaissez évidemment déjà avant d'effectuer l'insertion.

    Vous comptez peut-être sur les identifiants à incrémentation automatique générés lors des insertions.

    Pour obtenir l'ID d'incrémentation automatique de la ligne la plus récemment insérée, utilisez la fonction LAST_INSERT_ID() dans une requête distincte après l'INSERT.

    LAST_INSERT_ID() renvoie uniquement le premier ID généré lors de l'insertion. Si vous effectuez une insertion sur plusieurs lignes, c'est à vous d'en déduire les identifiants suivants. Ce sont généralement des valeurs continues. Par exemple, le pilote MySQL JDBC s'appuie sur des valeurs consécutives afin de pouvoir renvoyer des ensembles d'identifiants après des insertions groupées.

    Cependant, si vous modifiez innodb_autoinc_lock_mode=2 ils ne sont pas garantis comme étant des valeurs consécutives, il alloue les valeurs d'auto-inc de manière "entrelacée", de sorte que les insertions simultanées peuvent obtenir des valeurs de la séquence entre les ensembles générés par inserts multi-rangs . Ce n'est pas le mode par défaut, vous pouvez donc le définir volontairement.

    répondre
    0
  • Annulerrépondre