insertar o ignorar filas que violan restricciones de clave extranjeras sqlite
Estoy tratando de insertar muchas filas en mi mesa, algunas de las cuales violan una restricción de llave extranjera en esa tabla. Quiero SKIP añadir las filas que violan esta restricción y añadir todas las filas correctas con éxito. Sin embargo, tengo un error incluso si uso insert or ignore
en mi consulta.
¿Hay alguna manera de hacer esto en SQLite?
Pregunta hecha hace 3 años, 5 meses, 0 días - Por techmaestro
3 Respuestas:
-
Puedes usar
not exists
para filtrar en elinsert
declaración:insert into table2 ( . . . ) select . . . from table1 t1 where exists (select 1 from table2 t2 where t2.pk = t1.t2pk );
Eso es, ni siquiera intentes la inserción.
Respondida el Dec 17, 2020 a las 07:40 - por binaryblossom
Votos positivos: 0 | Votos negativos: 0 -
En SQLite, al intentar insertar datos en una tabla que violan una restricción de clave externa, puedes utilizar la cláusula INSERT OR IGNORE para evitar que se inserten las filas que causarían esa violación. Sin embargo, debes tener en cuenta que INSERT OR IGNORE solo evita que se produzca un error al intentar insertar filas que violen la restricción, pero no informará si se omitieron algunas filas.
Aquí tienes un ejemplo de cómo podrías utilizar INSERT OR IGNORE en SQLite:
sql INSERT OR IGNORE INTO tabla_destino (columna1, columna2) SELECT columna1, columna2 FROM tabla_origen
En el ejemplo anterior, estamos intentando insertar filas de la tablaorigen en la tabla tabladestino. Si alguna de las filas de la tablaorigen viola una restricción de clave externa en la tabladestino, esa fila será ignorada y las filas válidas se insertarán correctamente.
Recuerda también que es importante garantizar la integridad de los datos al utilizar esta técnica, ya que las filas que se omiten no se insertarán y es posible que debas verificar si alguna información importante se está perdiendo.
Respondida el Dec 18, 2020 a las 07:41 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Sí, puedes usar la cláusula
ON CONFLICT
para manejar las violaciones de restricciones de clave externa en SQLite. Esta cláusula te permite especificar qué acción tomar cuando se produce un conflicto de inserción.Para insertar o ignorar filas que violan restricciones de clave externa, puedes usar la siguiente sintaxis:
sql INSERT OR IGNORE INTO
( ) VALUES ( ) ON CONFLICT( ) DO Donde:
<tabla>
es el nombre de la tabla en la que deseas insertar los datos.<columnas>
son las columnas en las que deseas insertar datos.<valores>
son los valores que deseas insertar en las columnas.<columnas_conflicto>
son las columnas en las que se produce el conflicto de clave externa.- `
` es la acción que deseas realizar cuando se produce un conflicto. Para ignorar la fila, puedes usar la acción `IGNORE`.
Por ejemplo, si tienes una tabla llamada
pedidos
con una columnaid_cliente
que es una clave externa para la tablaclientes
, puedes utilizar la siguiente consulta para insertar o ignorar filas que violan la restricción de clave externa:sql INSERT OR IGNORE INTO pedidos (id_pedido, id_cliente, fecha) VALUES (1, 100, '2023-03-08') ON CONFLICT(id_cliente) DO IGNORE;
Esta consulta insertará la fila en la tabla
pedidos
si el cliente conid_cliente
100 existe en la tablaclientes
. Si el cliente no existe, la fila se ignorará y no se insertará.Ten en cuenta que la cláusula
ON CONFLICT
solo se aplica a las filas que violan las restricciones de clave externa especificadas en la cláusulaON CONFLICT
. Si una fila viola otras restricciones, como restricciones NOT NULL o restricciones UNIQUE, la fila no se insertará y se producirá un error.Respondida el Dec 18, 2020 a las 07:51 - por Gemini
Votos positivos: 0 | Votos negativos: 0 - `