वास्तव में यह यहाँ समझ में आता है क्यों:
किसी तालिका में, आप वास्तव में किसी भी स्तंभ को उसकी प्राथमिक कुंजी के रूप में सेट कर सकते हैं। तो यह पूर्णांक, डबल, स्ट्रिंग, आदि हो सकता है। हालांकि आजकल, हम ज्यादातर या तो पूर्णांक का उपयोग करते हैं, या हाल ही में, एक तालिका में प्राथमिक कुंजी के रूप में स्ट्रिंग्स का उपयोग करते हैं।
चूंकि विदेशी कुंजी किसी अन्य तालिका की प्राथमिक कुंजी की ओर इशारा कर रही है, इसलिए आपको विदेशी कुंजी के डेटाटाइप को निर्दिष्ट करने की आवश्यकता है। और यह स्पष्ट रूप से एक ही डेटाटाइप होना चाहिए।
संपादित करें:
जैसा कि हम देख सकते हैं, SQL कार्यान्वयन इस मामले में ढीले हैं:वे संगत प्रकारों (INT और BIG INT, Float या DECIMAL और DOUBLE) की अनुमति देते हैं लेकिन आपके अपने जोखिम पर . जैसा कि हम नीचे आपके उदाहरण में देख सकते हैं।
हालाँकि, SQL मानदंड निर्दिष्ट करते हैं कि दोनों डेटाटाइप समान होने चाहिए। यदि डेटाटाइप वर्ण है, तो उनकी लंबाई समान होनी चाहिए, अन्यथा, यदि यह पूर्णांक है, तो उनका आकार समान होना चाहिए। और दोनों . होना चाहिए हस्ताक्षरित या दोनों अहस्ताक्षरित हों ।
आप स्वयं यहाँ पर देख सकते हैं, 2003 में प्रकाशित एक MySQL पुस्तक का एक अध्याय।
आशा है कि यह आपके प्रश्न का उत्तर देगा।