nasıl ben mysql tabloda eşzamanlı ekler işlemek ve doğru uç id almak yok

3 Cevap php

Ben PHP kütüphanesi için ADODB kullanıyorum.

Rekor Ben bu işlevi kullanmak sokulduğu anda id getiriliyor için

"$db->Insert_ID()"

Ben çoklu ve eş zamanlı ekler veritabanı tabloya varsa bu yöntem eklenen her kayıt için bana doğru sokulan id dönecektir, bilmek istiyorum?

Bu soruyorum nedeni I use this last insert id for further processing of other records and making subsequent entries in the related tables. çünkü

Bu yaklaşımın yeterince güvenli ya da ben bir şey eksik olduğunu.

Ben mevcut veri ile karmaşa kadar kalmadan güvenli bir şekilde başka bir tabloya daha ekler için son ekleme id kullanın böylece beni bu için uygun bir çalışma planı formüle yardımcı olun.

Teşekkürler

3 Cevap

Evet, concurent kullanımı için güvenlidir. İşte açıklandığı gibi LAST_INSERT_ID(), bağlantı başına çünkü bu here:

The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions.

Eğer çok sayıda kayıt ekleme ve her geçen eklenen satırın id almak istiyorsanız eğer, o zaman bu başarıyla çalışacaktır sadece bu yüzden $ db-> Insert_ID () size son insert id dönecektir.

Ben çoklu ve eş zamanlı ekler veritabanı tabloya varsa bu yöntem eklenen her kayıt için bana doğru sokulan id dönecektir, bilmek istiyorum?

It will return only the most recently inserted id.
In order to get ids for multiple inserts, you will have to call INSERT_ID() after each statement is executed. IE:

INSERT INTO TABLE ....
INSERT_ID()

INSERT INTO TABLE ....
INSERT_ID()

... Her ekleme id değerini almak için. Eğer koştu eğer:

INSERT INTO TABLE ....
INSERT INTO TABLE ....
INSERT_ID()

Sadece ... son insert deyimi için id dönecektir.

Bu yaklaşımın yeterince güvenli ya da ben bir şey eksik olduğunu.

Bu izolasyon seviyelerine ilişkin diğer şeyler arasında başkası tarafından eklenen bir değer döndüren riskleri, hangi SELECT MAX(id) FROM TABLE kullanmaktan daha güvenlidir.