SORU
3 Mart 2011, PERŞEMBE


Birden fazla tabloya İnsert MySQL? (Veritabanı normalleştirme?)

Birden fazla tablo Ekle bilgileri için bir yol ararken aynı sorguda denedim ama imkansız öğrendi? Sadece mutliple sorguları ı kullanarak eklemek istiyorum.e;

INSERT INTO users (username, password) VALUES('test', 'test')
INSERT INTO profiles (userid, bio, homepage) VALUES('[id of the user here?]','Hello world!', 'http://www.stackoverflow.com')

Ama nasıl "" profil tablo için kullanıcı kimliği? el ile kullanıcı otomatik artış kimliği verebilir miyim

CEVAP
3 Mart 2011, PERŞEMBE


Hayır, bir MySQL komutu birden fazla tabloya ekleyebilirsiniz. Ancak hareketleri kullanabilirsiniz.

BEGIN;
INSERT INTO users (username, password)
  VALUES('test', 'test');
INSERT INTO profiles (userid, bio, homepage) 
  VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com');
COMMIT;

LAST_INSERT_ID() bir göz otomatik artış değerleri yeniden kullanmak için.

Edit: "dedinBunca zaman bunu anlamaya sonra, hala çalışmıyor. Ben sadece tüm MySQL komutları $var ve koymak $var sadece oluşturulan KİMLİĞİ koyabilir mi?"

İzah edeyim: 3 olası yolları vardır:

  1. Kod yukarıda gördüğünüz. Bu tüm MySQL, ve İkinci LAST_INSERT_ID() açıklama otomatik olacak otomatik artış-sütun değeri ilk olarak eklenmiş açıklama.

    Kendisi ekler ikinci açıklaması otomatik artan bir sütun ile bir tablo içinde satırlar ne yazık ki,, LAST_INSERT_ID() tablo o-2 ve Tablo 1 güncellenecektir. Eğer hala Tablo 1 ondan sonra gerekiyorsa, bir değişkeni saklamak zorunda kalacağız. Bu yollar 2 ve 3 için bize yol açar:

  2. LAST_INSERT_ID() hissesi olacak MySQL değişken:

    INSERT ...
    SELECT LAST_INSERT_ID() INTO @mysql_variable_here;
    INSERT INTO table2 (@mysql_variable_here, ...);
    INSERT INTO table3 (@mysql_variable_here, ...);
    
  3. Bir LAST_INSERT_ID() hissesi olacak php değişken (veya herhangi bir dil bu bir veritabanı, sizin için bağlanabilir seçim):

    • INSERT ...
    • Dilinizi MySQL o değişmez ifade yürüterek ** 12, ya da almak için kullanın, ya da örneğin php kullanarak bunu sizin için yapar mysql_insert_id()
    • INSERT [use your php variable here]

UYARI

Ne seçim yaparsan yap, ne olacağına karar vermek gerekiryürütme sorguları arasında ara verilmelidir(örneğin, bir veritabanı-sunucu çöker). Eğer ile yaşayabilir "bazı bitirmiş, Diğerleri", okumaz.

Ancak karar "da tüm sorgular bitir, ya da hiç bitirmek istemiyorum satır bazı tablolar ama hiçbir eşleşen satırları Diğerleri hep benim veritabanı tabloları tutarlı olun", wrap tüm tablolarda bir işlem. BEGIN COMMIT burada kullanılan yüzden.

Eğer daha fazla bilgi:) ihtiyacın olursa tekrar yorum

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • guau . .

    guau . .

    25 Ocak 2008
  • GWTLecturer

    GWTLecturer

    18 EKİM 2012
  • MrRandomSong

    MrRandomSong

    29 Kasım 2009