2011-10-14 14 views
6

मेरे पास एक डेटाबेस है जहां मुझे कुछ विदेशी कुंजी छोड़ने की ज़रूरत है, लेकिन मुझे पहले से पता नहीं है कि विदेशी कुंजी अभी भी मौजूद है या नहीं।विदेशी कुंजी खोजने के लिए क्वेरी

मुझे कुछ संग्रहीत प्रक्रियाएं मिली हैं (http://forums.mysql.com/read.php?97,218825,247526) जो चाल करता है, लेकिन मैं इसके लिए एक संग्रहीत प्रक्रिया नहीं बनाना चाहता हूं।

मैं संग्रहीत प्रक्रिया के अंदर क्वेरी का उपयोग करने की कोशिश की है, लेकिन मैं का उपयोग कर "अगर मौजूद है (आदि .. आदि से शून्य का चयन करें कोई त्रुटि मिलती है ...

मैं केवल संग्रहित प्रक्रियाओं में IF EXISTS का उपयोग कर सकते हैं?


अभी, केवल एक चीज मैं चला सकते हैं

SELECT * FROM information_schema.TABLE_CONSTRAINTS 
WHERE information_schema.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY' 
AND information_schema.TABLE_CONSTRAINTS.TABLE_SCHEMA = 'myschema' 
AND information_schema.TABLE_CONSTRAINTS.TABLE_NAME = 'mytable'; 

है और मैं यह भी

की कोशिश की है
IF EXISTS (SELECT NULL FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = DATABASE() AND CONSTRAINT_NAME = parm_key_name) THEN 
(...) do something (...) 
END IF; 

लेकिन मैं प्राप्त एक You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF' at line 1

मैं सरल प्रश्नों के साथ मंचों में उदाहरण के लिए देखा है और मैं क्यों यह काम नहीं कर रहा है मतलब नहीं कर सकते हैं।

नोट: टूटा हुआ लिंक

+1

तो आपकी क्वेरी कैसी दिखती है? –

+0

"विदेशी कुंजी छोड़ें" से आपका विशेष अर्थ क्या है? – gview

+0

@ अलर्ट टेबल 'टेबल' की तरह कुछ गवाह करें 'डीआरओपी विदेशी कुंजी' एफके'; –

उत्तर

5

सही करने के लिए संपादित करें आप सूचना योजना से कनेक्ट करने की जरूरत है और आप प्राथमिक कुंजी और इस तालिका में विदेशी कुंजी के बारे में सभी जानकारी प्राप्त कर सकते

SELECT * FROM information_schema.TABLE_CONSTRAINTS T;

आप

उपयोगकर्ता information_schema तक पहुंचने के लिए उपयोगकर्ता की आवश्यकता है।

इस तालिका का उपयोग करके आप तालिका, डीबी और चाहे वह विदेशी कुंजी हो।

आशा है कि अगर आप IF EXIST और संग्रहित प्रक्रिया का उपयोग नहीं करना चाहते हैं तो यह मदद करता है। लेकिन मुझे यकीन है कि आप IF EXIST का उपयोग गैर संग्रहीत प्रक्रिया प्रश्नों के लिए उपयोग किए जा सकते हैं ....

+0

"[वाई] कहां info_schema तक पहुंचने के लिए रूट उपयोगकर्ता होने की आवश्यकता है।" आपको यह सूचना कहां मिली। – rstackhouse

+0

मुझे लगता है कि यह कहना अधिक सटीक है कि कोई उपयोगकर्ता केवल उस जानकारी स्कीमा का हिस्सा देख सकता है जिस पर उनके पास अनुमति है। यदि कोई उपयोगकर्ता 'GRANT ALL' के साथ बनाया गया है तो वे उस तालिका पर अनुमतियां देख सकते हैं। – rstackhouse

1

आप इस पर "INFORMATION_SCHEMA" तालिका का उपयोग क्यों नहीं करते?

SELECT * 
FROM `TABLE_CONSTRAINTS` 
WHERE `CONSTRAINT_TYPE` = 'FOREIGN KEY' 
0

आप सूचना योजना से कनेक्ट करने की जरूरत है और आप प्राथमिक कुंजी और इस तालिका में विदेशी कुंजी के बारे में सभी जानकारी प्राप्त कर सकते

select 
     concat(table_name, '.', column_name) as 'foreign key', 
     concat(referenced_table_name, '.', referenced_column_name) as 'references' 
    from 
     information_schema.key_column_usage 
    where 
     referenced_table_name is not null; 

मदद: इस लिंक list-foreign-keys-in-mysql

देखना
संबंधित मुद्दे