MySQL - Update filas afectadas

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 31 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Update filas afectadas

Publicado por Hans (1 intervención) el 11/06/2018 15:14:51
Hola,
Por favor si me pueden ayudar en lo siguiente. Estoy ejecuando el comando update sobre una tabla, y necesito saber la cantida de registros que recorrio el comando update, en Mysql Workbench cuando ejecuto un update me muestra la siguiente información, el comando que ejecuto es:

update dimension set pond=5 where id_dim=5;

El workbench me muesrta un mensaje al final que dice:
08:46:22 update dimension set pond=5 where id_dim=5
0 row(s) affected
Rows matched: 1 <<<<<<<
Changed: 0 Warnings: 0 0.031 sec

Lo que neceito obtener es el valor que muestra Rows matched del Workbench, en un procedimiento almacenado. En otras palabras la consulta (update dimension set pond=5 where id_dim=5;) no actualiza porque ya tiene pond el valor 5, pero si existe el registro, eso es lo que necesito saber si existe el registro una vez ejecutado el update, porque si ejecuto el row_count() me muesrta cero (no actualizo porque el valor es el mismo que quiero actualizar), pero necesito saber que el update encontro el registro como lo muestra el rows matched de Mysql Workbench.
Les agradezco si me pueden ayudar a obtener despues del update ese valor (rows matched que muestra el Workbench).
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Update filas afectadas

Publicado por leonardo_josue (414 intervenciones) el 11/06/2018 21:38:43
Hola Hans:

Hasta donde sé, no se puede obtener este valor directamente en MySQL :S

Ahora bien, se me ocurre que simplemente "transformes" tu UPDATE en un SELECT-COUNT para saber el número de registros afectados, es decir, algo así, supongamos que tienes esta tabla:

1
2
3
4
5
6
7
8
9
mysql> SELECT * FROM tabla;
+----+-------------+
| id | descripcion |
+----+-------------+
|  1 | uno         |
|  2 | dos         |
|  3 | tres        |
+----+-------------+
3 rows in set (0.00 sec)


entonces, puedes hacer un SP con el UPDATE e inmediatamente después un SELECT-COUNT para contar cuantos registros cumplen con la condición original:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> DROP PROCEDURE IF EXISTS update_count;
Query OK, 0 rows affected (0.02 sec)
 
mysql> DELIMITER $$
mysql> CREATE
    ->     PROCEDURE update_count(p_id INT, p_descripcion VARCHAR(20))
    ->     BEGIN
    ->       SET @registros_actualizados = 0;
    ->       UPDATE tabla SET descripcion = p_descripcion WHERE id = p_id;
    ->       SELECT COUNT(1) INTO @registros_actualizados FROM tabla WHERE id = p_id;
    ->       SELECT @registros_actualizados;
    ->     END$$
Query OK, 0 rows affected (0.00 sec)
 
mysql> DELIMITER ;

Entonces, cuando invoques el SP, la consulta te regresará el número de registros existentes, no el número de registros actualizados...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
mysql> CALL update_count(1, 'otro uno');
+-------------------------+
| @registros_actualizados |
+-------------------------+
|                       1 |
+-------------------------+
1 row in set (0.10 sec)
 
Query OK, 0 rows affected (0.10 sec)
 
mysql> CALL update_count(2, 'dos');
+-------------------------+
| @registros_actualizados |
+-------------------------+
|                       1 |
+-------------------------+
1 row in set (0.09 sec)
 
Query OK, 0 rows affected (0.09 sec)
 
mysql> SELECT * FROM tabla;
+----+-------------+
| id | descripcion |
+----+-------------+
|  1 | otro uno    |
|  2 | dos         |
|  3 | tres        |
+----+-------------+
3 rows in set (0.00 sec)

En el primer caso SI SE ACTUALIZA UNA DESCRIPCION, en el segundo caso NO SE ACTUALIZA LA DESCRIPCION, ya que es la misma... en ambos casos el resultado es 1.

Si se envia un ID que no exista, entonces el resultado es cero:

1
2
3
4
5
6
7
8
9
mysql> CALL update_count(4, 'cuatro');
+-------------------------+
| @registros_actualizados |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set (0.00 sec)
 
Query OK, 0 rows affected (0.01 sec)

Ahora bien, si estás trabajando con algún lenguaje de programación, también existen funcionas "propias" que hacen esto mismo

https://dev.mysql.com/doc/refman/8.0/en/mysql-affected-rows.html

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2
Ha aumentado su posición en 12 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Update filas afectadas

Publicado por sergio (1 intervención) el 05/11/2018 16:21:02
hola tengo un problema no me deja actualizar una columna de una tabla con un select de otra... las 2 tablas no estan relacionadas como puedo hacer
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar