The documentation diyor ki:
INSERT IGNORE kullanmak ve satır göz ardı edilirse, AUTO_INCREMENT sayaç artırılır ve LAST_INSERT_ID() hiçbir satır eklendiğini yansıtır ki, 0 değerini döndürür.
- INSERT başka
- LAST_INSERT_ID(), sonra yapılırsa (yeni satır yerleştirilmiştir)
- your_primary anahtarı SEÇ IGNORE:
Bunu bilerek, bu çok adımlı bir işlemi yapabilirsiniz yourtable DAN ABD ile
Örnek (sizin eklenen verinin UNIQUE kısıtlamaları) devletler NEREDE:
göz ardı edilecektir bir satır ekleme
INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AZ','foo bar');
> OK
SELECT LAST_INSERT_ID();
> "3"
// we have the ID, we're done
: yeni bir satır ekleme Şimdi
id | abbrev | other_data
1 | AL | ...
2 | AK |
UNIQUE KEY abbr (abbrev)
,
INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AK','duplicate!');
> OK
SELECT LAST_INSERT_ID();
> "0"
// oops, it already exists!
SELECT id FROM `states` WHERE `abbrev` = 'AK'; // our UNIQUE constraint here
> "2"
// there we go!
Alternatif olarak, tek adımda bunu yapmak olası bir geçici çözüm vardır - kullanım INSERT IGNORE INTO
- the syntax is very similar yerine REPLACE INTO
. yan etkileri bu yaklaşımla olduğunu ancak Not - Bu veya sizin için önemli olabilir veya olmayabilir:
- +
- böylece tetikleyiciler um olan SİL satır yeniden siler DEĞİŞTİRİN
tetikledi
- ayrıca, birincil kimlik
REPLACE
yeni satır verilerle değiştirir, sıra
INSERT IGNORE
eski satır verileri tutar varsa bile artırılır edilecek
Deneyin:
Ayrıca ilgili soruya bakın. İşe yaramalı. – Jaideğilse bunu bize bildirin: http: // stackoverflow.com/questions/778534/mysql-on-duplicate-key-son-insert-id –
Ne yazık ki, resmi belgelere rağmen aksine çalışmayacak; 'INSERT IGNORE' tarafından takip edilen 'LAST_INSERT_ID()', son eklenen kimliği (veya aynı oturumda bir ekleme olmasaydı 0'ı) döndürür. Örnek: pastebin.com/KQaCQABR –