2011-01-09 23 views
32

Tek bir kayıt ekini yürüten bir döngü ile birden fazla kayıt eklersem, döndürülen son insert kimliği beklendiği gibi sonuncudur. Ben birden fazla kayıt ekleme deyimini Ama eğer: MySQL LAST_INSERT_ID() birden çok kayıtta kullanılır INSERT bildirimi

INSERT INTO people (name,age) 
VALUES ('William',25), ('Bart',15), ('Mary',12); 

üç Yukarıdaki tabloda eklenen ilk kayıtlar diyelim. Ekleme ifadesinden sonra, son ekleme kimliğinin 3 değerini döndürmesini bekledim, ancak 1 döndürdü. Söz konusu ifadenin ilk ek kimliği.

Birden çok kayıt INSERT ifadesi bağlamında bu, LAST_INSERT_ID()'un normal davranışı olup olmadığını onaylayabilir. Bu yüzden kodumu buna dayanabilirim.

+0

Tablonuzda otomatik artış var mı? –

+4

ikinci iki insert ids kolayca hesaplanabilir. İlk önce her kayıt için bir tane ekleyin. – dqhendricks

+2

@dqhendricks kimliğin doğru olacağından emin misin? innodb ile eklediğim kadarıyla belirli bir kimlik kümesini kilitlemeyin ve başka bir işlem arasına giriş girebilir, ancak bu konuda INSERT ... VALUES ... –

cevap

37

Evet. last_insert_id() Bu davranış documented in the MySQL docs şudur: Tek bir INSERT ifadesini kullanarak birden fazla satır eklerseniz

Önemli
, LAST_INSERT_ID() sadece ilk eklenen satıra ilişkin oluşturulan değeri döndürür. Bunun nedeni, başka bir sunucuya karşı aynı INSERT ifadesini kolayca çoğaltmayı mümkün kılmaktır.

2

Bu davranış, MySQL için man page numaralı belgede belirtilmiştir. Bu yorumlarda ama meydan okuma değil, bu yüzden beklenen davranış olduğunu tahmin ediyorum.

+0

FYI: Bu davranış, yalnızca kullanıcı yorumlarını değil, gerçek MySQL kılavuzunda belgelenmiştir. Ayrıntılar için [yanıtım] (http://stackoverflow.com/questions/4637367/mysql-last-insert-id-used-with-multiple-records-insert-statement/7959695#7959695) adresine bakın. – Asaph

İlgili konular