मुझे Google को दो बार इसकी आवश्यकता है, इसलिए मैं अपना क्यू/ए साझा कर रहा हूं।मैं कैसे जांचूं कि MySQL में किसी तालिका फ़ील्ड पर कोई अनुक्रमणिका मौजूद है या नहीं?
उत्तर
इसलिए की तरह उपयोग SHOW INDEX
:
SHOW INDEX FROM [tablename]
डॉक्स: https://dev.mysql.com/doc/refman/5.0/en/show-index.html
'my_table' से INDEX दिखाएं जहां कुंजी_नाम = 'index_to_check'; – mit
कुंजी_नाम के बजाय कॉलम_नाम का बेहतर उपयोग करें, इस तरह आपको नाम के बिना स्वचालित रूप से जोड़े जाने पर इंडेक्स नाम का पता लगाने की आवश्यकता नहीं है। – Programista
एकाधिक कुंजी कैसे जांचें? – berserk
सिर्फ CLI से एक टेबल लेआउट को देखने के लिए। आप क्या करेंगे
desc mytable
या
शो तालिका mytable
प्रयास करें:
SELECT * FROM information_schema.statistics
WHERE table_schema = [DATABASE NAME]
AND table_name = [TABLE NAME] AND column_name = [COLUMN NAME]
यह आप मैं बता देंगे एफ इंडेक्स को दिए गए नाम को जानने के बिना किसी निश्चित कॉलम पर किसी भी प्रकार की अनुक्रमणिका है। यह भी (के रूप में सूचकांक दिखाने के खिलाफ) एक संग्रहीत प्रक्रिया में काम करेंगे
SHOW KEYS FROM tablename WHERE Key_name='unique key name'
यदि तालिका में एक अद्वितीय कुंजी
show index from table_name where Column_name='column_name';
आप एक विशिष्ट शो सूचकांक नहीं चल सकता मौजूद है आप पा सकते हैं क्वेरी क्योंकि अगर कोई अनुक्रमणिका मौजूद नहीं है तो यह एक त्रुटि फेंक देगा। इसलिए, यदि आप किसी भी SQL त्रुटियों से बचना चाहते हैं तो आपको सभी इंडेक्स को सरणी और लूप में ले जाना होगा।
हेर्स मैं इसे कैसे करता हूं। मैं तालिका से सभी इंडेक्स को पकड़ता हूं (इस मामले में, leads
) और उसके बाद, फ़ोरैच लूप में, जांचें कि कॉलम का नाम (इस मामले में, province
) मौजूद है या नहीं।
$this->name = 'province';
$stm = $this->db->prepare('show index from `leads`');
$stm->execute();
$res = $stm->fetchAll();
$index_exists = false;
foreach ($res as $r) {
if ($r['Column_name'] == $this->name) {
$index_exists = true;
}
}
इस तरह आप वास्तव में सूचकांक विशेषताओं को सीमित कर सकते हैं। यह देखने के लिए कि आप किसके साथ काम कर सकते हैं, $res
पर करें।
आप निम्नलिखित SQL विवरण मेज पर दिए गए स्तंभ की जाँच करने के बाद मिलती है INNODB_SYS_ * खिलाफ हैं उपयोग कर सकते हैं अनुक्रमित किया गया था या नहीं
select a.table_schema, a.table_name, a.column_name, index_name
from information_schema.columns a
join information_schema.tables b on a.table_schema = b.table_schema and
a.table_name = b.table_name and
b.table_type = 'BASE TABLE'
left join (
select concat(x.name, '/', y.name) full_path_schema, y.name index_name
FROM information_schema.INNODB_SYS_TABLES as x
JOIN information_schema.INNODB_SYS_INDEXES as y on x.TABLE_ID = y.TABLE_ID
WHERE x.name = 'your_schema'
and y.name = 'your_column') d on concat(a.table_schema, '/', a.table_name, '/', a.column_name) = d.full_path_schema
where a.table_schema = 'your_schema'
and a.column_name = 'your_column'
order by a.table_schema, a.table_name;
, इसलिए मैच अनुक्रमित केवल केवल InnoDB टेबल
शो सूचकांक और फिर क्षेत्रों के लिए परिणाम की जांच:
निम्न कथन का उपयोग पंक्ति [ "तालिका"], पंक्ति [ "KEY_NAME"]
सुनिश्चित करें कि आप एकाधिक कुंजियों की जांच कैसे करें "KEY_NAME" सही ढंग से
बारे में हैं? – berserk