มี SQLite เทียบเท่ากับ DESCRIBE ของ MySQL (ตาราง) หรือไม่?


443

ฉันเพียงแค่ได้รับการเรียนรู้เริ่มต้นSQLite มันจะดีเพื่อให้สามารถดูรายละเอียดของตารางเช่น DESCRIBE [table]MySQL PRAGMA table_info [table]ยังไม่ดีพอเนื่องจากมีเพียงข้อมูลพื้นฐาน (ตัวอย่างเช่นจะไม่แสดงว่าคอลัมน์เป็นเขตข้อมูลบางประเภทหรือไม่) SQLite มีวิธีทำเช่นนี้หรือไม่?

คำตอบ:


561

อรรถประโยชน์บรรทัดคำสั่ง SQLiteมี.schema TABLENAMEคำสั่งที่แสดงให้เห็นว่าคุณสร้างงบ


66
คุณสามารถใช้ ".schema" โดยไม่มีตารางและมันจะแสดงให้คุณเห็นทั้งหมด
Dan Benamy

43
อย่าลืมที่จะออกจากเซมิโคลอนในตอนท้ายของแถลงการณ์
RTF

10
ไม่จำเป็นต้องใช้เซมิโคลอน
Simon

40
@Simon กึ่งลำไส้ใหญ่จะทำให้คำสั่งที่จะเงียบล้มเหลว
djeikyb

4
@djeikyb นี่ไม่ควรถูกพิจารณาว่าเป็นบั๊กหรือ
Makan Tayebi

292
PRAGMA table_info([tablename]);

19
ดูเหมือนว่าจะเทียบเท่ากับคำอธิบายของ MySQL มากกว่า.schema tablenameฉัน
tybro0103

2
อ๋อ สิ่งนี้ใช้ได้สำหรับฉัน .schema TABLENAME ไม่ได้ . schema เพียงอย่างเดียว แต่จะแสดงข้อความสั่งการสร้างทั้งหมดให้คุณ แต่ผลลัพธ์จาก PRAGMA นั้นมีประโยชน์มากขึ้นถ้าฉันต้องการดูตารางเดียว
Dev Kanchen

15
ดูเหมือนว่าควรเป็นคำตอบที่ยอมรับได้เนื่องจากทำงานผ่านการสอบถามแทนที่จะต้องพึ่งพาอินเตอร์เฟสบรรทัดคำสั่ง +1 จากฉัน
Akoi Meexx

ภาคผนวก: สิ่งเดียวที่ฉันสังเกตเห็นคือมันไม่ได้ส่งออกคีย์หลักเมื่อฉันสร้างตารางที่มีคีย์หลัก INTEGER เพียง INTEGER
Akoi Meexx

