folder Tahribat.com Forumları
linefolder Database - Veritabanı
linefolder Veritabanı Auto İd Kayması Problemini Nasıl Çözerim?



Veritabanı Auto İd Kayması Problemini Nasıl Çözerim?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pesimistzombie
    pesimistzombie's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    Problemimi genişçe anlatayım;

    Zamanında bir üyelik sistemi yapmıştım, çok sivrizekalı olduğumdan dolayı sırf hücrelerden kâr edicem düşüncesiyle üyelik sistemini şu şekilde yapmıştım;

    Kullanıcı siteye kayıt olurken tüm bilgileri;

    insert into A tablosu
    insert into B tablosu
    insert into C tablosu

    Şeklinde kayıt oluyor ve bu tabloların ID hücreleri primary key olarak üye idsi ile eşit şekilde seyrediyor. Yani bizim "7" idli üyecan nickli üyemizin bilgilerini A, B, C tablolarından id=7 şeklinde çektiriyorum ve kolayıma geliyordu..

    ----------------------

    Şimdi asıl problem şu;
    Anlık bir kesintide veya başka türlü sıkıntılarda B ve C tablosunun auto increment ayarı ileride gidiyor, A tablosu da geriden geliyor ve üyelik sistemi çakılıyor. Şimdi diyeceksiniz a bizim akıllı zombimiz aç tablolara birer uyeid hücresi, o şekilde yoluna devam et. Düşündüm, denedim bu sefer de aynı anda kayıt olmaya çalışan 2 üyenin zamanın bilmem kaçta kaçının kesişmesiyle beraber B ve C tablolarındaki üye bilgileri birbirine karışabiliyor. Senede bir kez anca meydana geliyor olsa bile canımı sıkıyor bu durum.


    Bu sorunumu nasıl çözebilirim? 


    :|
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pesimistzombie
    pesimistzombie's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    Belirtmeyi unutmuşum veritabanı MySQL (innodb)


    :|
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    1-)Öncelikle A B ve C tablolarına üye id şeklinde UYELERIN ID lerini referans alan bir foreign key field'ı oluşturacaksın. Tablolarını organize edeceksin yeniden. Hataları düzelteceksin. Daha sonra;

    Yöntem 1:Üyeleri kaydederken transaction kullanacaksın hocam. INNODB benim bildiğim transaction işlemlerini destekliyor. O yılda milyonda bir ihtimalde oluşan sorunlarıda bu şekilde iptal edeceksin. MYSQL de transaction kullanmadım ama internette muhtemel bi sürü örnek bulursun.

    Gerçi hala anlamadım nasıl öyle bir sorun çıkabiliyor. Aynı anda bile üye olsalarda.Üyeler tablosuna eklediğin satırın id numarasını alıp o id numarasını A B C tablolarını oluştururken FIELD'e yazarak kullanacaksın.

     

     

    Yöntem 2: Ayrıca 2. maddeyi iptal ederek; Her üye kayıt olurken (UYELER tablosuna) AFTER INSERT triggeri ile tetikleyici bağlayacaksın. Ve her üyenin A, B ve C satırlarını bu trigger içinde oluşturtacaksın ki, o yılda bir olan hata oluşmasın.

     

     Düzeltme:Bazı kavramları yanlış yazmışım.

     

    DrKill tarafından 02/May/14 04:23 tarihinde düzenlenmiştir

    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pesimistzombie
    pesimistzombie's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    stored procedures/transaction gibi şeylere bağlı kalmadan kısa yoldan kodlarla veya hücrelerle halletmek istiyorum hocam eğer çok zorda kalırsam dediğin gibi yapabilirim ama öncelik basitçe kod/hücre yumağıyla yapmak :D

    + up olsun


    :|
Toplam Hit: 899 Toplam Mesaj: 4