Actualización (SQL) - Update (SQL)

Una instrucción UPDATE de SQL cambia los datos de uno o más registros en una tabla . Se pueden actualizar todas las filas o se puede elegir un subconjunto usando una condición .

La UPDATEdeclaración tiene la siguiente forma:

UPDATE nombre_tabla nombre_columna = valor [, nombre_columna = valor ... ] [ condición ]SET WHERE

Para UPDATEque tenga éxito, el usuario debe tener privilegios de manipulación de datos ( UPDATEprivilegio) en la tabla o columna y el valor actualizado no debe entrar en conflicto con todas las restricciones aplicables (como claves primarias , índices únicos, CHECKrestricciones y NOT NULLrestricciones).

En algunas bases de datos, como PostgreSQL , cuando hay una cláusula FROM , lo que esencialmente sucede es que la tabla de destino se une a las tablas mencionadas en la lista de origen, y cada fila de salida de la unión representa una operación de actualización para la tabla de destino. Al usar FROM, uno debe asegurarse de que la combinación produzca como máximo una fila de salida para cada fila que se va a modificar. En otras palabras, una fila de destino no debe unirse a más de una fila de las otras tablas. Si es así, solo se usará una de las filas de combinación para actualizar la fila de destino, pero cuál se usará no es fácilmente predecible.

Debido a esta indeterminación, hacer referencia a otras tablas solo dentro de las sub-selecciones es más seguro, aunque a menudo es más difícil de leer y más lento que usar una combinación.

MySQL no se ajusta al estándar ANSI.

Ejemplos

Establezca el valor de la columna C1 en la tabla T en 1, solo en aquellas filas donde el valor de la columna C2 es "a".

UPDATE T
   SET C1 = 1
 WHERE C2 = 'a'

En la tabla T , establezca el valor de la columna C1 en 9 y el valor de C3 en 4 para todas las filas para las que el valor de la columna C2 es "a".

UPDATE T
   SET C1 = 9,
       C3 = 4
 WHERE C2 = 'a'

Aumente el valor de la columna C1 en 1 si el valor de la columna C2 es "a".

UPDATE T
   SET C1 = C1 + 1
 WHERE C2 = 'a'

Anteponga el valor en la columna C1 con la cadena "texto" si el valor en la columna C2 es "a".

UPDATE T
   SET C1 = 'text' || C1
 WHERE C2 = 'a'

Establezca el valor de la columna C1 en la tabla T1 en 2, solo si el valor de la columna C2 se encuentra en la sublista de valores de la columna C3 en la tabla T2 y la columna C4 es igual a 0.

UPDATE T1
   SET C1 = 2
 WHERE C2 IN ( SELECT C3
                 FROM T2
                WHERE C4 = 0)

También se pueden actualizar varias columnas en una sola declaración de actualización:

UPDATE T
   SET C1 = 1,
       C2 = 2

También son posibles condiciones complejas y JOIN:

UPDATE T
   SET A = 1
 WHERE C1 = 1
   AND C2 = 2

Algunas bases de datos permiten el uso no estándar de la cláusula FROM:

UPDATE a
   SET a.[updated_column] = updatevalue
  FROM articles a
       JOIN classification c
         ON a.articleID = c.articleID
 WHERE c.classID = 1

O en los sistemas Oracle (asumiendo que hay un índice en la clasificación.articleID):

UPDATE
(
  SELECT *
    FROM articles
    JOIN classification
      ON articles.articleID = classification.articleID
   WHERE classification.classID = 1
)
SET [updated_column] = updatevalue

Con nombre largo de tabla:

UPDATE MyMainTable AS a
SET a.LName = Smith
WHERE a.PeopleID = 1235

Problemas potenciales

Referencias