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
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.