Есть ли SQLite-эквивалент для MySQL DESCRIBE [таблица]?


443

Я только начал изучать SQLite . Было бы неплохо увидеть детали таблицы, как в MySQL DESCRIBE [table]. PRAGMA table_info [table]недостаточно хорош, поскольку содержит только основную информацию (например, он не показывает, является ли столбец каким-либо полем или нет). Есть ли у SQLite способ сделать это?

Ответы:


561

SQLite утилита командной строки , имеет .schema TABLENAMEкоманду , которая показывает вам создавать отчеты.


66
Вы можете использовать «.schema» без таблицы, и он покажет вам все из них.
Дэн Бенами

43
Не забудьте оставить точку с запятой в конце заявления
RTF

10
Точка с запятой не требуется
Simon

40
@ Симон точка с запятой заставит команду молча потерпеть неудачу .
djeikyb

4
@djeikyb. не должно ли это считаться ошибкой?
Макан Тайеби

292
PRAGMA table_info([tablename]);

19
Это кажется более эквивалентным описанию MySQL, чем .schema tablenameмне.
tybro0103

2
Ага. Это сработало для меня. .schema TABLENAME нет. Однако только .schema покажет вам все операторы create, но результат от PRAGMA будет гораздо полезнее, если я просто захочу взглянуть на одну таблицу.
Дев Канчен

15
Кажется, это должен быть принятый ответ, поскольку он работает через запросы, а не зависит от интерфейса командной строки. +1 от меня.
Akoi Meexx

Приложение: Единственное, что я замечаю, это то, что он не выводит PRIMARY KEY при создании таблицы с INTEGER PRIMARY KEY, просто INTEGER.
Akoi Meexx

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
@Matthew: .schemaможно использовать только из командной строки; Вышеуказанные команды могут быть выполнены как запрос через библиотеку (Python, C # и т. д.).
Марк Рушаков

@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 # и т. д.). - Марк Рушаков 25 июля 2010 года в 21:09

  1. «может использоваться только из командной строки» может ввести в заблуждение людей. Практически любой (вероятно, любой?) Язык программирования может вызывать другие программы / команды. Поэтому цитируемый комментарий неудачен, так как вызов другой программы, в этом случае sqlite, более вероятно будет поддерживаться, чем то, что язык обеспечивает wrapper/ libraryдля каждой программы (что не только подвержено незавершенности самой природой масс программ там). , но также противодействует single-source principle, усложняет maintenance, продвигая хаос данных в мире).

1
Любой, кто пишет программу для извлечения данных из любой базы данных SQL, должен использовать надлежащие драйверы SQL, доступные для их языка программирования, для доступа к базе данных и выполнения запросов к ней. Это подходящий способ доступа к базе данных. Я бы никогда не порекомендовал взломать программу командной строки, предназначенную для специальных запросов. Ваше предложение глубоко ошибочно. Программа командной строки для специальных запросов, безусловно, НЕ является наиболее подходящей точкой доступа для программного кода для выполнения запросов к базе данных. Использование драйверов SQL, безусловно, НЕ «усложняет обслуживание» - это лучшая практика.
Медлок Перлман

Я согласен, это не плохо, это похоже на библиотеки. Вот почему Linux | BSD распространяет диспетчеры пакетов. И почему там 0install кроссплатформенный PM. Я просто хотел уточнить, что не всем программам нужны обертки. Это не имеет смысла каждый раз. В этом случае (обработка БД), конечно, неплохо использовать обертку.
Радагаст

1

Если вы используете графический инструмент. Он показывает вам схему рядом с именем таблицы. В случае браузера БД Для Sqlite , нажмите, чтобы открыть базу данных (верхний правый угол), перейдите и откройте свою базу данных, вы увидите информацию, заполненную в таблице, как показано ниже.

введите описание изображения здесь

щелкните правой кнопкой мыши на запись / имя_таблицы, нажмите на копию создать заявление и там у вас есть.

Надеюсь, это помогло новичку, который не смог работать с командной строкой.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.