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

Transacciones en procedures y en funciones

Estas en el tema de Transacciones en procedures y en funciones en el foro de Mysql en Foros del Web. Hola muy buenas! Ando desesperado con mi base de datos: Tengo dos preguntillas que esperaba que pudierais contestarme... La primera duda que tengo es... Mysql ...
  #1 (permalink)  
Antiguo 22/04/2013, 15:05
 
Fecha de Ingreso: abril-2013
Mensajes: 4
Antigüedad: 11 años, 7 meses
Puntos: 0
Transacciones en procedures y en funciones

Hola muy buenas!

Ando desesperado con mi base de datos:

Tengo dos preguntillas que esperaba que pudierais contestarme...


La primera duda que tengo es... Mysql no me deja hacer transacciones de funciones, eso significa que una funcion se toma como transaccion? o es mejor solo hacer procedures porque las funciones no se pueden hacer como una unidad?


Pero la verdadera duda es:

Tengo un procedure que hace una busqueda en una tabla MyISAM, y no se como meterla en una transaccion...

Y ya que estamos, que os parece la logica del procedure?


Muchas gracias!

Código MySQL:
Ver original
  1. DROP PROCEDURE IF EXISTS relacionaImagenDescargas;
  2.  
  3. DELIMITER $$
  4.  
  5. CREATE PROCEDURE relacionaImagenDescargas(
  6.  
  7. IN vFileID BIGINT,
  8.  
  9. IN vWord VARCHAR(100)
  10.  
  11.  
  12. SET AUTOCOMMIT=0;
  13.  
  14.    
  15.  
  16.     SELECT DISTINCT files.fileID FROM count_downloadfiles,filedescriptions,filecategories,files WHERE
  17.  
  18. filecategories.fcatFileID=filedescriptions.fileID AND  
  19.  
  20. count_downloadfiles.dmFileID=filedescriptions.fileID AND
  21.  
  22. filecategories.fcatCategoryID=ANY (SELECT fcatCategoryID FROM filecategories WHERE filecategories.fcatFileID=vFileID) AND
  23.  
  24. files.fileID=filedescriptions.fileID AND
  25.  
  26. files.fType='IMAGE' AND
  27.  
  28.  
  29. SET errores = (SELECT @@error_count);
  30.  
  31.  
  32. IF errores=0 THEN
  33.  
  34.  
  35. (filedescriptions.fName LIKE vWord OR filedescriptions.fDescription LIKE vWord) ORDER BY dmDownloads DESC;
  36.  
  37.  
  38.  
  39.  
  40. END$$
  41.  
  42. DELIMITER ;
  #2 (permalink)  
Antiguo 22/04/2013, 17:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Transacciones en procedures y en funciones

Cita:
Tengo un procedure que hace una busqueda en una tabla MyISAM
Por lo pronto, el motor de tablas MyISAM no soporta transacciones... Así qeu de entrada estás encaminando mal la cosa.
Por otro lado, los SELECT no impactan en realidad en las transacciones, sino en la consistencia de lectura. No es exactamente lo mismo. Una lectura es consistente cuando los datos no se modifican durante la ejecución del proceso, pero eso está un poco más allá de la transacción.
La transacción, en ese contexto, se usa para evitar que un dato sea modificado mientras dure la misma, pero eso no es el caso de las MyISAM, como te dije.
Hagas lo que hagas, será inútil. AL actualizar o insertar deberás hacer una rutina de comprobación de lectura consistente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 23/04/2013, 13:56
 
Fecha de Ingreso: abril-2013
Mensajes: 4
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Transacciones en procedures y en funciones

Muchas gracias por contestar!


Estoy buscando sobre esto que me has dicho de la comprobación de lectura consistente y no encuentro mucho.


Si he entendido bien, lo que tengo que hacer es:

Para las tablas que son InnoDB, las actualizaciones e insercciones deben estar dentro de una transaccion (aunque sea la unica istruccion?)

Para las MyISAM tengo que hacer un bloqueo de la tabla cuando se vaya a actualizar o insertar.

Es así?

Muchas gracias!
  #4 (permalink)  
Antiguo 23/04/2013, 14:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Transacciones en procedures y en funciones

Cita:
Para las tablas que son InnoDB, las actualizaciones e insercciones deben estar dentro de una transaccion (aunque sea la unica istruccion?)
Bueno, una transaccion puede contener N sentencias de INSERT/DELETE/UPDATE, dependiendo de lo que quieras "considerar como "operaciones atómicas".

Respecto a las MyISAM, si, es correcto. Sólo puedes controlarlo bloqueandolas.

Respecto a la lectura consistente, lee sobre ISOLATION LEVEL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 24/04/2013, 05:56
 
Fecha de Ingreso: abril-2013
Mensajes: 4
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Transacciones en procedures y en funciones

Ya veo.. Asi que es mejor poner isolation level "REPEATABLE-READ". He mirado y dice que por las "lecturas fantasmas" no hay que preocuparse demasiado, que se pierde mucho rendimiento.


Si en el select que tengo, a la tabla MyISAM a la que se accede se actualiza/inserta/borra solo a través de un trigger, he visto que los triggers bloquean para lecturas consistentes. Pero como puedo hacer para hacer de las demás condiciones del select una transaccion (están en InnoDB), sin tener en cuenta la MyISAM?

Porque si lo he entendido bien, el trigger solo me permitira el bloqueo de la tabla de la ultima condicion, permitiendo la lectura consistente en esa tabla. Pero con las otras tablas del select no se como hacer. Daría problemas si meto dentro de una transacción una condición referida a una tabla que no es InnoDB?, mantendría la transacción para las demás?


Llevo horas buscando y no doy con ello. Aquí dejo el select que pretendo hacer
Muchas gracias!


Código MySQL:
Ver original
  1. SELECT DISTINCT files.fileID FROM count_downloadfiles,filedescriptions,filecategories,files WHERE
  2.  
  3. filecategories.fcatFileID=filedescriptions.fileID AND  
  4.  
  5. count_downloadfiles.dmFileID=filedescriptions.fileID AND
  6.  
  7. filecategories.fcatCategoryID=ANY (SELECT fcatCategoryID FROM filecategories WHERE filecategories.fcatFileID=vFileID) AND
  8.  
  9. files.fileID=filedescriptions.fileID AND
  10.  
  11. files.fType='IMAGE' AND
  12.  
  13. (filedescriptions.fName LIKE vWord OR filedescriptions.fDescription LIKE vWord) ORDER BY dmDownloads DESC;
  #6 (permalink)  
Antiguo 29/04/2013, 12:32
 
Fecha de Ingreso: abril-2013
Mensajes: 4
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Transacciones en procedures y en funciones

Nadie puede ayudarme? Al menos estoy en lo correcto sobre los triggers?

Por cierto, las funciones no permiten transacciones. Trabajan como estructura atomica?

Muchas gracias!

Etiquetas: funciones, procedures, select, sql, tabla, transacciones
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 02:10.