तालिका की प्राथमिक कुंजी कैसे प्राप्त करें?


82

क्या mysql-database से प्राथमिक कुंजी फ़ील्ड का नाम प्राप्त करने का कोई तरीका है? उदाहरण के लिए:

मेरे पास एक तालिका है:

+----+------+
| id | name |
+----+------+
| 1  | Foo1 |
| 2  | Foo2 |
| 3  | Foo3 |
+----+------+

जहां फ़ील्ड आईडी प्राथमिक कुंजी है (इसमें ऑटो वेतन वृद्धि है लेकिन मैं उसका उपयोग नहीं कर सकता)। मैं php में फ़ील्ड का नाम "id" कैसे प्राप्त कर सकता हूं?

जवाबों:


136

एक बेहतर तरीका यह है कि SHOW KEYSआप का उपयोग हमेशा जानकारी_schema तक न हो। निम्नलिखित कार्य:

SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'

Column_name में प्राथमिक कुंजी का नाम होगा।


1
अच्छा सुझाव। Information_schema MySQL 5.0 के रूप में समर्थित है, लेकिन वास्तव में यह विधि पुराने संस्करणों के लिए भी काम करती है।
रोलैंड बोमन

28
क्या केवल column_nameकुंजी को पुनः प्राप्त करने का एक तरीका है ?
JDelage

cutयदि आप केवल कॉलम नाम प्राप्त करना चाहते हैं तो उपयोग करें: `| cut -f5`
Whoan

34

यहां प्राथमिक कुंजी कॉलम नाम है

SELECT k.column_name
FROM information_schema.table_constraints t
JOIN information_schema.key_column_usage k
USING(constraint_name,table_schema,table_name)
WHERE t.constraint_type='PRIMARY KEY'
  AND t.table_schema='YourDatabase'
  AND t.table_name='YourTable';

3
हाँ - यह एक तरीका है। MySQL के मामले में, आप इसे सरल भी कर सकते हैं, क्योंकि PRIMARY
बाधा_नाम

सभी यह बहुत alexn के जवाब की आवश्यकता होती है संसाधन है पर ऐसा करने का सुझाव नहीं होगा अब तक तेजी से होता है
Breezer

हाँ, इस क्वेरी में लंबा समय लगता है। मैंने जो किया वह तालिका के नाम और टेबल आईडी के साथ एक और तालिका है और वहां से लाने की कोशिश कर रहा है, अगर यह तालिका नहीं मिल सकती है, तो यह इस लंबी क्वेरी को बनाता है और इसे नई तालिका में जोड़ता है, बहुत तेज़ी से काम करता है। लेकिन एलेक्सन का जवाब वास्तव में बहुत अच्छा लगता है
गन्स

2
लेकिन यह समाधान कई तालिकाओं के साथ काम करते समय बहुत अच्छा काम करता है। (बस k.table_name, k.column_name, k.ordinal_position चुनें)।
क्लॉस

21
SELECT kcu.column_name, kcu.ordinal_position
FROM   information_schema.table_constraints tc
INNER JOIN information_schema.key_column_usage kcu
ON     tc.CONSTRAINT_CATALOG = kcu.CONSTRAINT_CATALOG
AND    tc.CONSTRAINT_SCHEMA = kcu.CONSTRAINT_SCHEMA
AND    tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
WHERE  tc.table_schema = schema()             -- only look in the current schema
AND    tc.constraint_type = 'PRIMARY KEY'
AND    tc.table_name = '<your-table-name>'    -- specify your table.
ORDER BY kcu.ordinal_position

1
बस एक FYI करें, पर sqlserver , constraint_nameऐसा लगता है कि UK_entity_name, PK_Users, FK_Users_Contactsआदि, तो यह है कि यह एक अच्छी तरह से ज्ञात मंच-नास्तिक मूल्य के लिए भरोसा किया जा सकता प्रतीत नहीं होता। 😞
ईसाई

1
वाह! मुझे उम्मीद नहीं थी कि आप इसे अपडेट करेंगे। , कुछ चीजों के अलावा, यह पूरी तरह से काम करता है! (मैंने फिक्स के साथ आपके लिए अपना जवाब अपडेट किया, आशा है कि आपको कोई आपत्ति नहीं है)
क्रिश्चियन

@Christian धन्यवाद किले जल्दी अनुवर्ती और सुधार। बहुत आभारी!
रोलैंड बोमन


7

इस बारे में कैसा है:

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'Your Database'
  AND TABLE_NAME = 'Your Table name'
  AND COLUMN_KEY = 'PRI';


SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'Your Database'
  AND TABLE_NAME = 'Your Table name'
  AND COLUMN_KEY = 'UNI';

1
ERROR 1054 (42S22): अज्ञात कॉलम 'db' जहां 'क्लॉज'
zloctb

