19 Ekim 2012 Cuma

MySQL AutoIncrement Kolon Değerini Çekmek (LAST_INSERT_ID() Fonksiyonu)

MySQL LAST_INSERT_ID()  Fonksiyonu Nedir ?


Arkadaşlar uzunca bi aradan sonra nihayet bloğum da yeni paylaşımlar yapmak için geri döndüm :)
Maalesef iş dünyasının yorucu ve yoğun çalışma ortamına kendinizi bi kez kaptırdınızmı kafanızı kaldırmanız pek de kolay olmuyor :) neyse konumuza geri dönelim nedir bu fonksiyon ve nasıl kullanılır ?

Arkadaşlar bu fonksiyon'u kullanabilmek için öncelikle bir Insert işlemi gerçekleştirmeniz gerekmektedir. Insert işlemi sonrası kayıt eklenen tablodaki "Auto Increment" özelliği true olan Primery Key kolonunuzun değerini almak için bu fonksiyonu kullanabiliriz.

Yani MsSQL'deki Insert işlemi sonrası doldurulan  (alt gr+q)(alt gr+q)identity değişkeni ne işe yarıyorsa bu fonksiyonda o işe yarıyor
veya
Oracle kullananların bildiği tabloda otomatik artan kolon oluşturmak için kullanılan sequence'lerin insert işlemi sonrası oluşan değerini almak için kullanılan "SEQUENCE_NAME".CURRVAL kullanımı gibi.

Peki bunu nerde kullanabiliriz.Hemen örnek bir seneryo oluşturalım.

Siz bir promosyon kampanyası düzenliyorsunuz ve asıl amacınız kullanıcıları sisteme üye yapıp telefon numaralarını öğrenebilmek ve bu numaraları sonradan arayarak kullanıcılara ürün pazarlamak.Bunun için de çok basit 2 tane tablo tasarladınız.

Tablolarınız : KULLANICILAR, KULLANICI_TELEFONLARI olsun.



















KULLANICILAR tablosuna her kullanıcıya özel olmak üzere otomotik artan bir kolon olan "KULLANICI_ID" isimli bir PK kolonu koydunuz ve Telefon numaralarını da Kullanıcılarla ilişkilendirmek için KULLANICI_TELEFONLARI tablosuna "RF_KULLANICI_ID" isimli bir kolon eklediniz.
Yani amacınız sisteme bir üye kaydolduğu zaman kişisel bilgilerini KULLANICILAR tablosuna kaydetmek Telefon Numaralarını ise KULLANICI_TELEFONLARI isimli tabloya kaydetmek.

Şimdi bu iki tabloya aynı anda Insert işlemi yapan bir MySQL StoredProcedur'u yazalım.

CREATE PROCEDURE CREATE_USER
(
  P_KULLANICI_AD VARCHAR(20),
  P_KULLANICI_SOYAD VARCHAR(20),
  P_KULLANICI_TELEFONU VARCHAR(11) /*NORMALDE BİRDEN FAZLA OLABİLİR AMA BİZ ÖRNEK İÇİN SADECE TEK TELEFON OLDUĞUNU DÜŞÜNELİM*/
)
BEGIN
     
  /*KULLANICILAR TABLOSUNA BİLGİLERİ KAYDET*/
  INSERT INTO TEST.KULLANICILAR
              (
                AD,
                SOYAD
              )
              VALUES
              (
                P_KULLANICI_AD,
                P_KULLANICI_SOYAD
              );
 
  /*INSERT İŞLEMİ SONUCU OTOMOTİK OLUŞAN KULLANICI_ID DEĞERİNİ AL*/
  set (alt gr + q)RF_KULLANICI_ID = LAST_INSERT_ID();
 
  /*KULLANICI_TELEFONLARI TABLOSUNA BİLGİLERİ KAYDET*/
 
  INSERT INTO TEST.KULLANICI_TELEFONLARI
              (
                RF_KULLANICI_ID,
                TELEFON_NO
              )
              VALUES
              (
                (alt gr + q)RF_KULLANICI_ID,
                P_KULLANICI_TELEFONU
              );
 
END;


Çok basit bir fonksiyon fakat bu tarz fonksiyonların ihtiyacı programlama hayatında sıkça karşımıza çıkmakta umarım faydalı olmuştur.

Önemli Not : Bu tarz fonksiyon ve değişkenler son insert işleminin değerini saklamaktadır.Eğer bir önceki Insert işleminde elde edilen değeri kullanmak istiyorsanız bir sonraki Insert işlemine geçmeden bu değişkenin değerini başka bir lokal değişkende saklamalısınız.



Hiç yorum yok:

Yorum Gönder