MySQL - Update deberia dar error

   
Vista:

Update deberia dar error

Publicado por Jota (4 intervenciones) el 29/04/2010 08:09:55
Hola todos

tengo la siguiente instruccion dentro de una transaccion.

UPDATE CUENTA SET SALDO_CUENTA = SALDO_CUENTA + '1000' WHERE CODIGO_CUENTA = '84'

El codigo_cuenta 84 no existe en la base de datos, esto deberia marcar error, y hacer el rollback de la transaccion, pero nunca se dispara el error.

Porque no se dispara si la cuenta 84 no existe?
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

RE:Update deberia dar error

Publicado por Gonzalo GC (339 intervenciones) el 29/04/2010 13:30:39
Porque técnicamente no es un error: Un registro no encontrado conforme al WHERE simplemente no se actualiza, pero no genera un error.
Ni siquiera genera un warning.
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

RE:Update deberia dar error

Publicado por Leandro (11 intervenciones) el 29/04/2010 16:37:47
Los errores y warnings reportandos son con respecto a la sintaxis.
Si no hay error de sintaxis no hay error.

Leandro
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

RE:Update deberia dar error

Publicado por JP (4 intervenciones) el 29/04/2010 17:33:12
Ok entendido.
Ahora lo que necesito es lo siguiente, la instruccion esta dentro de una transaccion, porque necesito grabar en varias tablas, y que se grabe todo o no se grabe nada si resulta algun problema, al tener el problema con ese where y no disparar ningun error, se estan grabando datos en las otras tablas menos en la tabla cuenta, como hago para que si el codigo de la cuenta no existe, entonces se haga rollback y no se grabe nada.

Espero haberme hecho entender.
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

RE:Update deberia dar error

Publicado por Gonzalo GC (339 intervenciones) el 29/04/2010 18:30:16
Usando la función ROW_COUNT() inmediatamente después de cada sentencia, te devuelve el número de filas afectadas por un INSERT, UPDATE o DELETE.
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

RE:Update deberia dar error

Publicado por Leandro (11 intervenciones) el 29/04/2010 19:49:25
Yo te diria que uses un trigger para la insercion en esa tabla, que controle la insercion, es decir si vas a insertar se debe cumplir tal condicion, sino no se inserta.

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

RE:Update deberia dar error

Publicado por Gonzalo GC (339 intervenciones) el 29/04/2010 20:39:22
No puedes detener una inserción con un TRIGGER, al menos no con MySQL.
En todo caso le convendría realizar toda la tarea con stored procedures.
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

RE:Update deberia dar error

Publicado por Leandro (11 intervenciones) el 29/04/2010 21:21:15
Les dejo el link:

http://dev.mysql.com/doc/refman/5.0/es/using-triggers.html

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

RE:Update deberia dar error

Publicado por Leandro (11 intervenciones) el 29/04/2010 21:47:35
Otra web muy ilustrativa es:

http://www.databasedesign-resource.com/mysql-triggers.html

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

Ya leí...

Publicado por Gonzalo GC (339 intervenciones) el 29/04/2010 22:00:44
Si.
Ya leí el ejemplo y caso. Pero si te fijas en detalle, el articulo muestra cómo usar la información que llega para alimentar otras tablas, pero en ningún momento puede evitar que ese INSERT se ejecute, y por ende no puede generar un ROLLBACK de la transacción en curso.
A eso es lo que me refiero: Un trigger no puede operar sobre la acción que lleva adelante su tabla porque 1) La tabla se encuentra bloqueada, y 2) MySQL no admite anidamientos de los triggers.
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

RE:Update deberia dar error

Publicado por Leandro (11 intervenciones) el 29/04/2010 22:30:24
Lo otro que se me ocurre es que puedas usar Transacciones.
En donde te fijes que exista una cuenta con dicho nro y en cuyo caso siguies
o en caso contrario haces rollback.

START TRANSACTION;
....

SELECT @A:= count(*) FROM table1 WHERE nro_cuenta= num_deseado;
if @A = 1 then
UPDATE ...;
....
COMMIT;
else
ROLLBACK;

Algo por el estilo.

Espero que te sirva
Saludos
Leandro.
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

RE:Update deberia dar error

Publicado por zineb (1 intervención) el 28/02/2013 00:01:34
Hola a todos, yo tambien necesito lo mismo pq tengo dos trigger q se disparan en el mismo tiempo y necesito testar en uno sobre resultado del insert en otro!! y todavia no he encontrado nadaa :(.
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