2010-05-06 28 views
25

Quiero insertar un registro en una tabla sqlite si no está insertado.SQLite Consulta para insertar un registro Si no existe

Digamos que tiene tres campos, pk nombre, dirección

quiero insertar nuevo disco con su nombre, si ese nombre no se añade preveously.

podemos hacer con esto en una sola consulta. Parece que es ligeramente diferente de las consultas SQL a veces.

Respuesta

11

¿Por qué no simplemente agregar un índice único en el nombre?

+0

CREATE TABLE usuarios ('pk' INTEGER PRIMARY KEY, 'nombre' VARCHAR (100), Integer 'count') ; Esta es mi tabla actual. ¿Cómo podría cambiarlo? En este momento tan sólo pudiera entender :( –

+0

sólo lo consiguió CREATE TABLE usuarios ('pk' INTEGER PRIMARY KEY, 'nombre' VARCHAR (100) UNIQUE, Integer 'count');. –

+5

Debido a lanzar excepciones no es la forma de manejar los problemas. Puede escribir una consulta para ejecutar rápido o puede ser flojo. – Dan

68

Sí, puede hacerlo con una sola consulta.

INSERTAR EN CONFLICTO IGNORE debe ayudarle a: http://www.sqlite.org/lang_conflict.html

Ponga una clave única del nombre, esto creará un conflicto cuando se intenta insertar un registro si el nombre ya existe.

El valor por defecto es ABORTAR, por lo que sin el IGNORE, el comando devolverá un error. Si no quieres eso, usa IGNORE.

+1

sqlite> INSERTAR EN usuarios VALORES (1, 'prueba', 0) EN CONFLICTO IGNORAR; Error SQL: cerca de "ON": error de sintaxis sqlite> sqlite> INSERTAR O IGNORAR usuarios VALORES (1, 'test', 0); Error de SQL: cerca de "usuarios": error de sintaxis sqlite> sqlite> INSERTAR EN usuarios VALORES (1, 'prueba', 0) O IGNORAR; Error de SQL: cerca de "O": error de sintaxis Podría darme un ejemplo. simplemente no podría usarlo con éxito. Quiero verificar el nombre que ya está en o agregar este nuevo registro si 'prueba' no está en la tabla –

+0

Esto ha resuelto el problema. Agregar ÚNICO al campo de nombre. Ahora obtengo un error SQL y datos no agregados. Usuarios de CREATE TABLE ('pk' INTEGER PRIMARY KEY, 'name' VARCHAR (100) UNIQUE, 'count' INTEGER); –

+16

INSERTAR O IGNORAR a los usuarios VALORES ... – Konerak

22

Si no puede hacer uso de un UNIQUE INDEX en combinación con INSERT INTO o INSERT OR IGNORE INTO, puede escribir una consulta como esta;

INSERT INTO table (column) 
SELECT value 
WHERE NOT EXISTS (SELECT 1 
        FROM table 
        WHERE column = value) 
Cuestiones relacionadas