Bueno mi opinión ya que la has pedido es esta.
Tenemos que tener cuidado cuando vallamos a escoger el tipo de bases de datos que deseamos utilizar por que pasan cosas como estas. MySQL es un motor bastante robusto para bases de datos pero no es Oracle, aunque son de la misma casa comercial Oracle es superior sin lugar a dudas.
1.- Cliente/ServidorTenemos en cuenta que MySQL es una base de datos primeramente
Cliente/Servidor. Lo que significa que siempre vamos a tener un cliente y un servidor aunque esto signifique que estén en la misma computadora o terminal (En Caso de los dispositivos móviles). Para lo que vamos a tener una cuenta de ROOT y una cliente,
muchísimos programadores piensan que es bueno tener la misma cuenta en su cadena de conexión a la base de datos. Es sorprendente, mas del 90% de los desabolladores de perfil bajo y medio tienen la misma cuenta en el servidor y en la cadena de conexión. Esto es un agravioso error. Ya que como lo han de saber si abren su ejecutable con el bloc de notas pueden tener acceso a la cadena de conexión del sistema y muchas formas mas de obtenerlo, osea alguien que sepa principios de ingeniería inversa básica lo hace. Por lo tanto un software se protege en función a lo que es más importante para el, por lo tanto cuando se trata de
GESTIÓN DE DATOS (Bases de Datos con Software) se protege más la base de datos que el software.
Como haces esto, bueno te resultará curioso saber que MySQL puede hacer esto por ti si lo sabes configurar, osea las cuentas de usuarios no están de por gusto, MySQL guarda en su LOG si así lo configuras todos los accesos de los usuarios desde donde y cuando. Por lo que significa que deberías tomarte la molestia de crear Usuarios y Privilegios apropiados para tu cliente. Esto sin contar que significa en una pastita más para el desarrollador de vez en cuando el cliente quiera una nueva cuenta. Los mejores sistemas del mundo venden su sistema y cuentas de usuario, por que trabajan en la seguridad de sus aplicaciones.
Un ejemplo digamos que tengo un software local en una empresa que esta tiene 25 trabajadores en 5 departamentos de los cuales en cada departamento hay un administrador o encargado, por lo tanto cuantas ¿cuantas de usuario configuro?. R// Es sencillo, configuras 11 cuentas de usuario, 1 General, 5 para cada uno de los jefes de departamento, 1 cuenta por departamento de usuario final con privilegios limitados osea 5 usuarios finales. En jerarquía con sus privilegios, sin contar con el usuario ROOT por supuesto.
¿Para qué me va a servir esto?. R// Como ya lo explique MySQL si lo configuras guarda que hizo cada usuario en que dirección ip, ejemplo, UsuarioFinalContabilidad en IP 192.168.1.5 utilizo la sentencia "DELETE * FROM" para todos los registros de la compañía. Esto te quita mucho trabajo, realmente por que las empresas quieren saber que hizo que cosa. También tienes que tener en cuenta que la configuración de los privilegios contiene el acceso a tablas, que los usuarios solo utilicen las tablas que realmente tienen que utilizar y nada más. Imagina que alguien utilizo ingeniería inversa para saber tu ConnectionString pero solo tiene acceso a modificar las tablas en las que el trabaja y no puede ver los contenidos de las demás tablas, el motor se va a dar cuenta de la conexión mal influenciada y te va a informar.
2.- MySQL Como Base de Datos Transaccional o No
La verdad es que este es un tema muy pero muy delicado, ya que aquí se centra tu pregunta, lo de la transacción de bases de datos o la forma en la que en General se dice que es correcto tratar con los datos de:
En un Sub- Abrir la Base de Datos
- Ejecutar la Consulta SQL
- Cerrar la Base de Datos
Es el resultado de las
http://es.wikipedia.org/wiki/ACID que en un razonamiento de sentido común te dice que tenes la necesidad de Abrir la conexión, ejecutar tu código, cerrar la conexión, para GARANTIZAR los cambios hechos en la base de datos por motivos transaccionales, al cumplir con esto estas realizando un sistema un SGBD
http://es.wikipedia.org/wiki/Transacci%C3%B3n_%28base_de_datos%29 esto significa que lo que haces es utlizar las propiedades de BEGIN, COMMIT y ROLLBACK. Esto debe de ser configurado con el tipo de base de datos InnoDB, osea no es necesario que manejes estas propiedades de código fuente en tu sistema por que MySQL en InnoDB ya lo hace automáticamente con cada transacción.
Si no quieres utilizar esta parte automática de MySQL en InnoDB debes de desactivarla pero eso es absurdo, ya que MySQL tiene su propia base de datos más rápida para no tener estas propiedades osea MyISAM pero tambien tienes que desactivar las transacciones.
Si mantienes tu "HILO" de bases de datos abierto desde que inicia hasta que finaliza corres el riesgo de esto no se cumpla y que pueda suceder un desbordamiento, un problema de actualización, perdidas indeseadas, etc. MySQL habla mucho al respecto de esto, de tal manera que ha hecho por defecto InnoDB desde MySQL Server 5.0
Recuerda es comprometerte a que la acción o transacción este bien hecha, una por una, no todas al mismo tiempo que te obliga literalmente a manejar las transacciones por código fuente, que es más peligroso. Tambien ten en cuenta que no son los únicos tipos de bases de datos que maneja MySQL, tiene varios más y se van acoplando a tus necesidades como desarrollador y a las necesidades de tus clientes. Esto hace a MySQL posiblemente la mejor herramienta para bases de datos de hosting, es verdaderamente configurable, lee y aprende que tipo de bases de datos necesitas.
Vi a Ivan Acosta mencionar algo de quitar el autocommit, creo que debería de ver también los tipos de bases de datos que tiene MySQL (Comentario Personal) Yo he trabajado con varios Motores de Bases de Datos y MySQL me ha parecido mas manejable.
3.- Sintaxys
Debes de tener en cuenta que la sintaxys de una base de datos Mono/Multi Usuario como access que quiere asemejarse más al motor de SQL Server utilizando así su composición en sus cadenas, no es lo mismo que utilizar SQL, lo cual puedes utilizarlo en un
Motor de Bases de Datos Cliente Servidor Transaccional. Te sugiero que en vez de Access utilices SQLite. Te dejo una página donde puedes aprender y practicar Lenguaje SQL.
http://www.w3schools.com/ (Pido Disculpas a los Moderadores por el SPAM)
Te vas al apartado Server Side y la opción Learn SQL.
4.- Desarrollo del Aplicativo y Desarrollo de la Base de Datos.
Hay también un gran problema con este tema por que al desarrollador que se ocupa de hacer Sistemas de Gestión de Bases de Datos (SGBD) debe de saber básicamente 2 lenguajes de programación.
- El Lenguaje del Código Fuente (Vb6, Vb.NET, C, C++, etc.)
- El Lenguaje de Bases de Datos
Lo digo de verdad aquí hay verdaderos genios para utilizar el código fuente a un muy buen porcentaje. Pero en muchos casos (No estoy diciendo nombres y ni tan siquiera que pertenezcan a esta web) no le sacan el potencial a su motor de bases de datos, no a la base de datos si no al motor. Por ejemplo un programador que está guardando una factura de venta debe de guardar solamente los datos de la factura con el monto y el detalle de dicha factura. Los Descargos del inventario, las creación de cuentas contables, etc. deben de hacerse de forma automatica.
Esto nos lleva a las siguientes herramientas de MySQL:
- Store Procedures
- Triggers
- Event Scheduler
- Views
Con el buen uso de estas herramientas podemos minimizar el código fuente en nuestro aplicativo, aumentar el código en nuestra base de datos, pero ahorrar tiempo y dejar de gastar recurso innecesario.
Resumen
En mi humilde opinión con mi estudio y experiencia.
Si no has tenido problemas con tus bases de datos es por que son tan pequeñas que no has llegado hay, espera a que crezcas de verdad.
Debes de Manejar MySQL como debe de ser para sacar su máximo potencial, no lo estas haciendo.
Debes de aprender a configurar bien tu motor de base de datos.
Deberías de pensar en cambiar de Access a SQLite si quieres tener un respaldo de la base de datos en otro motor, por que si lo que quieres es tener un respaldo hay otras formas.
Si vas a seguir manejando Access debes de separar la sintaxis de Access y SQL de MySQL.
Espero no haber molestado a nadie ni mucho menos insultado, si es así me disculpo, si hay algún error con respecto a algo que mencione aquí, puede corregidme abiertamente sin mp y se debate y discute, si estoy equivocado estaré mas que encantado en aprender y corregir mis conocimientos.