क्या MySQL के DESCRIBE [टेबल] के बराबर एक SQLite है?


442

मैं अभी SQLite सीखना शुरू कर रहा हूँ । यह अच्छा होगा कि MySQL की तरह एक टेबल के लिए विवरण देखें DESCRIBE [table]PRAGMA table_info [table]यह पर्याप्त नहीं है, क्योंकि इसमें केवल बुनियादी जानकारी है (उदाहरण के लिए, यह नहीं दिखाता है कि कोई कॉलम किसी प्रकार का क्षेत्र है या नहीं)। क्या SQLite के पास ऐसा करने का कोई तरीका है?

जवाबों:


560

SQLite कमांड लाइन उपयोगिता एक है .schema TABLENAMEआदेश है कि पता चलता है कि आप बयान पैदा करते हैं।


65
आप बिना तालिका के ".schema" का उपयोग कर सकते हैं और यह आपको उन सभी को दिखाएगा।
दान बेनामी

43
बयान के अंत में अर्ध-बृहदान्त्र को छोड़ने के लिए मत भूलना
आरटीएफ

10
अर्ध-उपनिवेश की आवश्यकता नहीं है
साइमन

40
@Simon एक अर्ध-बृहदान्त्र कमांड को चुपचाप विफल करने का कारण होगा ।
djeikyb

4
@djeikyb। क्या इसे बग नहीं माना जाना चाहिए?
माकन तैयबी

292
PRAGMA table_info([tablename]);

19
यह .schema tablenameमेरे मुकाबले MySQL के वर्णन के बराबर लगता है।
tybro0103

2
हां। इसने मेरे लिए काम किया। .schema TABLENAME ने नहीं किया। .schema अकेले, हालांकि, आप सभी को बयान बनाते हैं, लेकिन PRAGMA से परिणाम बहुत अधिक उपयोगी है अगर मैं सिर्फ एक तालिका को देखना चाहता हूं।
देव कंचन Dev

15
ऐसा लगता है कि यह स्वीकृत उत्तर होना चाहिए क्योंकि यह कमांड लाइन इंटरफेस पर निर्भर होने के बजाय क्वेरी के माध्यम से काम करता है। मुझ से +1।
एकोई एमईएक्सएक्स

परिशिष्ट: केवल एक चीज जो मैं देख रहा हूं, वह यह है कि जब मैं INTEGER PRIMARY KEY के साथ एक तालिका बनाता हूं, तो यह केवल मुख्य कुंजी का उत्पादन नहीं करता है।
एकोई एमईएक्सएक्स

3
@AkoiMeexx: मेरे मूल प्रश्न से: " PRAGMA table_info [table]यह काफी अच्छा नहीं है, क्योंकि इसमें केवल बुनियादी जानकारी है (उदाहरण के लिए, यह नहीं दिखाता है कि कोई कॉलम किसी प्रकार का क्षेत्र है या नहीं)।"
मैथ्यू

116

क्या आप एक तालिका उत्पन्न करने के लिए प्रयुक्त SQL की तलाश कर रहे हैं? उसके लिए, आप कर सकते हैंsqlite_master तालिका क्वेरी :

sqlite> CREATE TABLE foo (bar INT, quux TEXT);
sqlite> SELECT * FROM sqlite_master;
table|foo|foo|2|CREATE TABLE foo (bar INT, quux TEXT)
sqlite> SELECT sql FROM sqlite_master WHERE name = 'foo';
CREATE TABLE foo (bar INT, quux TEXT)

क्या इस और इसमें कोई अंतर है .schema foo?
मैथ्यू

