Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

actualizar y consultar una tabla

Estas en el tema de actualizar y consultar una tabla en el foro de Bases de Datos General en Foros del Web. Tengo estas 2 consultas que me gustaria unirlas en una misma: Código: $sql = mysql_query("SELECT * FROM tabla WHERE id=7"); Código: mysql_query("UPDATE tabla SET num=num+1 ...
  #1 (permalink)  
Antiguo 25/02/2012, 01:00
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 13 años, 9 meses
Puntos: 3
actualizar y consultar una tabla

Tengo estas 2 consultas que me gustaria unirlas en una misma:

Código:
$sql = mysql_query("SELECT * FROM tabla WHERE id=7");
Código:
mysql_query("UPDATE tabla SET num=num+1 WHERE id=7");

En la primera pues saco todos los valores de la tabla, y en la segunda consulta le sumo 1 a esa misma tabla y fila, intente unirlos asi pero no funciona:

Código:
$sql = mysql_query("UPDATE tabla SET num=num+1 WHERE (SELECT * FROM tabla WHERE id=7) ");
Alguna idea de que debo corregir
  #2 (permalink)  
Antiguo 25/02/2012, 05:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: actualizar y consultar una tabla

Cita:
Alguna idea de que debo corregir
Si, una idea simple: Hazlo en dos consultas separadamente...

Los DBMS en general, por una cuestión de seguridad del proceso, no te permiten leer y modificar la misma tabla en la misma sentencia.
La razón de esto es muy simple: Supongamos que tu sentencia busca todos los registros donde el campo A tenga un cierto dato, y luego intenta cambiar ese mismo valor por otro. ¿En qué estado queda ese registro? ¿Es parte de los registros leídos, o no lo es?
Otro caso es cuando eliminas un registro en base a un valor. ¿Cómo haces para eliminar físicamente el registro donde el puntero está posicionado? Es, como siempre digo, como cortar la rama del árbol, en la que tu mismo estás parado.

Mas o menos esa es la idea. Los DBMS bloquean la tabla que se lee para evitar inconsistencias en el proceso, por lo cual no pueden hacerse modificaciones mientras no se termina la lectura, y como la interpretación del WHERE es la última parte del proceso, ese SELECT tiene que liberar la tabla para que el UPDATE comience a funcionar.

Por otra parte, ¿Qué sentido tiene hacer una sentencia como esta:
Código SQL:
Ver original
  1. UPDATE tabla SET num=num+1 WHERE (SELECT * FROM tabla WHERE id=7)
Cuando la segunda que pones ya cumple la función pedida:
Código SQL:
Ver original
  1. UPDATE tabla SET num=num+1 WHERE id=7

Yo, al menos, no le veo sentido...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: consultar, mysql, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:41.