2012-08-10 17 views
10

हमारे पास कुछ सौ तालिकाओं वाला डेटाबेस है। विदेशी_की का उपयोग कर टेबल्स INNODB का उपयोग करें।MySQL अवैध विदेशी कुंजी खोजें

कभी-कभी हम अपने विकास, चरण और उत्पादन डेटाबेस के बीच डेटा (mysqldump का उपयोग करके व्यक्तिगत तालिकाओं) स्थानांतरित करते हैं। mysqldump डेटा को आयात करने के लिए सभी विदेशी कुंजी जांच अक्षम करता है।

तो समय के साथ हमारे कुछ गैर-उत्पादन डेटाबेस कुछ अनाथ रिकॉर्ड के साथ समाप्त होते हैं।

मैं एक ऐसी स्क्रिप्ट लिखने वाला था जो किसी भी अवैध (एक लापता रिकॉर्ड को इंगित करने वाली कुंजी) को एक संपूर्ण MySQL डेटाबेस के लिए विदेशी कुंजी ढूंढ और पहचान लेगा।

मुझे पता है कि मैं प्रत्येक तालिका और फकी को एक-एक करके जांचने के लिए एक प्रश्न लिख सकता हूं, लेकिन सोच रहा था कि यह पहले से ही ऐसा करने के लिए एक उपकरण हो सकता है।

मैं इस तरह की एक स्क्रिप्ट लिखने से पहले जांचूंगा कि यह देखने के लिए कि पहले से कोई बाहर है या नहीं।

Google की खोज थोड़ी सी ... आश्चर्यजनक रूप से मुझे कुछ भी नहीं मिला।

+0

आपका क्या मतलब है, 'अमान्य'? अनाथ रिकॉर्ड? एफके के साथ टेबल जो टेबल पर इंगित करते हैं जो अब मौजूद नहीं हैं? –

+0

आप अपना डेटाबेस स्वचालित रूप से ऐसा कर सकते हैं (आप जिस डीबी इंजन का उपयोग कर रहे हैं उसके आधार पर) और इसे हटाए गए कैस्केड पर रखें ताकि संदर्भित अखंडता को बरकरार रखा जा सके। –

+0

स्टीफन टिप्पणी के अतिरिक्त यह जान लें कि आप बच्चे को हटा सकते हैं या इसे अपडेट कर सकते हैं, आपको इसे हटाना नहीं है। – TomDunning

उत्तर

3

मैं पैदा की है इस संभाल करने के लिए एक सरल रूबी स्क्रिप्ट।

https://github.com/michaelirey/mysql-foreign-key-checker

आशा इस के रूप में मुझे एक ही समस्या के साथ किसी मदद करता है।

12

डेटा में पहले से ही है और आप माता-पिता को हटाने के लिए FK की कमी या झरने सेट नहीं किया है, तो आप सिर्फ हैं:

SELECT * FROM children WHERE my_fk_id NOT IN (select id from parents); 
+1

'चयन टी 1। * तालिका 1 टी 1 से बाएं जॉइन टेबल 2 टी 2 पर t1.parent_id = t2.id जहां t2.id है NULL' – DavidS

+0

@ आईसोटॉप डेटा पहले से ही है, लेकिन हमारे पास पहले से ही एफके बाधाएं हैं। –

+0

यह तालिका पर अमान्य कुंजी खोजने के लिए बहुत अच्छा है। हालांकि, मैं पूरे डेटाबेस में सभी तालिकाओं के लिए इन्हें ढूंढने के लिए एक टूल ढूंढ रहा हूं। –

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