stringtranslate.com

Actualización (SQL)

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

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

Para que UPDATEsea exitoso, 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 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]

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

Problemas potenciales

Referencias

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