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:
-
UPDATEnombre_tabla nombre_columna = valor [, nombre_columna = valor ... ] [ condición ]SETWHERE
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
- Ver Problema de Halloween . Es posible que ciertos tipos de
UPDATEdeclaraciones se conviertan en un bucle infinito cuando laWHEREcláusula y una o másSETcláusulas pueden utilizar un índice entrelazado .