kullanmak INSERT IGNORE INTO table
bkz http://bogdan.org.ua/2007/10/18/mysql-insert-if-not-exists-syntax.html
INSERT … ON DUPLICATE KEY UPDATE
sözdizimi de var, sen dev.mysql.com ile ilgili açıklamalar bulabilirsiniz
Post from bogdan.org.ua according to Google's webcache: strong>
18 Ekim 2007
Başlatmak için: son MySQL gibi, başlığında sunulan sözdizimi mümkün değildir. Ancak mevcut işlevselliğini kullanarak bekleniyor ne başarmak için birkaç çok kolay bir yolu vardır.
INSERT, IGNORE DEĞİŞTİR veya INSERT kullanan ... YİNELENEN KEY UPDATE: 3 olası çözümleri vardır.
Biz bir tablo var düşünün:
CREATE TABLE `transcripts` (
`ensembl_transcript_id` varchar(20) NOT NULL,
`transcript_chrom_start` int(10) unsigned NOT NULL,
`transcript_chrom_end` int(10) unsigned NOT NULL,
PRIMARY KEY (`ensembl_transcript_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Şimdi nedeniyle boru hattı yürütmenin herhangi bir aşamada kırılmış olabilir, çeşitli nedenlerle bir otomatik Ensembl transkript meta-veri alma boru hattı, ve o olduğunu düşünün. Böylece, iki şeyi sağlamak gerekir: 1) boru hattının tekrarlanan infazlar bizim veritabanı yok olmaz, ve 2) tekrarlanan infazlar nedeniyle 'yinelenen birincil anahtar' hataları ölmeyecek.
Yöntem 1: DEĞİŞTİR kullanarak
Çok basit:
REPLACE INTO `transcripts`
SET `ensembl_transcript_id` = ‘ENSORGT00000000001′,
`transcript_chrom_start` = 12345,
`transcript_chrom_end` = 12678;
If the record exists, it will be overwritten; if it does not yet exist, it will be created.
However, using this method isn’t efficient for our case: we do not need to overwrite existing records, it’s fine just to skip them.
Method 2: using INSERT IGNORE
Also very simple:
INSERT IGNORE INTO `transcripts`
SET `ensembl_transcript_id` = ‘ENSORGT00000000001′,
`transcript_chrom_start` = 12345,
`transcript_chrom_end` = 12678;
'Ensembl_transcript_id' zaten veritabanında mevcut ise burada, sessizce (göz ardı) atlanır olacaktır. (Daha kesin olmak gerekirse, burada MySQL başvuru kitabında bir alıntı: "Eğer IGNORE anahtar kelime kullanırsanız, INSERT deyimi yürütülürken oluşan hatalar Örneğin, mevcut bir UNIQUE dizini çoğaltan bir satır, IGNORE olmadan yerine uyarı olarak kabul edilir. veya tabloda PRIMARY KEY değer bir yinelenen anahtar hata neden olur ve deyim iptal edilir. "). kayıt henüz yoksa, yaratılacaktır.
Bu ikinci yöntem, diğer herhangi bir sorun (kılavuzuna bakın) oluşması durumunda sorgu olmayan kürtaj dahil olmak üzere birçok potansiyel zayıflıkları vardır. Daha önce IGNORE anahtar sözcüğü olmadan test eğer Böylece kullanılmalıdır.
Orada bir daha seçenek: INSERT kullanmak YİNELENEN KEY UPDATE sözdizimi ON ... ve UPDATE bölümünde sadece bir şey yapmak 0 0 hesaplanması gibi bazı anlamsız (boş) işlemini yapın (Geoffray MySQL optimizasyonu için id = id atama yapıyor anlaşılacağı ) bu operasyonu görmezden motor. Bu yöntemin avantajı, sadece yinelenen anahtar olayları sayar, ve hala diğer hataları durdurur olmasıdır.
Son bir haber olarak: bu yazı Xaprb esinlenilmiştir. Ben de esnek SQL sorguları yazarken onun diğer yazı danışmak tavsiye ediyorum.