Nunca he visto la sintaxis INSERT OR REPLACE INTO names (id, name) VALUES (1, "John")
utilizada en SQL anteriormente, y me preguntaba por qué es mejor que UPDATE names SET name = "John" WHERE id = 1
. ¿Hay alguna buena razón para usar una sobre la otra? ¿Es esta sintaxis específica para SQLite?SQLite "INSERT O REPLACE INTO" frente a "UPDATE ... WHERE"
Respuesta
ACTUALIZACIÓN no hará nada si la fila no existe.
Donde como INSERTAR O REEMPLAZAR insertaría si la fila no existe, o reemplaza los valores si lo hace.
La consulta de inserción o reemplazo insertaría un nuevo registro si id = 1 aún no existe.
La consulta de actualización solo superará a id = 1 si ya existe, no crearía un nuevo registro si no existiera.
No creo que esto sea correcto. La documentación de sqlite (a partir del 1 de julio de 2010, versión 3.6.23.1) dice que 'REPLACE es un alias para INSERT OR REPLACE' y, por lo tanto, tendría el mismo comportamiento. En mi experiencia, este es el caso ... – fostandy
Creo que hará un delete-> insert si encuentra un conflicto – StErMi
@fostandy REPLACE es de hecho un alias para INSERTAR O REEMPLAZAR, pero la respuesta de la que estás hablando está hablando ACTUALIZAR (porque de eso se trataba la pregunta). – hatfinch
Actualmente estoy trabajando en una declaración de este tipo y descubrí otro hecho al observar: INSERTAR O REEMPLAZAR reemplazará cualquier valor no proporcionado en la declaración. Por ejemplo, si su tabla contiene una columna "apellido" para la que no proporcionó un valor, INSERTAR O REEMPLAZAR anulará el "apellido" si es posible (las restricciones lo permiten) o si falla.
+1; para decirlo de otra manera: siempre especifique el _completo conjunto de valores_ debe tener la fila "actualizada" - no se conservan los valores existentes; el motivo de este comportamiento es que, de hecho, no es una operación * update * para una fila existente, sino una eliminación, seguida de una reinserción. – mklement0
REPLACE INTO table(column_list) VALUES(value_list);
es una forma más corta de
INSERT OR REPLACE INTO table(column_list) VALUES(value_list);
Para REEMPLAZAR para ejecutar correctamente la estructura de tabla debe tener filas únicas, ya sea una clave primaria simple o un índice único.
REEMPLAZAR borra, luego INSERTAS el registro y provocará que se ejecute un disparador INSERTAR si las tiene configuradas. Si tiene un disparador en INSERT, puede encontrar problemas.
Este es un trabajo en torno .. no se comprueba la velocidad ..
INSERT OR IGNORE INTO table (column_list) VALUES(value_list);
seguido por
UPDATE table SET field=value,field2=value WHERE uniqueid='uniquevalue'
Este método permite un reemplazo que se produzca sin causar un disparador.
- 1. SQLite "INSERT O REPLACE INTO" no funciona
- 2. Android SQLite INSERT o REPLACE
- 3. SQLite INSERT - ON DUPLICATE KEY UPDATE
- 4. INSERT vs INSERT INTO
- 5. INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE
- 6. SQLAlchemy - INSERT O REPLACE equivalente
- 7. INSERT INTO .. EN DUPLICADO KEY UPDATE por varios elementos,
- 8. PostgreSQL: INSERT INTO ... (SELECT * ...)
- 9. 'insert into' con array
- 10. MySQL INSERT INTO table VALUES ... vs INSERT INTO table SET
- 11. ¿Cómo automatizar un proceso INSERT INTO en SQLite?
- 12. INSERT INTO con subconsulta MySQL
- 13. Implementación SQL Server 2005 de MySQL REPLACE INTO?
- 14. SQL Server 'select * into' frente a 'insertar en ..seleccione *
- 15. UPDATE vs INSERT performance
- 16. Grant Select, Insert, Update to a Tablespace
- 17. sqlite - Cómo obtener INSERT O IGNORE para trabajar
- 18. SQLite Insertar o reemplazar Donde
- 19. INSERT INTO SET sintaxis en SQL Server
- 20. Índices SQL Server 2008 - ganancia de rendimiento en consultas frente a pérdida en INSERT/UPDATE
- 21. TSQL: ACTUALIZAR con INSERT INTO SELECT FROM
- 22. mensaje de error al utilizar INSERT INTO
- 23. Error de sintaxis con IF EXISTS UPDATE ELSE INSERT
- 24. Nomenclatura SQL: "Consulta" o "Comando" para INSERT/UPDATE/DELETE?
- 25. Combinación de INSERT INTO y WITH/CTE
- 26. INSERT INTO en una instrucción CASE
- 27. INSERT INTO SELECT - gran cantidad de registros
- 28. Mejorar INSERT INTO - DE SELECCIÓN, consultas SQL
- 29. MySQL INSERT o SELECCIONAR
- 30. Cómo hacer "INSERT INTO table1 (...) SELECT (...) FROM table2" en LINQ?
Gracias por la respuesta. ¿Es esto algo específico de SQLite? –
No estoy al tanto de este servidor inSql, aunque el servidor Sql ahora tiene un comando MERGE. Y rom de MS Access, tampoco he visto algo como esto. –
mysql tiene "reemplazar en". – fastmultiplication