3
@AkoiMeexx: จากคำถามเดิมของฉัน: " PRAGMA table_info [table]ไม่ดีพอเพราะมีเพียงข้อมูลพื้นฐาน (ตัวอย่างเช่นมันจะไม่แสดงว่าคอลัมน์เป็นเขตข้อมูลบางประเภทหรือไม่)"
Matthew

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
@ Matthew: .schemaสามารถใช้ได้จากบรรทัดคำสั่งเท่านั้น คำสั่งดังกล่าวสามารถเรียกใช้เป็นแบบสอบถามผ่านห้องสมุด (Python, C #, ฯลฯ )
Mark Rushakoff

@MarkRushakoff แต่ผลลัพธ์จะเหมือนกันหรือไม่
dvb

2
+1 "SELECT * FROM sqlite_master" ทำงานในเครื่องมือ Chrome dev เมื่อทำการดีบั๊ก WebSql
contactmatt


6

เพื่อป้องกันไม่ให้คนอื่นเข้าใจผิดโดยความเห็นบางข้อต่อคำตอบอื่น ๆ :

  1. หาก.schemaหรือquery from sqlite_masterไม่ได้ช่วยให้การส่งออกใด ๆ ก็บ่งชี้ว่าไม่มีอยู่จริงtablenameเช่นนี้อาจจะเกิดจากการ;อัฒภาคที่สิ้นสุดสำหรับ.schema, .tables... หรือเพียงเพราะตารางมันไม่อยู่ ที่.schemaไม่ทำงานไม่น่าเป็นไปได้มากแล้วรายงานข้อผิดพลาดควรยื่นที่โครงการ sqlite

... . schema สามารถใช้ได้จากบรรทัดคำสั่งเท่านั้น คำสั่งดังกล่าว> สามารถเรียกใช้เป็นแบบสอบถามผ่านห้องสมุด (Python, C #, ฯลฯ ) - Mark Rushakoff 25 ก.ค. 53 เวลา 21:09 น

  1. 'สามารถใช้งานได้จากบรรทัดคำสั่งเท่านั้น' อาจทำให้ผู้อื่นเข้าใจผิด เกือบทุกภาษา (น่าจะทุก ๆ ) ภาษาโปรแกรมสามารถเรียกโปรแกรม / คำสั่งอื่น ๆ ดังนั้นความคิดเห็นที่ยกมาจึงเป็นสิ่งที่โชคไม่ดีที่เรียกโปรแกรมอื่นในกรณีsqliteนี้มีแนวโน้มที่จะได้รับการสนับสนุนมากกว่าภาษาที่ให้wrapper/ libraryสำหรับทุกโปรแกรม (ซึ่งไม่เพียง แต่มีแนวโน้มที่จะไม่สมบูรณ์โดยธรรมชาติของฝูงโปรแกรมต่าง ๆ แต่ยังทำหน้าที่เคาน์เตอร์single-source principleแทรกซ้อนmaintenance, การเพิ่มขึ้นของความสับสนวุ่นวายของข้อมูลในโลก)

1
ใครก็ตามที่เขียนโปรแกรมเพื่อดึงข้อมูลจากฐานข้อมูล SQL ใด ๆ ควรใช้ไดรเวอร์ SQL ที่เหมาะสมสำหรับภาษาการเขียนโปรแกรมของพวกเขาสำหรับการเข้าถึงฐานข้อมูลและดำเนินการแบบสอบถามกับมัน นั่นเป็นวิธีที่เหมาะสมในการเข้าถึงฐานข้อมูล ฉันจะไม่แนะนำการแฮ็กโปรแกรมบรรทัดคำสั่งที่ออกแบบมาเพื่อให้คำสั่งเฉพาะกิจ คำแนะนำของคุณผิดพลาดอย่างลึกซึ้ง โปรแกรมบรรทัดคำสั่งสำหรับคิวรีแบบเฉพาะกิจนั้นไม่ได้เป็นจุดเชื่อมต่อที่เหมาะสมที่สุดสำหรับโค้ดโปรแกรมเพื่อรันคิวรีบนฐานข้อมูล การใช้ไดรเวอร์ SQL นั้นไม่ได้เป็น 'การบำรุงรักษาที่ซับซ้อน' อย่างแน่นอน - เป็นการปฏิบัติที่ดีที่สุด
Medlock Perlman

ฉันยอมรับว่ามันไม่เลวมันคล้ายกับห้องสมุด นี่คือเหตุผลที่ Linux | BSD distros จัดส่งตัวจัดการแพคเกจ และทำไมจึงมี 0 ติดตั้งข้ามแพลตฟอร์ม PM ประเด็นของฉันคือเพื่อชี้แจงว่าไม่ใช่ทุกโปรแกรมที่จำเป็นต้องใช้โปรแกรมเสริม มันไม่สมเหตุสมผลทุกครั้ง ในกรณีนี้ (การจัดการฐานข้อมูล) แน่นอนว่าไม่ควรใช้ wrapper
Radagast

1

หาก คุณใช้เครื่องมือกราฟิก มันจะแสดงสคีมาให้คุณถัดจากชื่อตาราง ในกรณีของเบราว์เซอร์ฐานข้อมูลสำหรับ Sqliteคลิกเพื่อเปิดฐานข้อมูล (มุมบนขวา) นำทางและเปิดฐานข้อมูลของคุณคุณจะเห็นข้อมูลที่บรรจุอยู่ในตารางด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

คลิกขวาที่บันทึก / table_name คลิกที่คัดลอกสร้างคำสั่งและคุณมีมัน

หวังว่าจะช่วยผู้เริ่มต้นบางคนที่ไม่สามารถทำงานกับ commandline ได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.