Veritabanı Tablo Lock Kazanılması - Mülakat Soru

3 Cevap java

Benim röportaj Sorular biri, dünya çapında birden çok kullanıcı bu Otomatik Artım Field gibi bir birincil anahtarı olan bir tabloda kullandığı hangi uygulamayı, erişen eğer.

Nasıl diğer kullanıcı çalıştırdığı zaman diğer kullanıcı aynı Birincil anahtarı almak önleyebilir Soru?

Benim cevabım masaya Lock elde edecek ve ben bu kullanıcı Birincil anahtar ile yayımlanıncaya kadar kullanıcı beklemek yapacaktır.

Ama soru

  1. Nasıl Tablo programlı kilitlemek ve bu uygulamak edinebilirim?
  2. Eğer explicity masaya kilidi tutarsanız, uygulamaya her dakika gelen 1.000 kullanıcı varsa, o zaman uygulama yavaş olacak? Bunu nasıl başarıyorsunuz?

Yukarıdaki sorunun muhtemel cevapları tavsiye edin

3 Cevap

Bir autoincrementing birincil anahtar sürece düzgün kullanmak gibi iki kullanıcılara aynı değeri vermek asla. Tanımı gereği bir birincil anahtar benzersiz kısıtlamayı içeren olmasıdır.

Bunu kullanmak için düzgün ilk satırı eklemek ve daha sonra daha sonra son eklenen satırın id olsun. Örneğin MySQL belgelerinde bu konuda bir whole page var. MySQL Eğer LAST_INSERT_ID() kullanabilir veya mysql_insert_id() son eklenen satırın kimliği almak için.

Bir kötü yöntemi ilk satırı eklemek ve ardından MAX(id) için tablosunu sorgulamak için.

Bu yöntemi kullanırsanız, o zaman kilitleri gerekmez. Tablo kilitleri kullanarak uygulamayı yavaşlatacak ve mümkünse bunu önlemek gerekir.

Marks yazılan itibaren ardından, SQL Server size Scope_Identity() bu oturumda içinde oluşturulan son kimliği Getirme için kullanmalısınız.

Buna ek olarak, SQL Server bir işlem sırasında tabloları okuma / yazma nasıl yapılandırılacağı yalıtım düzeyleri uygulayabilirsiniz. İzolasyon Düzeyleri hakkında bilgi bulunabilir here

Veri erişimi için JDBC kullanan Java, size üzerinde INSERT yürütülen tablosunda () Statement.getGeneratedKeys çağırabilirsiniz.

EDIT: Ben sadece sorunuzu tekrar okuyun. Otomatik artışlı alanı ile, veritabanı ucun zamanda değeri karar verir. Bir kimlik sütunu kullanılarak nedenlerinden biri MAX (id) +1 kullanarak kendi kimlik anahtar yönetimi hack dışında daha iyidir - Bu tabloların kilitlenmesine ve teklik sağlamak yönetir.