Puedo encontrar "gráficos" de sintaxis en esto en el sitio web de SQLite, pero no hay ejemplos y mi código falla. Tengo otras tablas con restricciones únicas en una sola columna, pero quiero agregar una restricción a la tabla en dos columnas. Esto es lo que tengo que está causando una SQLiteException con el mensaje "error de sintaxis".
CREATE TABLE name (column defs)
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE
Estoy haciendo esto basado en lo siguiente:
Para ser claros, la documentación en el enlace que proporcioné dice que CONTSTRAINT name
debería venir antes de mi definición de restricción.
Sin embargo, algo que puede conducir a la solución es que lo que sigue a mis definiciones de columna entre paréntesis es de lo que se queja el depurador.
Si pongo
...last_column_name last_col_datatype) CONSTRAINT ...
el error está cerca de "CONSTRAINT": error de sintaxis
Si pongo
...last_column_name last_col_datatype) UNIQUE ...
el error está cerca de "ÚNICO": error de sintaxis
Respuestas:
Ponga la declaración ÚNICA dentro de la sección de definición de columna; ejemplo de trabajo:
fuente
ON CONFLICT IGNORE
(no he intentado reemplazar aún) con más de 2 columnas, pero no veo que cumpla con la restricción única, solo agrega alegremente los duplicados.ON CONFLICT REPLACE
no sea lo que desea: elimina las filas preexistentes para permitir que se inserte la nueva fila. Normalmente, me gustaría ABORTAR o ROLLBACK la violación de restricción. Cláusula SQLite EN CONFLICTOBueno, su sintaxis no coincide con el enlace que incluyó, que especifica:
fuente
Tenga cuidado al definir la tabla para obtener diferentes resultados al insertar. Considera lo siguiente
Si bien el efecto de inserción / actualización es el mismo, los
id
cambios se basan en el tipo de definición de la tabla (vea la segunda tabla donde ahora tiene 'Alice'id = 4
; la primera tabla está haciendo más de lo que espero que haga, mantenga la LLAVE PRIMARIA igual) ) Tenga en cuenta este efecto.fuente
Si ya tiene una tabla y no puede / no desea volver a crearla por cualquier razón, use índices :
fuente