Está en la página 1de 4

TransaccionesenMySQL

Bywindoctor

ElconceptodeBasesdeDatosTransaccionalesesun sinnimodefiabilidadsuperioralasBasesdeDatos comnes.LasTransaccionessonampliamente utilizadasenSistemasBancariospormencionarsolo unejemplo. UnaBasedeDatosTransaccionalalbergalaideadeo todomejornada.Paramsinformacin enwikipedia.org Agrandesrazgos,laideaesquealmomentodequeestamosejecutandopor ejemplounasentenciaUPDATE,estasentencianotenganingnefectohasta quenosotrosloindiquemosconCOMMIT.Porejemplo; UPDATEbdSETcampo=valorWHEREid=1; Normalmente,alejecutarlasentenciadearriba,inmediatamenteloscambiosse reflejarian.Puesbien,elconceptodetransaccinvaenfocadoaquealejecutar dichasentencianopasenada!!Yloscambiosseanrealizadoshastaque escribamoslasentenciaCOMMIT. UPDATEbdSETcampo=valorWHEREid=1; COMMIT;//CundoejecutemosCOMMITescundohastaese momentotodaslassentenciasqueleprecedentendrnefecto!antesno. Estoesespecialmentetilenmuchoscasoscuandodebemosejecutarvarias sentenciasSQLperosabemosquesialgunadeellasfallaporXraznentonces todoestarmal,losdatoscorrompidosyesoesungraveproblema!Entonces, escuandopodemospensarenusarTransacciones,sienalgunasentenciaocurre unerror,seejecutaROLLBACKyconestoNADAsemodifica,todovuelvea suestadooriginal,yencambio,sitodosaliobien,seejecutaCOMMITylos cambiosserealizan!

UNSENCILLOEJEMPLO
EsimportanteaclararqueparatrabajarconTransacciones,lastablasdebende serdetipoInnoDBynoMyISAM,sisondeesteltimotipoNOfuncionaras queantesdecontinuardebenasegurarsequeusarnunatablaInnoDB.Eneste ejemplo,usaremoslabasededatosaddressbookqueseutilizoenelejercicio deCreacinde Reportes enJava Ladescargalapuedenhaceraqui(clickderechoyguardarcomodelo contrariolesaparecerquenoexistelapgina).Dentrodelacarpetaestael scriptsqlelculsedeberaejecutarparacrearlaBD. LanicatablaquecontieneesdetipoMyISAMporloculesnecesario cambiarlaaInnoDB.ParaellodesdelalneadecomandosdeMySQLseescribe lasiguientesentencia: ALTERTABLE`addressbook`.`contacts`ENGINE=InnoDB; Noesnecesariotrabajarconestatabla,cadaunodeustedespuedetrabajarcon cualquierBDqueyatenga,estosoloesamododeejemplo. Unavezqueyaestatodolisto,abriremosdosventanasdelalneadecomandos deMySQL.Paramayorcomodidadyamododevisualizarmejorlosresultados, cambiaremoselcolordefondoaunadeellasyalaotraladejaremosas. Ahorabien,esteejercicioconsisteenusartransacciones,modificarelcampo Telefonodelapersonaquetieneelid=57.Comosesabe,loscambiosno surtirnefectohastaquenosotrosloindiquemosconlasentenciaCOMMIT.En unaventana,ejecutamosloquemuestralasiguientefigura:

Observamosquelapersonaconelid=57tieneunvalorde1234567en elcampoTelefono.Ahorabien,enlaotraventanaquetenemosdisponiblees dondeiniciaremoslatransaccin:

Alteclearlassentenciasmostradasenlaanteriorfigura,nuevamentenos cambiamosalaotraventanayejecutamosporsegundavezlaconsultaSELECT *FROMcontacts; AlejecutartalconsultaNOobservarnelcambiodetelfono.Notarnque sigueteniendoelvalorde1234567.Estopasadebidoaquecomoya comentamos,setratadeunatransaccinyannoaceptamos(commit)o rechazamos(rollback)loscambios.Ahora,sinuevamentevolvemosala ventanaendondeseiniciolatransaccinytecleamoselCOMMIT,loscambios yatendrnunefecto:

ParaaplicarestodelasTransaccionesdesdeJavaydeigualformausando MySQL,estelinklesservirensuaprendizaje: http://www.proactivacalidad.com/java/jdbc/transacciones.htm

También podría gustarte