15
@ मैथ्यू: .schemaकेवल एक कमांड लाइन से उपयोग किया जा सकता है; उपरोक्त आदेशों को लाइब्रेरी (पायथन, सी #, आदि) के माध्यम से एक क्वेरी के रूप में चलाया जा सकता है।
मार्क रुशकॉफ

@MarkRushakoff लेकिन परिणाम समान है?
डीवीबी

2
WebSql को डीबग करते समय क्रोम देव टूल्स में +1 "SELECT * FROM sqlite_master" काम करता है
contactmatt


6

यह बताने के लिए कि लोग कुछ टिप्पणियों से दूसरे उत्तरों के प्रति गुमराह हैं:

  1. तो .schemaया query from sqlite_masterकिसी भी उत्पादन देता है नहीं है, यह एक गैर-मौजूद इंगित करता है tablename, उदाहरण के लिए यह भी एक कारण हो सकता है ;के लिए अंत में सेमीकोलन .schema, .tables, ... या सिर्फ इसलिए कि तालिका वास्तव में मौजूद नहीं। यह .schemaबस काम नहीं करता है बहुत संभावना नहीं है और तब एक बग रिपोर्ट sqlite परियोजना में दायर की जानी चाहिए।

… .केम का उपयोग केवल एक कमांड लाइन से किया जा सकता है; उपरोक्त आदेश> एक पुस्तकालय (पायथन, सी #, आदि) के माध्यम से एक क्वेरी के रूप में चलाया जा सकता है। - मार्क रुशकॉफ जुलाई 25 '10 21:09 पर

  1. 'केवल एक कमांड लाइन से इस्तेमाल किया जा सकता है' लोगों को गुमराह कर सकता है। लगभग किसी भी (हर संभावना?) प्रोग्रामिंग भाषा अन्य कार्यक्रमों / आदेशों को कॉल कर सकती है। इसलिए उद्धृत टिप्पणी अशुभ है इस मामले में एक अन्य कार्यक्रम बुला, के रूप में sqlite, अधिक से अधिक है कि भाषा एक प्रदान करता है समर्थित होने की संभावना है wrapper/ libraryहर कार्यक्रम के लिए (जो न केवल बहुत बाहर कार्यक्रमों की जनता की प्रकृति द्वारा अपूर्णता की संभावना है वहाँ , लेकिन यह भी काउंटर एक्टिंग single-source principle, जटिल maintenance, दुनिया में डेटा की अराजकता को आगे बढ़ाने) है।

1
किसी भी SQL डेटाबेस से डेटा प्राप्त करने के लिए कोई भी प्रोग्राम लिखने वाले को डेटाबेस तक पहुँचने और उस पर क्वेरी करने के लिए अपनी प्रोग्रामिंग भाषा के लिए उपलब्ध उचित SQL ड्राइवरों का उपयोग करना चाहिए। किसी डेटाबेस तक पहुँचने का यह उपयुक्त तरीका है। मैं तदर्थ प्रश्नों को प्रदान करने के लिए डिज़ाइन किए गए कमांड-लाइन प्रोग्राम को हैक करने की कभी भी सिफारिश नहीं करूंगा। आपके सुझाव पर गहरी गलती है। तदर्थ प्रश्नों के लिए एक कमांड-लाइन प्रोग्राम डेटाबेस पर प्रश्नों को चलाने के लिए प्रोग्राम कोड के लिए सबसे उपयुक्त नहीं है। SQL ड्राइवरों का उपयोग करना मुख्य रूप से 'जटिल रखरखाव' नहीं है - यह सबसे अच्छा अभ्यास है।
Medlock Perlman

मैं मानता हूं कि यह कोई बुरा नहीं है, यह पुस्तकालयों के समान है। यही कारण है कि लिनक्स | बीएसडी डिस्ट्रो शिप पैकेज मैनेजर। और क्यों 0install cross platform PM है। मेरा कहना सिर्फ यह स्पष्ट करना था कि सभी कार्यक्रमों के लिए रैपर की जरूरत नहीं है। इसका हर बार मतलब नहीं होता। इस मामले में (DB हैंडलिंग) बेशक यह एक आवरण का उपयोग करने के लिए एक बुरा विचार नहीं है।
राडागस्त

1

यदि आप एक ग्राफिकल टूल का उपयोग कर रहे हैं। यह आपको तालिका नाम के ठीक बगल में स्कीमा दिखाता है। Sqlite के लिए DB Browser के मामले में, डेटाबेस को खोलने के लिए (ऊपरी दाएं कोने) पर क्लिक करें, नेविगेट करें और अपना डेटाबेस खोलें, आपको नीचे दी गई जानकारी तालिका में दिखाई देगी।

यहां छवि विवरण दर्ज करें

रेकॉर्ड / टेबल_नाम पर राइट क्लिक करें, कॉपी क्रिएट स्टेटमेंट पर क्लिक करें और वहां आपके पास है।

आशा है कि इसने कुछ शुरुआती लोगों की मदद की जो कमांडलाइन के साथ काम करने में विफल रहे।

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