Una instrucción SQL UPDATE cambia los datos de uno o más registros en una tabla . Se pueden actualizar todas las filas o se puede elegir un subconjunto utilizando 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 que UPDATE
sea exitoso, 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 está presente 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. Cuando se utiliza FROM, uno debe asegurarse de que la combinación produzca como máximo una fila de salida por 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í, entonces solo se usará una de las filas de unión para actualizar la fila de destino, pero no se puede predecir fácilmente cuál se usará. [2]
Debido a esta indeterminación, hacer referencia a otras tablas sólo dentro de subselecciones 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 cumple con el estándar ANSI. [3]
Establezca el valor de la columna C1 en la tabla T en 1, solo en aquellas filas donde el valor de la columna C2 sea "a".
ACTUALIZAR T ESTABLECER 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 cuales el valor de la columna C2 sea "a".
ACTUALIZAR T CONFIGURAR 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 ESTABLECER C1 = C1 + 1 DONDE C2 = 'a'
Anteponga el valor de la columna C1 con la cadena "texto" si el valor de 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 en la columna C3 en la tabla T2 que tiene la columna C4 igual a 0.
ACTUALIZAR T1 CONFIGURAR C1 = 2 DONDE ENTRA C2 ( SELECCIONE C3 DE T2 DONDE C4 = 0 )
También se pueden actualizar varias columnas en una única declaración de actualización:
ACTUALIZAR T CONFIGURAR 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:
ACTUALIZAR un SET a .[ columna_actualizada ] = valor de actualización DE los artículos a UNIRSE a la clasificación c ON a . ID del artículo = c . artículoID DONDE c . ID de clase = 1
O en sistemas Oracle (suponiendo que haya un índice en Classification.articleID):
ACTUALIZAR ( SELECCIONAR * DE artículos UNIRSE a clasificación EN artículos . ID de artículo = clasificación . ID de artículo DONDE clasificación . ID de clase = 1 ) SET [ columna_actualizada ] = valor de actualización
Con nombre largo de mesa:
ACTUALIZAR MyMainTable COMO SET a . LNombre = Smith DONDE a . ID de personas = 1235
UPDATE
declaraciones se conviertan en un bucle infinito cuando la WHERE
cláusula y una o más SET
cláusulas pueden utilizar un índice entrelazado .