2012-07-15 12 views
13

MySQL'de yinelenen anahtarda kaydı kaldırmanın bir yolu var mı?MySQL yinelenen anahtar üzerine ekleme; Silmek?

Belirli birincil anahtarla veritabanında bir kaydın olduğunu ve aynı anahtarla başka bir tane daha eklemeye çalıştığımızı varsayalım - ON DUPLICATE KEY UPDATE yalnızca kaydı günceller, ancak zaten varsa kaydı kaldırma seçeneği var mı? Bir düğmeye tıklama ile basit giriş/çıkış işlevleri içindir.

+3

** trigger kullan ** – rekenerd

+0

Teşekkürler - Bence bu tek seçenek. –

cevap

1

Aynı için en yakın olası çözüm REPLACE ifadesidir. İşte documentation for REPLACE.

Benzer bir soru MySQL Forums tarihinde istendi ve recommended(and only) answerREPLACE kullanmaktı.

+0

Evet, ama bu tam olarak aradığım şey değil - Veritabanındaki öğeyi değiştirmek istemiyorum - eğer varsa hepsi birlikte kurtulmak istiyorum. –

+0

Tek seçenek (yukarıdaki tek olası çözüm ise) bu durumda ayrı ifadeleri çalıştırmak olacaktır - önce kayıt olup olmadığını kontrol etmek için önce sonuca göre ya ekleyin ya da kaldırın. –

+0

ya da bir "BOOLEAN" veya "ENUM" sütununu oluşturun ve ona bağlı olarak veya olmasın 0 veya 1 olarak ayarlayın. – hjpotter92

4

Kullanım REPLACE INTO:

replace into some_table 
select somecolumn from othertable 

yeni veri eklemek veya olacak ya thr aynı veri verileri silmek ve sorunu için MySQL bir çözüm yoktur elbette yeni bir

+1

YA DA DUPLICATE UPDATE ile değiştirmenin performansı farklıdır. REPLACE INTO kaydı güncelleyemez - kaydı silip tekrar ekler, eğer tonlarca veri ve indeksiniz varsa, bir süre alabilir ... DUPLICATE GÜNCELLEME'NDE KULLANILMASI daha iyi olabilir, ama ON gibi bir şeyi KALDIR DUPLICATE DELETE –

-2

Evet ekler varsa .

silmek ya da zaten bir yinelenen kayıt tablosunun anahtar sütununda mevcutsa yeni yerleştirme rekoru atlamak istiyorsanız, böyle IGNORE kullanabilirsiniz:

İşte
insert ignore into mytbl(id,name) values(6,'ron'),(7,'son'); 

id sütunda birincil anahtar Tablo mytbl. Bu, yeni yinelenen kayıtları silerek veya atlayarak tabloda birden çok değer ekler.

Bu ihtiyacınızı karşılayacağını umuyorum.

+1

insert ignore –

5

Bir iş çevresinde, ama çalışır:

küçücük bir-int yapım yeni bir sütun oluşturun ve do_delete diyoruz, ya da her neyse. Sonra, MySQL sürümünüze/bağlantınıza bağlı olarak, aynı ifadede birden çok sorgu çalıştırabilirsiniz. Ancak, değilse bile, hemen sonradan gelen bir sorguyu çalıştırın. Her iki durumda da bir sonraki sorgu şu şekilde olur: Delete From [table] Where do_delete = 1;. Bu şekilde, eğer yeni bir girişse, hiçbir şey silmez. Yeni bir giriş değilse, daha sonra silinmek üzere işaretlenir, ardından silebilirsiniz.

+0

hiçbirini silmiyor Bu seçeneği beğenirim - ve güncelleme bildirimi değiştirmem gerekmeyecek. – ChiMo