Saya cuba mendapatkan insertid selepas memasukkan berbilang baris dalam jadual mysql menggunakan pertanyaan ini
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
Tetapi saya mendapat ralat sintaks 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',
Bagaimana untuk mendapatkan ID masukkan
OUTPUT INSERTED
Sintaks ialah Microsoft SQL Server perkara. MySQL tidak menyokong sintaks ini.Dalam contoh anda, anda telah menetapkan nilai
id
secara eksplisit, jadi tidak perlu mengembalikannya. Hanya dapatkannya daripada nilai anda sendiri, yang jelas anda sudah tahu sebelum melakukan sisipan.Anda mungkin bergantung pada ID kenaikan automatik yang dijana semasa sisipan.
Untuk mendapatkan ID kenaikan automatik bagi baris yang paling baru dimasukkan, gunakan fungsi LAST_INSERT_ID() dalam pertanyaan berasingan selepas INSERT.
LAST_INSERT_ID() hanya mengembalikan ID first yang dijana semasa pemasukan. Jika anda melakukan sisipan berbilang baris, terpulang kepada anda untuk membuat kesimpulan id berikutnya. Ia biasanya nilai berterusan. Sebagai contoh, pemacu MySQL JDBC bergantung padanya sebagai nilai berturut-turut supaya ia boleh mengembalikan set id selepas sisipan pukal.
Walau bagaimanapun, jika anda menukar
innodb_autoinc_lock_mode=2
mereka tidak dijamin sebagai nilai berturut-turut, ia memperuntukkan nilai auto-inc dalam cara "berjalin", jadi sisipan serentak mungkin mendapat nilai daripada jujukan antara set yang dihasilkan oleh sisipan berbilang baris . Ini bukan mod lalai, jadi anda boleh menetapkannya dengan sengaja.