2008-10-03 9 views
8

mysql'de, otomatik olarak işlenirken, ekleme işlemi için kullanılan birincil anahtarı nasıl alabilirim.Birincil anahtarlar ve bir ekleme ile ilgili kolay bir mysql sorusu

Temel olarak, deyim tamamlandığında yeni otomatikleştirilen değerin döndürülmesini istiyorum.

Teşekkürler!

+0

Açıklama: Kod bir last_insert_id ekledikten sonra. Bu açıklamaların ikisi aynı anda neredeyse yürütmek ve exec düzen insert 1. insert 2. last_insert_id 1. tamamlanıncaya dönüşür ve 2 last_insert_id 2. tamamlamalar insert # id döner ve insert # id döndürür 2 Bu olabilir mi? – MPX

cevap

12

Sizin açıklama comment başka eşzamanlı INSERT olursa LAST_INSERT_ID() yanlış sonuç vermez emin ilgilendiğiniz söylüyor. Diğer eş zamanlı etkinliklerden bağımsız olarak LAST_INSERT_ID() yönteminin güvenli olduğundan emin olabilirsiniz. LAST_INSERT_ID() yalnızca geçerli oturum sırasında üretilen en son kimliği döndürür. Her iki

  1. Açık kabuk pencereleri, çalıştırmak mysql müşteri ve veritabanına bağlanmak:

    Sen kendin deneyebilirsiniz.

  2. Kabuk 1: AUTO_INCREMENT anahtarıyla bir tabloya INSERT.
  3. Kabuk 1: SELECT LAST_INSERT_ID(), sonuca bakın.
  4. Kabuk 2: Aynı tabloya INSERT.
  5. Kabuk 2:(), kabuk 1
  6. Kabuk 1 farklı bir sonuç bkz LAST_INSERT_ID: SELECT (yine) LAST_INSERT_ID SEÇİMİ önceki sonucun tekrarlanmak.

Bunu düşünüyorsanız, mantıklı olan tek yol budur. Otomatik artırıcı anahtar mekanizmaları destekleyen tüm veritabanları bu şekilde hareket etmelidir. Sonuç diğer istemcilerle eşzamanlı olarak olası bir yarış koşuluna bağlıysa, o zaman geçerli oturumunuzda son eklenen ID değerini almak için güvenilir bir yol olmaz.

+0

Teşekkürler! Tam olarak ne istediğimi. Bu yardımcı gönderi için – MPX

+0

@Bill Karwin çok fazla. Bir soru: Çok iş parçacıklı bir ortamda söyleyin, o zamanki Auto Inc anahtar değeri 10'du .. o zaman kabuk 1 iş parçacığı ekleyemez ve aynı anda kabuk 2 ekleniyor .. last_insert_id() ne olurdu? 11 mi 12 mi?thx çok – shadesco

+0

@shadesco: MySQL'inizin sürümüne bağlıdır, ancak 5.1 ve daha sonra InnoDB ile ilk oturum otomatik-inc'i artırır ve bu değer kaybolacaktır. Daha sonra ikinci seans 12 olur. Bkz. Http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html –

6

. Ben bir MySQL kullanıcısı değilim, ancak son tamamlanmış eylemin, bundan biraz daha sağlam olan son eklenen eylemi almanın belirli bir yolu var. Tabloya yazı yazmanız ve sorgulamanız arasında bir ekleme olduysa ne olacak? Biliyorum çünkü birçok ay önce beni çok etkiledi (yani evet). Bütün bunlardan kılavuzu okumak başarısız olursa : http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

0

MySQL Dokümanlar işlevini tarif

İlgili konular