tutorial index example descargar datos create crear comandos sqlite

sqlite - index - ionic database example



¿Cómo puedo averiguar si un índice SQLite es único?(Con SQL) (4)

Quiero averiguar, con una consulta SQL, si un índice es ÚNICO o no. Estoy usando SQLite 3.

He intentado dos enfoques:

SELECT * FROM sqlite_master WHERE name = ''sqlite_autoindex_user_1''

Esto devuelve información sobre el índice ("tipo", "nombre", "tbl_name", "rootpage" y "sql"). Tenga en cuenta que la columna sql está vacía cuando SQLite crea automáticamente el índice.

PRAGMA index_info(sqlite_autoindex_user_1);

Esto devuelve las columnas en el índice ("seqno", "cid" y "nombre").

¿Cualquier otra sugerencia?

Editar: el ejemplo anterior es para un índice generado automáticamente, pero mi pregunta es acerca de los índices en general. Por ejemplo, puedo crear un índice con "CREATE UNIQUE INDEX index1 ON visit (user, date)". Parece que ningún comando SQL mostrará si mi nuevo índice es ÚNICO o no.


puede crear mediante programación una instrucción de selección para ver si alguna tupla apunta a más de una fila. Si recuperas tres columnas, foo, bar y baz, crea la siguiente consulta

select count(*) from t group by foo, bar, baz having count(*) > 1

Si eso devuelve cualquier fila, su índice no es único, ya que más de una fila se asigna a la tupla dada. Si sqlite3 es compatible con tablas derivadas (aún no he tenido la necesidad, por lo que no sé de improviso), puede hacer que esto sea aún más sucinto:

select count(*) from ( select count(*) from t group by foo, bar, baz having count(*) > 1 )

Esto devolverá un conjunto de resultados de una sola fila, que denota la cantidad de conjuntos de tuplas duplicados. Si es positivo, su índice no es único.


Como nadie ha encontrado una buena respuesta, creo que la mejor solución es esta:

  • Si el índice comienza con "sqlite_autoindex", es un índice generado automáticamente para una única columna UNIQUE
  • De lo contrario, busque la palabra clave UNIQUE en la columna sql en la tabla sqlite_master, con algo como esto:

    SELECCIONAR * FROM sqlite_master WHERE type = ''index'' AND sql LIKE ''% UNIQUE%''


PRAGMA INDEX_LIST(''table_name'');

Devuelve una tabla con 3 columnas:

  1. seq ID numérico único del índice
  2. name Nombre del índice
  3. Indicador unique Unicidad (distinto de cero si el índice UNIQUE )

A continuación, simplemente recorra las filas resultantes hasta que vea el nombre del índice que desea consultar (desafortunadamente no puede tener una cláusula WHERE en una instrucción PRAGMA ).


Estás cerca:

1) Si el índice comienza con "sqlite_autoindex" , es un índice generado automáticamente para la clave principal. Sin embargo, esto estará en las tablas sqlite_master o sqlite_temp_master dependiendo de si la tabla que se indexa es temporal.

2) Debe tener cuidado con los nombres y columnas de la tabla que contienen la subcadena unique , por lo que desea usar:

SELECT * FROM sqlite_master WHERE type = ''index'' AND sql LIKE ''CREATE UNIQUE INDEX%''

Consulte la documentación del sitio web de sqlite en Crear índice