1
@zloctb: dbआपके TABLE_SCHEMA द्वारा नाम बदलने के बारे में ...? मुझे समझ नहीं आ रहा है कि आपको इस पर +1 क्यों मिला ...
लुडोविक गुइलैम नोव

1
यह उत्तर स्पष्ट था और मेरे लिए तुरंत काम किया।
बेट्टी मॉक

5

यदि आप प्राथमिक कुंजियों की सूची को PHP के माध्यम से गतिशील रूप से जनरेट करना चाहते हैं तो बिना उपयोग किए प्रत्येक तालिका के माध्यम से चलाएं

SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.key_column_usage 
WHERE table_schema = '$database_name' AND CONSTRAINT_NAME = 'PRIMARY' 

हालाँकि आपको ऐसा करने के लिए information.schema का उपयोग करने की आवश्यकता है।


2

एक PHP दृष्टिकोण के लिए, आप mysql_field_flags का उपयोग कर सकते हैं

$q = mysql_query('select * from table limit 1');

for($i = 0; $i < mysql_num_fields(); $i++)
    if(strpos(mysql_field_tags($q, $i), 'primary_key') !== false)
        echo mysql_field_name($q, $i)." is a primary key\n";

हाँ, अच्छा सुझाव। हालांकि सीमित है, यह primaruy कुंजी के लिए काफी अच्छा है।
रोलैंड बोमन

पूछने वाले ने कहा PHP।
आर्सेली

2

सबसे कम संभव कोड कुछ ऐसा लगता है

// $dblink contain database login details 
// $tblName the current table name 
$r = mysqli_fetch_assoc(mysqli_query($dblink, "SHOW KEYS FROM $tblName WHERE Key_name = 'PRIMARY'")); 
$iColName = $r['Column_name']; 

1

मैं समझ गया, आखिर!

<?php

function mysql_get_prim_key($table){
$sql = "SHOW INDEX FROM $table WHERE Key_name = 'PRIMARY'";
$gp = mysql_query($sql);
$cgp = mysql_num_rows($gp);
if($cgp > 0){
// Note I'm not using a while loop because I never use more than one prim key column
$agp = mysql_fetch_array($gp);
extract($agp);
return($Column_name);
}else{
return(false);
}
}

?>

0

मैं SHOW INDEX FROM टेबल का उपयोग करता हूं; यह मुझे बहुत से सुझाव देता है; यदि कुंजी अद्वितीय है, तो सूचकांक में इसका क्रम, टकराना, उप भाग, यदि अशक्त, इसका प्रकार और टिप्पणी मौजूद है, तो यहां स्क्रीनशॉट देखेंयहाँ


क्या आप प्रदान किए गए समाधान के बारे में थोड़ा और विवरण जोड़कर अपने जवाब को विस्तृत कर सकते हैं?
abarisone

0

MySQL में SQL क्वेरी "SHOW INDEX FROM" है जो एक टेबल से इंडेक्स को लौटाता है। उदाहरण के लिए। - निम्नलिखित क्वेरी उत्पादों तालिका के लिए सभी अनुक्रमित दिखाएगी: -

SHOW INDEXES FROM products \G

यह प्रकार, स्तंभ_नाम, Key_name, आदि के साथ एक तालिका देता है और सभी अनुक्रमित और प्राथमिक कुंजी के साथ आउटपुट प्रदर्शित करता है -

*************************** 1. row ***************************
        Table: products
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: product_id
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: 
   Index_type: BTREE
      Comment: 
Index_comment: 

तालिका उपयोग से प्राथमिक कुंजी प्रदर्शित करने के लिए: -

SHOW INDEXES FROM table_name WHERE Key_name = 'PRIMARY'

एक स्पष्टीकरण जोड़ने पर विचार करें कि यह मूल प्रश्न का उत्तर क्यों देता है।
ओलिवियर डी Meulder

0

यदि आपके डेटाबेस में स्थानिक तालिकाएँ हैं, तो उपयोग करें:

SHOW KEYS FROM table WHERE Key_name = 'PRIMARY' OR Key_name = 'OGR_FID'

0

आपको PRIMARY का उपयोग करना चाहिए key_column_usage.constraint_name = "PRIMARY"

नमूना क्वेरी,

SELECT k.column_name as PK, concat(tbl.TABLE_SCHEMA, '.`', tbl.TABLE_NAME, '`') as TABLE_NAME
FROM information_schema.TABLES tbl
JOIN information_schema.key_column_usage k on k.table_name = tbl.table_name
WHERE k.constraint_name='PRIMARY'
  AND tbl.table_schema='MYDB'
  AND tbl.table_type="BASE TABLE";

0
SELECT k.column_name
FROM information_schema.key_column_usage k   
WHERE k.table_name = 'YOUR TABLE NAME' AND k.constraint_name LIKE 'pk%'

मैं आपको सभी क्षेत्रों को देखने की सलाह दूंगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.