tipos real que long datos data acepta sql sqlite

real - sqlite variables



Diferencia entre INT PRIMARY KEY y INTEGER PRIMARY KEY SQLite (3)

ACTUALIZACIÓN: la columna ROWID de SQLite ahora es un entero de 64 bits :

En SQLite, una columna con el tipo INTEGER PRIMARY KEY es un alias para ROWID (excepto en las tablas WITHOUT ROWID) que siempre es un entero con signo de 64 bits.

Todo está explicado en la documentación de SQLite 3 :

2.0 La Llave Primaria INTEGER

Una excepción a la falta de tipificación de SQLite es una columna cuyo tipo es INTEGER PRIMARY KEY. (Y debe usar "INTEGER" y no "INT". Una columna de tipo INT PRIMARY KEY es sin tipo de escritura como cualquier otra.) INTEGER PRIMARY KEY las columnas deben contener un entero con signo de 32 bits. Cualquier intento de insertar datos no enteros dará como resultado un error.

Las columnas INTEGER PRIMARY KEY se pueden usar para implementar el equivalente de AUTOINCREMENT. Si intenta insertar un NULL en una columna INTEGER PRIMARY KEY, la columna se llenará con un número entero que es uno mayor que la clave más grande que ya se encuentra en la tabla. O si la clave más grande es 2147483647, entonces la columna se llenará con un entero aleatorio. De cualquier manera, a la columna INTEGER PRIMARY KEY se le asignará un número entero único. Puede recuperar este entero usando la función API sqlite_last_insert_rowid () o usando la función SQL last_insert_rowid () en una instrucción SELECT posterior.

¿Hay alguna diferencia entre INT PRIMARY KEY y INTEGER PRIMARY KEY cuando se define un esquema para una tabla? Cuando se usa la clave principal int, obtuve la cosa sqlite_autoindex generada; cuando la clave primaria entera, tengo la tabla sqlite_sequence generada. ¿cual es la diferencia? ¿Qué efectos secundarios pueden tener la primera y segunda variantes?


Sí, hay una diferencia: INTEGER es un caso especial en SQLite, cuando la base de datos no crea una clave principal separada, sino que reutiliza la columna ROWID . Cuando se usa INT (o cualquier otro tipo que "asigna" a INTEGER internamente) se crea una clave principal independiente.

Es por eso que ve sqlite_autoindex creado para la clave primaria INT , y ningún índice creado para el de tipo INTEGER : SQLite reutiliza una estructura de indexación integrada para la clave primaria entera, lo que hace que el autoindex no sea necesario.

Es por eso que la clave primaria INTEGER es más económica, tanto en términos de almacenamiento como en términos de rendimiento.

Vea este enlace para más detalles .


Solo para agregarlo ya implícito ya en las respuestas aquí. La columna INTEGER PRIMARY KEY que creó es simplemente un alias para ROWID o _ROWID_ u OID . Y si se AUTOINCREMENT palabra clave AUTOINCREMENT , cada nuevo registro insertado es un incremento de 1 del último ROWID y el último ROWID se mantiene en una tabla interna de sqlite llamada sqlite_sequence .

Ver enlace here y here

Por otro lado, si declara una columna como INT PRIMARY KEY sqlite crea un índice automático (por lo tanto, sqlite_autoindex ) para realizar un seguimiento del valor insertado en la clave principal para asegurarse de que sea único.