sqlite.h


UPDATE

Sintaxis UPDATE
UPDATE

Nombre de tabla con calificativos:

Nombre de tabla con calificativos
Nombre de tabla con calificativos

Una sentencia UPDATE se usa para modificar un subconjunto de los valores almacenados en cero o más filas de una tabla de una base de datos identificada por el "nombre de tabla con calificativos" especificada como parte de la sentencia UPDATE.

Si la sentencia UPDATE no tiene una cláusula WHERE, todas las filas de la tabla serán modificadas por el UPDATE. En otro caso, el UPDATE afecta sólo a aquellas filas para las que el resultado de la evaluación como booleano de la expresión de la cláusula WHERE resulte verdadera. No se considera un error si la cláusula WHERE no se evalúa como verdadera para ninguna fila de la tabla - tan sólo significa que la sentencia UPDATE afecta a cero filas.

Las modificaciones hechas a cada fila afectada por la sentencia UPDATE se determinan mediante la lista de asignaciones que siguen a la palabra clave SET. Cada asignación especifica un nombre de columna a la izquierda del signo igual y una expresión escalar a la derecha. Para cada fila afectada, a la columna indicada se le asigna el valor encontrado por la evaluación de la expresión escalar correspondiente. Si aparece un nombre de columna simple más de una vez en la lista de expresiones de asignación, todas menos la más a la derecha son ignoradas. Las columnas que no aparecen en la lista de asignaciones permanecen sin modificar. Las expresiones escalares se pueden referir a columnas de la fila que se está modificando. En ese caso todas las expresiones escalares se evalúan antes de que se haga ninguna asignación.

La cláusula opcional de conflicto permite al usuario indicar un algoritmo de resolución de conflictos especifico que se usara durante esta sentencia UPDATE. Consultar la sección ON CONFLICT para obtener información adicional.

Restricciones en sentencias UPDATE dentro de CREATE TRIGGER

Las siguientes restricciones adicionales a la sintaxis se aplican a sentencias UPDATE dentro del cuerpo de una sentencia CREATE TRIGGER.

  • El nombre-tabla especificado como parte de una sentencia UPDATE dentro del cuerpo de un disparador debe estar sin calificar. En otras palabras, el prefijo nombre-basedatos. en el nombre de tabla del UPDATE no está permitido dentro de disparadores. A menos que la tabla la que está asociado el disparador esté en la base de datos TEMP, la tabla a actualizar por el disparador debe residir en la misma base de datos que él. Si la tabla a la que está asociada el disparador está en la base de datos TEMP, entonces el nombre de la tabla sin calificar que se va a actualizar se resuelve del mismo modo que si se tratara de una sentencia de nivel superior (buscando primero en la base de datos TEMP, después en la base de datos principal, y a continuación en cualquier otra base de datos en el orden en que fueron añadidas).
  • Las cláusulas INDEXED BY y NOT INDEXED no están permitidas en sentencias UPDATE en el interior de disparadores.
  • Las cláusulas LIMIT y ORDER BY para UPDATE no están soportadas dentro de disparadores, independientemente de las opciones de compilación usadas para construir SQLite.

Cláusulas opcionales LIMIT y ORDER BY

Si SQLite es construido con la opción de compilación SQLITE_ENABLE_UPDATE_DELETE_LIMIT entonces la sintaxis de la sentencia UPDATE se extiende con las cláusulas opcionales ORDER BY y LIMIT como sigue:

Actualización limitada:

Actualización limitada
Actualización limitada

Si una sentencia UPDATE tiene una cláusula LIMIT, el número máximo de filas que podrán ser actualizadas se encuentra mediante la evaluación de la expresión que la acompaña, y convirtiéndola a un valor entero. Un valor negativo se interpreta como "sin límite".

Si la expresión LIMIT se evalúa como un valor no negativo N y la sentencia UPDATE tiene la cláusula ORDER, entonces se ordenana todas las filas que serían actualizadas si no estuviese la cláusula LIMIT de acuerdo con la cláusula ORDER BY y las primeras N se actualizan. Si la sentencia UPDATE también tiene una cláusula LIMIT, entonces se evalúa de forma similar y se convierte a un entero. Si el resultado es un valor no negativo M, entonces las primeras M filas se saltan y las siguientes N se actualizan.

Si la sentencia UPDATE no tiene una cláusula ORDER BY, entondes todas las filas que se actualizarían en ausencia de la cláusula LIMIT se reúnen en un orden arbitrario abtes de aplicar las cláusulas LIMIT y OFFSET para determinar cuales serán actualizadas.

La cláusula ORDER BY de una sentencia UPDATE se usa sólo para determinar qué filas caen dentro del LIMIT. El orden en que las filas son modificadas es arbitrario y no está infuído por la cláusula ORDER BY.