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 UPDATE
declaración tiene la siguiente forma: [1]
UPDATE
nombre_tabla nombre_columna = valor [, nombre_columna = valor ... ] [ condición ]SET
WHERE
Para UPDATE
que tenga éxito, el usuario debe tener privilegios de manipulación de datos ( UPDATE
privilegio) en la tabla o columna y el valor actualizado no debe entrar en conflicto con todas las restricciones aplicables (como claves primarias , índices únicos, CHECK
restricciones y NOT NULL
restricciones).
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. [2]
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. [3]
Ejemplos de
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".
ACTUALIZAR T SET C1 = 1 DONDE 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".
ACTUALIZAR T SET C1 = 9 , C3 = 4 DONDE C2 = 'a'
Aumente el valor de la columna C1 en 1 si el valor de la columna C2 es "a".
ACTUALIZAR T SET C1 = C1 + 1 DONDE C2 = 'a'
Anteponga el valor en la columna C1 con la cadena "texto" si el valor en la columna C2 es "a".
ACTUALIZAR T SET C1 = 'texto' || C1 DONDE 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.
ACTUALIZAR T1 SET C1 = 2 DONDE C2 IN ( SELECCIONAR C3 DE T2 DONDE C4 = 0 )
También se pueden actualizar varias columnas en una sola declaración de actualización:
ACTUALIZAR T SET C1 = 1 , C2 = 2
También son posibles condiciones complejas y JOIN:
ACTUALIZAR T SET A = 1 DONDE C1 = 1 Y C2 = 2
Algunas bases de datos permiten el uso no estándar de la cláusula FROM:
ACTUALIZACIÓN un SET una . [ Updated_column ] = UpdateValue DE artículos un JOIN clasificación c SOBRE una . articleID = c . ID del artículo DONDE c . classID = 1
O en los sistemas Oracle (asumiendo que hay un índice en la clasificación.articleID):
ACTUALIZACIÓN ( SELECT * DESDE artículos ÚNETE clasificación SOBRE artículos . ArticleID = clasificación . ArticleID DONDE clasificación . ClassID = 1 ) SET [ updated_column ] = UpdateValue
Con nombre largo de tabla:
ACTUALIZACIÓN MyMainTable COMO un SET una . LName = Smith DONDE a . PeopleID = 1235
Problemas potenciales
- Ver Problema de Halloween . Es posible que ciertos tipos de
UPDATE
declaraciones se conviertan en un bucle infinito cuando laWHERE
cláusula y una o másSET
cláusulas pueden utilizar un índice entrelazado .