Una sentencia SQL UPDATE cambia los datos de uno o más registros de una tabla . Se pueden actualizar todas las filas o se puede elegir un subconjunto mediante 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 la UPDATE
operación 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 principales , índices únicos, CHECK
restricciones y NOT NULL
restricciones).
En algunas bases de datos, como PostgreSQL , cuando hay una cláusula FROM , lo que ocurre esencialmente 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 utilizar FROM, se debe asegurar que la unión produzca como máximo una fila de salida por cada fila que se vaya a modificar. En otras palabras, una fila de destino no debería unirse a más de una fila de las otras tablas. Si lo hace, entonces solo se utilizará una de las filas de unión para actualizar la fila de destino, pero no es fácil predecir cuál se utilizará. [2]
Debido a esta indeterminación, hacer referencia a otras tablas solo dentro de subselecciones es más seguro, aunque a menudo es más difícil de leer y más lento que usar una unió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 CONJUNTO 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 sea "a".
ACTUALIZAR T CONJUNTO 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 CONJUNTO C1 = C1 + 1 DONDE C2 = 'a'
Anteponga la cadena "texto" al valor de la columna C1 si el valor de la columna C2 es "a".
ACTUALIZAR T CONJUNTO C1 = 'texto' || C1 DONDE C2 = 'a'
Establezca el valor de la columna C1 de la tabla T1 en 2, sólo si el valor de la columna C2 se encuentra en la sublista de valores de la columna C3 de la tabla T2 que tiene la columna C4 igual a 0.
ACTUALIZAR T1 ESTABLECER C1 = 2 DONDE C2 EN ( SELECCIONAR C3 DE T2 DONDE C4 = 0 )
También se pueden actualizar varias columnas en una sola declaración de actualización:
ACTUALIZAR T CONJUNTO C1 = 1 , C2 = 2
También son posibles condiciones complejas y JOIN:
ACTUALIZAR T CONJUNTO 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 CONJUNTO a . [ actualizada_columna ] = updatevalue DE artículos a UNIR clasificación c EN a .articleID = c .articleID DONDE c .classID = 1
O en sistemas Oracle (asumiendo que hay un índice en classification.articleID):
ACTUALIZAR ( SELECCIONAR * DE artículos UNIRSE a clasificación EN artículos . articleID = clasificación . articleID DONDE clasificación . classID = 1 ) ESTABLECER [ updated_column ] = updatevalue
Con nombre largo de tabla:
ACTUALIZAR MyMainTable COMO un CONJUNTO a . LName = Smith DONDE a . PeopleID = 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 .