Чи існує SQLite, еквівалентна DESCRIBE MySQL [таблиця]?


443

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

Відповіді:


561

SQLite утиліта командного рядка , має .schema TABLENAMEкоманду , яка показує вам створювати звіти.


66
Ви можете використовувати ".schema" без таблиці, і вона покаже вам їх усі.
Dan Benamy

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

10
Напівколону не потрібно
Саймон,

40
@Simon напівкрапка призведе до того, що команда мовчки вийде з ладу .
джейкіб

4
@djeikyb. чи не слід це вважати помилкою?
Makan Tayebi

292
PRAGMA table_info([tablename]);

19
Це здається більш еквівалентним опису MySQL, ніж .schema tablenameмені.
tybro0103

2
Так. Це працювало для мене. .schema TABLENAME не став. Однак одна лише схема. показує вам усі заяви про створення, але результат від PRAGMA набагато корисніший, якщо я просто хочу переглянути одну таблицю.
Dev Kanchen

15
Це здається, що це має бути прийнятою відповіддю, оскільки він працює за допомогою запиту, а не залежно від інтерфейсу командного рядка. +1 від мене.
Akoi Meexx

Додаток: Єдине, що я зауважую, це те, що він не виводить ПЕРВИЧНИЙ КЛЮЧ, коли я створю таблицю з 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" працює у інструментах хромованого розробника при налагодженні WebSql
contactmatt


6

Щоб люди не ввели в оману деякими коментарями до інших відповідей:

  1. Якщо .schemaчи query from sqlite_masterне дає ніяких вихідних даних , це вказує на неіснуючий tablename, наприклад , це також може бути викликано ;точкою з коми в кінці для .schema, .tables... Або просто тому , що стіл на насправді не існує. Це .schemaпросто не працює, малоймовірно, і тоді звіт про помилку слід подати на проект sqlite.

... .schema можна використовувати лише з командного рядка; вищезазначені команди> можна запустити як запит через бібліотеку (Python, C # тощо). - Марк Рушакофф 25 липня '10 о 21:09

  1. "може використовуватися лише з командного рядка" може ввести людей в оману. Практично будь-яка (ймовірно, кожна?) Мова програмування може викликати інші програми / команди. Тому цитований коментар не пощастило, як викликати іншу програму, в цьому випадку sqlite, швидше за все, підтримка, ніж те, що мова надає wrapper/ libraryдля кожної програми (що не тільки схильне до неповноти самою природою маси програм там , але також протидіє дії single-source principle, ускладнює maintenance, поглиблюючи хаос даних у світі).

1
Кожен, хто пише програму для отримання даних з будь-якої бази даних SQL, повинен використовувати належні драйвери SQL, доступні для своєї мови програмування, для доступу до бази даних та виконання запитів по ній. Це відповідний спосіб отримати доступ до бази даних. Я ніколи не рекомендував би зламати програму командного рядка, розроблену для надання спеціальних запитів. Ваша пропозиція глибоко помиляється. Програма командного рядка для спеціальних запитів ВІДПОВІДНО НЕ є найбільш підходящою точкою доступу для програмного коду для запуску запитів у базі даних. Використання драйверів SQL НАРОДНО НЕ "ускладнює обслуговування" - це найкраща практика.
Медлок Перлман

Я згоден, це не погано, це схоже на бібліотеки. Ось чому Linux | BSD дистрибуцію менеджерів пакетних пакетів. І чому існує 0встановлення крос-платформи PM. Моя думка полягала лише в тому, щоб уточнити, що не всі програми потребують обгортки. Це не має сенсу щоразу. У цьому випадку (обробка БД), звичайно, не погана ідея використовувати обгортку.
Радагаст

1

Якщо ви використовуєте графічний інструмент. Він показує вам схему поруч із назвою таблиці. У випадку браузера DB для Sqlite натисніть, щоб відкрити базу даних (верхній правий кут), перейдіть та відкрийте базу даних, ви побачите інформацію, заповнену в таблиці, як показано нижче.

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

клацніть правою кнопкою миші на запис / ім'я_таблиці, натисніть на копію створити оператор і там у вас є.

Сподіваюсь, це допомогло початківцю, який не зміг працювати з командним рядком.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.