Bir toplu gelen lastInsertId eklemek?

6 Cevap php

Hy there, Bulk insert question on how to get lastInsertId.

INSERT INTO details (idactivity,user,hours,val,date) VALUES ('981','133','0','10500','2008-07-01'),('981','184','0','2750','2008-07-01'),('981','184','0','2750','2008-07-01')

(Iddetails ayrıntılar tablo olarak PK)

3 yeni iddetails almak ve bir sonraki toplu ekleme sorgusuna onları almak için bir yolu var mı?

INSERT INTO activity (idactivity,iddetails) VALUES('981',??),('981',??),('981',??)

teşekkür ederim.

6 Cevap

Bildiğim kadarıyla, değil mysql.

MySQL kılavuzunda behavior of last_insert_id() with multi-row insert statements ayrıntılı bir tartışma var. Kırmızı dikey çubuk kelime "önemli" ile başlayan ile kısmına biraz aşağı kaydırın.

Ben bir anda ilk ekler birini yapmak zorunda düşünüyorum. MySQL last_insert_id sadece size böyle bir multi-line insert deyimi ile takın ilk elemanının kimliği verecektir. Eğer aynı anda birden fazla işlem yerleştirme hattınız varsa sorunlar olabilir.

Ancak, InnoDB tabloları kullanıyorsanız (ve ben, bu doğrulanmış değil), daha sonra ifadesi should örtülü bir işlem yürütülür, böylece should varsaymak mümkün oluşturulan kimlikleri ardışık edildi.

Başka bir yol, yine, işlemler varsa, tabloyu kilitlemek ve elle Otomatik artma özelliği bulunuyor güncellemek için olduğunu. Eklemek 50 satır varsa, örneğin, daha sonra Sonra tabloyu açmak. 50 ile çarpmak ve açıkça ayırdık kimlikleri kullanarak, satır eklemek. Eğer AUTO_INCREMENT okumak, ve sonra bunu güncellemeden önce birisi yeni bir satır eklemek zorunda değilsiniz, böylece Bunun için Transations (ya da en azından tablo kilitleri) ihtiyacınız olacaktır.

Yerine sadece bir tarih bir datetime kullanılan Eğer kullanıcı ve datetime değerlere dayalı eklenen id arama olabilir, ama eğer gerekiyorsa bunu sadece bir toplu ekleme yapmak değil, muhtemelen daha iyi olduğunu verileri. Aksi takdirde zaten daha sorguları çalıştıran sonunda.

Bir GUID için bir veritabanı alanı eklemek ve her bir kayıt ile rasgele bir mağaza olabilir. sonra başka bir sorgu kimlikleri ayıklamak

SEÇ last_insert_id Kullanma (); Eğer son eklenen id alabilirsiniz sorgulayabilirsiniz.