2009-05-21 10 views
19

मैं हूँ, PHP में इस तरह की एक SQL क्वेरी पैदा:MySQL: निर्धारित तालिका के प्राथमिक कुंजी गतिशील रूप

$sql = sprintf("UPDATE %s SET %s = %s WHERE %s = %s", ...); 

के बाद से इस क्वेरी के लगभग हर हिस्से गतिशील मैं कोई तरीका होना चाहिए तालिका के प्राथमिक कुंजी गतिशील निर्धारित करने के लिए है

$sql = sprintf("UPDATE %s SET %s=%s WHERE PRIMARY_KEY = %s", ...); 

वहाँ एक मेज के प्राथमिक कुंजी के लिए एक MySQL कीवर्ड या इसे पाने के लिए एक रास्ता है: है, ताकि मैं इस तरह एक प्रश्न होगा?

मैंने इस तरह की जानकारी खोजने से पहले info_schema डीबी का उपयोग किया है, लेकिन अगर मुझे इसका सहारा लेने की आवश्यकता नहीं है तो यह अच्छा होगा। यह कुछ समय लगता है सभी तालिकाओं आपको आवश्यकता हो सकती पर शो बयान को चलाने के लिए -

उत्तर

31
SHOW INDEX FROM <tablename> 

आप पंक्ति जहां KEY_NAME = प्राथमिक

http://dev.mysql.com/doc/refman/5.0/en/show-index.html

आप शायद परिणाम कैश करने के लिए चाहता हूँ चाहता हूँ काम साथ में करने केलिए।

+14

धन्यवाद, कि महान है । मैंने इसका उपयोग समाप्त कर दिया: से कुंजी दिखाएं कहां कुंजी_नाम = 'प्राथमिक' – macinjosh

+1

यह पूरी पंक्ति देता है ... यदि आप केवल कॉलम नाम चाहते हैं, तो नीचे जेक सुली का जवाब देखें। – Andrew

+0

जिस व्यक्ति ने यह उत्तर लिखा है, मुझे इस बात से सहमत होना है: जेक सुली का जवाब अब तक का सबसे अच्छा है। @macinjosh मैं अपने जवाब को स्वीकार नहीं करने की सिफारिश करता हूं, और इसके बजाय जेक को स्वीकार करता हूं। –

20

यह सलाह नहीं दी जा सकता है लेकिन सिर्फ ठीक काम करता है:

SELECT k.COLUMN_NAME 
FROM information_schema.table_constraints t 
LEFT JOIN information_schema.key_column_usage k 
USING(constraint_name,table_schema,table_name) 
WHERE t.constraint_type='PRIMARY KEY' 
    AND t.table_schema=DATABASE() 
    AND t.table_name='owalog'; 

mysql-list पर प्रस्तुत के रूप में:

SHOW INDEX FROM <table_name> WHERE Key_name = 'PRIMARY'; 

ठोस रास्ता INFORMATION_SCHEMA उपयोग करने के लिए है। हालांकि यह पहले समाधान से कुछ बार धीमा है।

+0

हाय, मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन मैं सिर्फ यह पूछना चाहता था कि आपने क्यों कहा कि पहली विधि की सलाह नहीं दी गई है। [इस डुप्लिकेट प्रश्न] से स्वीकृत उत्तर (https://stackoverflow.com/questions/2341278/php-get-primary-key-of-table) कहता है कि आपके पास हमेशा info_schema तक पहुंच नहीं है, इसलिए यह पहले सुझाता है तरीका।इसके अलावा आपने स्वयं को कहा कि दूसरी विधि पहले समाधान की तुलना में कुछ गुना धीमी है। यदि ऐसा है, तो दूसरा तरीका ठोस क्यों है? धन्यवाद। –

+0

जैसा कि http://mysql-0v34c10ck.blogspot.com/2011/05/better-way-to-get-primary-key-columns.html में इंगित किया गया है, इसे mysql चर या विचार दृश्य आदि के रूप में उपयोग नहीं किया जा सकता है, लेकिन यदि आपके परिदृश्य में पहला मामला काम करता है @Andrew – lukmdo

0
इसके अलावा

SHOW INDEX FROM <table_name> WHERE Key_name = 'PRIMARY'; 

से

SELECT `COLUMN_NAME` 
FROM `information_schema`.`COLUMNS` 
WHERE (`TABLE_SCHEMA` = 'dbName') 
    AND (`TABLE_NAME` = 'tableName') 
    AND (`COLUMN_KEY` = 'PRI'); 

SHOW KEYS FROM <table_name> WHERE Key_name = 'PRIMARY'; 

के बराबर है

0

पर @ जेक सुली-और जवाब @lukmdo आधार पर, उनके कोड का एक मर्ज बनाने, मैं निम्नलिखित स्निपेट के साथ समाप्त:

SELECT `COLUMN_NAME` 
FROM `information_schema`.`COLUMNS` 
WHERE (`TABLE_SCHEMA` = DATABASE()) 
AND (`TABLE_NAME` = '<tablename>') 
AND (`COLUMN_KEY` = 'PRI'); 

आशा है कि यह मदद कर सकता है किसी को

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