2012-05-13 19 views
10

Soy nuevo en MySQL y quiero actualizar una fila completa en MySQL con una nueva matriz, hasta ahora todos los ejemplos de la consulta de actualización implican especificar el nombre de la columna y un nuevo valor para esa columna, como esta:Actualizar una fila completa en MySQL

"UPDATE tablename SET columnname = '".$new_value."' WHERE columnname = '".$value."'"; 

¿Cómo puedo actualizar un registro completo con la consulta de actualización o debo usar la consulta de reemplazo?

Cualquier consejo será apreciado.

Editar: ¿Hay una consulta que no requiera especificar todos los nombres de columna y los nuevos valores de columna?

Básicamente quiero tener una consulta que se ve algo como esto:

actualización EntireRow con thisarray donde primarykeycolumn = 'EsteValor'

+2

Gracias por todas sus respuestas, sólo desean que su era una más corta consulta/* llora */ – grasshopper

Respuesta

19

Para ello es necesario que

  1. Enumerar todos los valores
  2. Conozca la columna de clave principal y el valor

Así que la pregunta final se vería

UPDATE tablename 
    SET col1 = 'val1', col2 = 'val2' ... 
WHERE id = id_value 

No hay ningún comando mágico para la actualización de la "fila entera" en SQL otra de lo que se ha mostrado anteriormente. Y REPLACE definitivamente no es lo que necesita aquí.

+1

gracias Ok, entonces supongo que debería deja de ser perezoso y comienza a escribir esas columnas. – grasshopper

+0

Título dijo específicamente 'MySQL'. A menos que intentes convertirlo a Postgres, en realidad no se aplica para mencionarlo :) – AlienWebguy

+0

@AlienWebguy: No estoy tratando de convertir a nadie. MySQL permite esta sintaxis en la cláusula 'WHERE':' WHERE (a, b) = (2,3) 'es válida en MySQL (y SQL en general). Pero aún no se ha implementado en la cláusula 'SET'. –

8

Depende si desea conservar la identificación o no, suponiendo que la ID sea autoincrement.

REPLACE INTO mytable VALUES(new array) .... actualizará la identificación también, ya que realmente solo emula un DELETE y INSERT.

Si desea mantener la identificación, use un UPDATE mytable SET foo='bar', baz='bat' WHERE id=12

Como un FYI, REPLACE es generalmente conveniente para tablas de asignación en el campo único o una clave principal compuesta no es un incremento automático.

+2

Y tampoco es bueno usar 'REEMPLAZAR 'cuando hay teclas foráneas que apuntan a esta tabla (especialmente con la acción' ON DELETE CASCADE' definida). –

+0

Sí, desafortunadamente, la identificación es autoincrement y necesito mantener esos – grasshopper

2

Sin duda puede hacerlo todo en una consulta. Simplemente agregue más this = that cláusulas separadas por comas:

"UPDATE tablename 
SET column1name = '".$new_value1."', 
    column2name = '".$new_value2."', 
    column3name = '".$new_value3."' 
WHERE columnname = '".$value."'" 
2

Esa es la forma correcta.

UPDATE TABLENAME SET COLUMNAME = VALUE, COLUMN2NAME = VALUE, ETC WHERE CONDITION 
+3

"Correctos" es subjetivo. – AlienWebguy

-2

sí hay una forma similar ...

$updateSQL = sprintf("UPDATE hotel <br>SET hotel_name=%s, contact_person_1=%s <br>WHERE hotel_id=%s",<br> 
         $_POST['hotel_name'],<br> 
         $_POST['contact_person_1'],<br> 
         $_POST['hotel_id']); 

mysql_select_db($database_hotelbookingryan, $hotelbookingryan); 
$Result1 = mysql_query($updateSQL, $hotelbookingryan) or die(mysql_error()); 
Cuestiones relacionadas