2010-02-08 17 views
13

क्या कोई प्रश्न है जो केवल रिकॉर्ड की जांच करेगा और यदि यह सम्मिलित नहीं है? मैं डुप्लिकेट अपडेट या प्रतिस्थापित नहीं करना चाहता हूं। एक प्रश्न समाधान की तलाश में, दूसरे उत्तर को देखा लेकिन वास्तव में जो मैं उम्मीद कर रहा था वह नहीं।mysql सशर्त डालने - यदि मौजूद नहीं है

तालिका:

name|value|id 
------------------ 
phill|person|12345 

छद्म क्वेरी:

IF NOT EXISTS(name='phill', value='person', id=12345) INSERT INTO table_name 
+1

क्या आप इस प्रश्न को थोड़ा सा स्पष्ट कर सकते हैं? आईडी केवल एकमात्र अद्वितीय क्षेत्र है? (एक त्वरित और गंदे तरीके से आप एक अद्वितीय अनुक्रमणिका का उपयोग कर सकते हैं और यदि आप एक डुप्लिकेट मान के साथ पंक्ति को डालने और डालने में असफल हो जाएंगे)। क्या नाम और मूल्य भी अद्वितीय होना चाहिए? –

+0

सभी तीन मान अद्वितीय हैं और खाली नहीं होना चाहिए। आईडी में एक इंडेक्स है, नाम और मान अलग-अलग होना चाहिए लेकिन आईडी –

उत्तर

18

उपयोग REPLACE - काम करता है वास्तव में सम्मिलित की तरह, लेकिन तालिका में एक पुराने पंक्ति एक के लिए एक नई पंक्ति जितना समान मान है कि अगर प्राथमिक कुंजी या एक अद्वितीय सूचकांक, नई पंक्ति डालने से पहले पुरानी पंक्ति हटा दी जाती है।

http://dev.mysql.com/doc/refman/5.0/en/replace.html

-- For your example query 
REPLACE INTO table_name(name, value, id) VALUES 
('phill', 'person', 12345) 

संपादित करें: जब से तुम REPLACE एक और विकल्प है का उपयोग नहीं कर सकते हैं: (प्राथमिक कुंजी, विशिष्टता) तालिका डेटा के लिए बाधा अनुक्रमित सेट है और उपयोग सम्मिलित ध्यान न दें

INSERT IGNORE INTO table_name 
SET name = 'phill', 
    value = 'person', 
    id = 12345; 
+0

है, हां मैं कार्यक्षमता को समझता हूं लेकिन मेरे उपयोगकर्ता के पास केवल चयन, INSERT, UPDATE तक पहुंच है। लेकिन मैं अद्यतन से दूर रहने की कोशिश कर रहा हूं और मुझे नहीं पता कि मुझे REPLACE फ़ंक्शन –

+2

के लिए अनुमति है या नहीं, INSERT IGNORE – Yada

+0

INSERT IGNORE को हटाएं और रिकॉर्ड फिर से जोड़ें? या अगर यह पाया जाता है और नहीं मिला तो यह सिर्फ इसे छोड़ देता है? –

2

एक चुनिंदा क्वेरी से सम्मिलित करने के बारे में कैसे करें जिसमें पंक्ति केवल एक पंक्ति वापस करने के लिए उप-क्वेरी है यदि पंक्ति पहले से मौजूद नहीं है?

स्यूडोकोड:

INSERT INTO TABLE_FOO (...) 
SELECT @VAR1, VAR2 ... 
FROM DUMMYTABLE -- THIS TABLE SHOULD CONTAIN 1 RECORD OF ANYTHING 
       -- IN CASE THE FROM IS REQUIRED 
WHERE (SELECT COUNT(*) FROM TABLE_FOO WHERE COLUMN1 = @VAR1) = 0 

यह पैटर्न काम करना चाहिए, तो आप सिर्फ वाक्य रचना MySQL के लिए सही पाने के लिए की आवश्यकता होगी।

+2

यह उन पंक्तियों से निपटने में उपयोगी था जो कुंजी या यूनिक का उपयोग नहीं करते थे। – zigg

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