2011-01-04 10 views
153

मैं दो स्तंभों के लिए एक अद्वितीय कुंजी के साथ एक मेज है:सम्मिलित करें ... डुप्लिकेट कुंजी पर (कुछ भी नहीं)

CREATE TABLE `xpo`.`user_permanent_gift` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
`fb_user_id` INT UNSIGNED NOT NULL , 
`gift_id` INT UNSIGNED NOT NULL , 
`purchase_timestamp` TIMESTAMP NULL DEFAULT now() , 
PRIMARY KEY (`id`) , 
UNIQUE INDEX `user_gift_UNIQUE` (`fb_user_id` ASC, `gift_id` ASC)); 

मुझे लगता है कि तालिका में एक पंक्ति सम्मिलित करना चाहते हैं, लेकिन कुंजी मौजूद है, करने के लिए करता है, तो कुछ मत करो! मैं एक त्रुटि उत्पन्न नहीं करना चाहता क्योंकि कुंजी मौजूद है।

मैं जानता हूँ कि निम्न सिंटैक्स है कि वहाँ:

INSERT ... ON DUPLICATE KEY UPDATE ... 

लेकिन वहाँ की तरह कुछ है:

INSERT ... ON DUPLICATE KEY DO NOTHING 

?

उत्तर

256

हां, INSERT IGNORE है, या आप ON DUPLICATE KEY UPDATE id=id कर सकते हैं।

+3

आईएनएसईआरटी के बाद आईजीएनओआर जोड़ने के लिए, बाकी वाक्यविन्यास समान है? – ufk

+19

@ufk: 'INSERT IGNORE' 'ऑन डिप्लिकेट कुंजी' भाग के बिना, उदा। Xpo.user_permanent_gift (...) VALUES (...) ' – BoltClock

+95

में INSERT IGNORE ध्यान दें कि INSERT IGNORE डेटा रूपांतरण विफलताओं जैसी अन्य त्रुटियों को भी अनदेखा करता है। – mjcopple

0

जहाँ तक मुझे पता है, वास्तव में वास्तव में नहीं है।

अद्यतन IGNORE किसी भी अन्य त्रुटियों को अनदेखा करता है जो मुझे लगता है कि यह बहुत जोखिम भरा है।

क्या मैं (करने के लिए सबसे अच्छी बात नहीं हो सकता है) तो की तरह एक "हानिरहित" अद्यतन बयान के साथ अद्यतन वाक्य रचना को तैनात है:

INSERT INTO mytable (id, ...) VALUES (4, ...) ON DUPLICATE KEY UPDATE id=4; 

जाहिर है, इस अनावश्यक लिखने है मैं/हे, लेकिन मेरे लिए यह अभी तक ठीक काम किया है।

संबंधित मुद्दे