MySQL - insert hatayı görmezden: girişini çoğaltmak

5 Cevap php

PHP çalışıyorum.

Please what's the proper way of inserting new records into the DB, which has unique field. I am inserting lot of records in a batch and I just want the new ones to be inserted and I don't want any error for the duplicate entry.

Ve sadece SELECT getiriler kayıtları INSERT - Önce bir SELECT yapmak ve giriş INSERT önce zaten orada olup olmadığını görmek için tek yol var mı? Umarım değildir.

Ben bir şekilde herhangi bir hata olmadan bu ekler görmezden MySQL söylemek istiyorum.

Teşekkür ederim

5 Cevap

Eğer bir yinelenen kayıt varken hiçbir eylemde istiyorsanız INSERT... IGNORE sözdizimini kullanabilirsiniz.

Eğer aynı anahtar ile bir yenisi ile eski rekor üzerine yazmak istiyorsanız REPLACE INTO sözdizimini kullanabilirsiniz.

Eğer bir yinelenen karşılaştığınızda yerine kayıtta bir güncelleştirme gerçekleştirmek istiyorsanız Veya, INSERT... ON DUPLICATE KEY UPDATE sözdizimini kullanabilirsiniz.

Düzenleme: Ben bazı örnekler eklemek düşündüm.

Examples

Eğer tbl, iki sütunlu, id ve value adında bir tablo var diyelim. Bir giriş, 1 = id = 1 ve değeri yoktur. Eğer aşağıdaki ifadeleri çalıştırın:

REPLACE INTO tbl VALUES(1,50);

Hala id = 1 değeri = 50 ile, bir kaydı var. Bütün kayıt Ancak ilk SİLİNMİŞ, ve sonra yeniden sokuldu unutmayın. Daha sonra:

INSERT IGNORE INTO tbl VALUES (1,10);

Operasyon başarıyla yürütür, ama hiçbir şey eklenir. Hala id = 1 ve değer = 50 var. Nihayet:

INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;

Artık = 1 id ve değeri = 200 ile tek bir kayıt var.

Sen kullanabilirsiniz triggers.

Ayrıca kontrol this introduction guide to triggers.

Benzersiz kısıtlama olmadan, yinelenen bir tablo, tercihen geçici bir tablo oluşturmak deneyin ve bu tabloya toplu yük yapmak. Sonra geçici tablo yalnızca benzersiz (DISTINCT) ürün seçin ve hedef tabloya eklemek.

Veritabanı şeması neye benziyor?

Sen auto increment her ekleme, benzersiz satırları garanti edecek bir kimlik sütunu ekleyebilirsiniz.

Soru: Ben müşterileri ile bir veritabanı kuruyorum. Ben veritabanında bilgi eklemek için "insert" deyimini kullanmak olduğunu biliyorum, ama nasıl ben yine aynı müşteri bilgileri girmeyin emin olabilirim?

Cevap: EXISTS durumunu kullanarak yinelenen bilgi takmayın emin olabilirsiniz.

Eğer client_id bir birincil anahtar ile müşterilerine adında bir tablo vardı Örneğin, aşağıdaki ifadeyi kullanabilirsiniz:

INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);

Bu ifade bir subselect ile birden fazla kayıt ekler.

Eğer tek bir kayıt eklemek istedim, aşağıdaki ifadeyi kullanabilirsiniz:

INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);

Dual tablo kullanımı, değerler şu anda bir tabloda depolanan olmasa bile, bir select deyimi içinde değerleri girmek için izin verir.

dan http://www.techonthenet.com/sql/insert.php