¿Existe un SQLite equivalente a DESCRIBE [tabla] de MySQL?

442

Estoy empezando a aprender SQLite . Sería bueno poder ver los detalles de una tabla, como MySQL DESCRIBE [table]. PRAGMA table_info [table]no es lo suficientemente bueno, ya que solo tiene información básica (por ejemplo, no muestra si una columna es un campo de algún tipo o no). ¿SQLite tiene una manera de hacer esto?

Mateo
fuente

Respuestas:

560

La utilidad de línea de comandos SQLite tiene un .schema TABLENAMEcomando que le muestra las instrucciones de creación.

Ned Batchelder
fuente
65
Puedes usar ".schema" sin una tabla y te mostrará todos ellos.
Dan Benamy
43
No se olvide de dejar el punto y coma al final de la declaración
RTF
10
No se requiere un punto y coma
Simon
40
@Simon un punto y coma hará que el comando falle silenciosamente .
djeikyb
44
@djeikyb. ¿No debería considerarse esto un error?
Makan Tayebi
292
PRAGMA table_info([tablename]);
Strater
fuente
19
Esto parece más equivalente a la descripción de MySQL que .schema tablenamea mí.
tybro0103
2
Sí. Esto funcionó para mí. .schema TABLENAME no lo hizo. .schema solo, sin embargo, muestra todas las declaraciones de creación, pero el resultado de PRAGMA es mucho más útil si solo quiero ver una tabla.
Dev Kanchen
15
Parece que debería ser la respuesta aceptada, ya que funciona mediante consultas en lugar de depender de una interfaz de línea de comandos. +1 de mi parte
Akoi Meexx
Anexo: Lo único que noto es que no genera PRIMARY KEY cuando creo una tabla con INTEGER PRIMARY KEY, solo INTEGER.
Akoi Meexx
3
@AkoiMeexx: De mi pregunta original: " PRAGMA table_info [table]no es lo suficientemente bueno, ya que solo tiene información básica (por ejemplo, no muestra si una columna es un campo de algún tipo o no)".
Mateo
116

¿Está buscando el SQL utilizado para generar una tabla? Para eso, puede consultar la sqlite_mastertabla :

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)
Mark Rushakoff
fuente
¿Hay alguna diferencia entre esto y .schema foo?
Mateo
15
@Matthew: .schemasolo se puede usar desde una línea de comando; Los comandos anteriores se pueden ejecutar como una consulta a través de una biblioteca (Python, C #, etc.).
Mark Rushakoff
@MarkRushakoff ¿Pero el resultado es el mismo?
dvb
2
1 "SELECT * FROM sqlite_master" trabaja en cromo herramientas dev cuando la depuración WebSQL
contactmatt
52

Para ver todas las tablas:

.tables

Para ver una tabla en particular:

.schema [tablename]
Ross Snyder
fuente
6

Para evitar que las personas se confundan con algunos de los comentarios a las otras respuestas:

  1. Si .schemao query from sqlite_masterno da ninguna salida, que indica una inexistente tablename, por ejemplo, esto también puede ser causada por un ;punto y coma al final de .schema, .tables, ... o simplemente porque la mesa en realidad no existe. Eso .schemasimplemente no funciona es muy poco probable y luego se debe presentar un informe de error en el proyecto sqlite.

... .schema solo se puede usar desde una línea de comandos; los comandos anteriores> se pueden ejecutar como una consulta a través de una biblioteca (Python, C #, etc.). - Mark Rushakoff Jul 25 '10 a las 21:09

  1. 'solo se puede usar desde una línea de comando' puede confundir a las personas. Casi cualquier lenguaje de programación (¿probablemente todos?) Puede llamar a otros programas / comandos. Por lo tanto, el comentario citado es desafortunado ya que llamar a otro programa, en este caso sqlite, es más probable que sea compatible que el lenguaje proporciona un wrapper/ librarypara cada programa (que no solo es propenso a ser incompleto por la naturaleza misma de las masas de programas existentes) , pero también está actuando en contra single-source principle, complicando maintenance, fomentando el caos de datos en el mundo).
Radagast
fuente
1
Cualquiera que escriba un programa para recuperar datos de cualquier base de datos SQL debe usar los controladores SQL adecuados disponibles para su lenguaje de programación para acceder a la base de datos y realizar consultas en ella. Esa es la forma adecuada de acceder a una base de datos. Nunca recomendaría hackear un programa de línea de comandos diseñado para proporcionar consultas ad-hoc. Su sugerencia está profundamente equivocada. Un programa de línea de comandos para consultas ad-hoc NO ES CIERTAMENTE el punto de acceso más apropiado para que el código del programa ejecute consultas en una base de datos. Ciertamente, el uso de controladores SQL NO 'complica el mantenimiento': es la mejor práctica.
Medlock Perlman
Estoy de acuerdo en que no está mal, es similar a las bibliotecas. Es por eso que Linux | BSD distribuye gestores de paquetes. Y por qué hay 0install multiplataforma PM. Mi punto era solo aclarar que no todos los programas necesitan envoltorios. No tiene sentido cada vez. En este caso (manejo de DB), por supuesto, no es una mala idea usar un contenedor.
Radagast el
1

Si estás usando una herramienta gráfica. Le muestra el esquema justo al lado del nombre de la tabla. En el caso de DB Browser For Sqlite , haga clic para abrir la base de datos (esquina superior derecha), navegue y abra su base de datos, verá la información que se muestra en la tabla a continuación.

ingrese la descripción de la imagen aquí

haga clic derecho en el registro / nombre_tabla, haga clic en copiar crear declaración y ahí lo tiene.

Espero que haya ayudado a algunos principiantes que no pudieron trabajar con la línea de comandos.

Mujeeb Ishaque
fuente