¿Cuál es la sintaxis para especificar una clave primaria en más de 1 columna en SQLITE?
sqlite
primary-key
ddl
composite-primary-key
Bogdan Gavril MSFT
fuente
fuente
Respuestas:
De acuerdo con la documentación , es
fuente
fuente
NULL
está permitido en claves primarias. Esta respuesta enfatiza que si desea un comportamiento más estándar, debe agregarloNOT NULL
usted mismo. Mi respuesta es solo la sintaxis muy básica para una clave primaria de varias columnas.Si. Pero recuerde que dicha clave primaria permite
NULL
valores en ambas columnas varias veces.Crea una tabla como tal:
Ahora esto funciona sin previo aviso:
fuente
NULL
?Básico :
Si sus columnas son claves foráneas de otras tablas (caso común):
fuente
Los campos de clave primaria deben declararse como no nulos (esto no es estándar ya que la definición de una clave primaria es que debe ser única y no nula). Pero a continuación se muestra una buena práctica para todas las claves primarias de varias columnas en cualquier DBMS.
fuente
Desde la versión 3.8.2 de SQLite, una alternativa a las especificaciones explícitas NOT NULL es la especificación "SIN ROWID": [ 1 ]
Las tablas "SIN ROWID" tienen ventajas potenciales de eficiencia, por lo que una alternativa menos detallada a considerar es:
Por ejemplo, en el indicador sqlite3:
sqlite> insert into t values(1,null,3); Error: NOT NULL constraint failed: t.c2
fuente
WITHOUT ROWID
tiene implicaciones adicionales, y no debe usarse como una alternativa a escribirNOT NULL
junto a su clave principal.De otra manera, también puede hacer que la clave principal de dos columnas
unique
y la clave de incremento automáticoprimary
. Justo así: https://stackoverflow.com/a/6157337fuente
PRIMARY KEY (id, name)
no funciono para mi Agregar una restricción hizo el trabajo en su lugar.CREATE TABLE IF NOT EXISTS customer (id INTEGER, name TEXT, user INTEGER, CONSTRAINT PK_CUSTOMER PRIMARY KEY (user, id))
fuente
El siguiente código crea una tabla con 2 columnas como clave principal en SQLite.
SOLUCIÓN:
fuente