stringtranslate.com

Actualizar (SQL)

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 UPDATEdeclaración tiene la siguiente forma: [1]

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

Para que la UPDATEoperación 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 principales , índices únicos, CHECKrestricciones y NOT NULLrestricciones).

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]

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 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         

Problemas potenciales

Referencias

  1. ^ http://dev.mysql.com/doc/refman/5.0/en/update.html simplificado desde esta página
  2. ^ "ACTUALIZACIÓN". Enero de 2012.
  3. ^ "SQL: actualiza una columna de la tabla y luego la otra columna con el valor actualizado de la anterior. MySQL / PostgreSQL difieren".