Tipos de Ingeniería MySQL UNIDAD IV ISAM Es el formato de almacenaje mas antiguo, y posiblemente podría desaparecer en futuras versiones. Presentaba limitaciones importantes como la no exportación de ficheros entre maquinas de distintas arquitecturas o que no podía usar mayores de 4 GigaBytes. BDB Base de datos Berkeley. TST(Transactions safe tables). Es una librería de manejo de Base de Datos con API para C, C++, Java, Perl, Python, y otros lenguajes. Solo en MySQL MYISAM Es el tipo de tabla por defecto en MySQL desde la versión 3.23. Optimizada para sistemas operativos de 64 bits, permite ficheros de tamaños mayores que las ISAM. Los datos se almacenan en un formato independiente, lo que permite pasar tablas entre distintas plataformas. Los índices se almacenan en un archivo con la extensión ”.MYI” y los datos en otro archivo con extensión “.MYD”. Ofrece la posibilidad de indexar campos BLOB y TEXT. Además este tipo de tablas soportan el tipo de dato VARCHAR. Un inconveniente es que las tablas pueden llegar a corromperse, almacenando datos incorrectos. Esto puede ser causado por: El proceso mysql haya sido eliminado en el transcurso de una escritura. Problemas de hardware. Una caída del sistema durante su utilización. Un gusano en el código Mysql o MyISAM. Funcionalidades específicas de MyISAM
Ejecución rápida de COUNT(*)s (cuando no se utilizan
WHERE, GROUP BY, o JOIN) Indexación “full text” Ocupan menos espacio en disco que las tablas InnoDB Compresión elevada de tablas, pero las tablas comprimidas son de sólo lectura Tipos de datos e índices espaciales (R-tree) INNODB InnoDB provee a MySQL con el soporte para trabajar con transacciones, además de hacer un mejor bloqueo de registros para las instrucciones SELECT muy parecido al usado por Oracle, con lo que incrementa el rendimiento y la concurrencia en ambientes multiusuario, por otro lado, InnoDB es el único formato que tiene MySQL para soportar llaves foráneas (FOREING KEY). Además de todo lo comentado, InnoDB ofrece unos rendimientos superiores a la anterior tecnología de tablas de MySQL (MyISAM). InnoDB es un motor de bases de datos muy completo que ha sido integrado dentro de MySQL. Funcionalidades específicas de InnoDB
Transacción es un programa que actualiza la base de datos y
tiene 4 propiedades ACID. Bloqueo a nivel de registro (MyISAM sólo ofrece bloqueo a nivel de tabla) Restricciones de clave externa (foreign key constraints) Recuperación automática en caso de crash Compresión de tablas con posibilidad de lectura/escritura Tipos de datos espaciales(pero no índices espaciales) Los datos son guardados en páginas en orden de clave primaria Transacciones ACID Las transacciones soportan lo que se conoce como las propiedades ACID. A: Atomicidad: “Cualquier cambio de estado que produce una transacción es atómico, es decir, ocurren todos o no ocurre ninguno. En otras palabras, esta propiedad asegura que todas las acciones de la transacción se realizan o ninguna de ellas se lleva a cabo; la atomicidad requiere que si una transacción se interrumpe por una falla, sus resultados parciales deben ser deshechos” C: Consistencia: Esta propiedad establece que solo los valores o datos válidos serán escritos en la base de datos; si por algún motivo una transacción que es ejecutada viola esta propiedad, se aplicará un rollback a toda transacción dejando a las bases de datos en su estado de consistencia anterior. En caso de que la transacción sea ejecutada con éxito, la base de datos pasará de su estado de consistencia anterior a un nuevo estado de consistencia.” I: Aislamiento: “Esta propiedad asegura que no sean afectadas entre sí las transacciones, en otras palabras esto asegura que la realización de dos o más transacciones sobre la misma información sean independientes y no generen ningún tipo de error” D: Durabilidad: Es la propiedad de las transacciones que asegura que una vez finalizada su ejecución, sus resultados son permanentes a pesar de otras consecuencias, como por ejemplo, si falla el disco duro el sistema aún será capaz de recordar todas las transacciones que han sido realizadas en el sistema” El cumplimiento de estas propiedades realizar un conjunto de operaciones sucesivas sobre los datos, y validarlas todas ellas como un bloque mediante una sentencia COMMIT, o bien deshacerlas con una sentencia ROLLBACK, volviendo a dejar el contenido de la tabla como estaba. Bloqueo a nivel de registro y bloqueo a nivel de tabla En InnoDB, si varios usuarios o aplicaciones intentan acceder simultáneamente a la información contenida en una tabla para modificarla, el bloqueo a nivel de registro hace que sólo deban quedar a la espera aquellos que intentan modificar los datos de un mismo registro. En MyISAM, cualquier proceso que intenta modificar la información de una tabla queda a la espera hasta que no hay ningún otro proceso accediendo a la misma Restricciones de clave externa
A menudo, los datos de una tabla están relacionados con los
de otras. Las restricciones de clave externa aseguran la integridad de estas relaciones. Esta integridad referencial está implementada en el motor de almacenamiento InnoDB, pero no en MyISAM Recuperación en caso de caída
Si el servidor sufre una avería, o por alguna otra razón finaliza
abruptamente la ejecución de mysql, es necesario recuperar las tablas MyISAM mediante una reparación completa de las tablas e índices. Si las tablas contienen un gran volumen de datos, el tiempo necesario para recuperar las tablas puede ser muy elevado. Por el contrario, las tablas InnoDB se recuperan automáticamente volviendo a ejecutar las transacciones grabadas en el fichero de log de transacciones, haciendo rollback de las que estén incompletas. Transacciones en MySQL
Los pasos para usar transacciones en MySQL son:
Iniciar una transacción con el uso de la sentencia BEGIN. Actualizar, insertar o eliminar registros en la base de datos. Si se quieren los cambios a la base de datos, completar la transacción con el uso de la sentencia COMMIT. Únicamente cuando se procesa un COMMIT los cambios hechos por las consultas serán permanentes. Si sucede algún problema, podemos hacer uso de la sentencia ROLLBACK para cancelar los cambios que han sido realizados por las consultas que han sido ejecutadas hasta el momento. Crear una tabla InnoDB
CREATE TABLE ejemplo
(campo INT NOT NULL PRIMARY KEY) TYPE = InnoDB; Esto es aplicable a cualquier tipo de tabla, pero cuando no se especifica nada, MySQL supone que se trata de una tabla MyISAM INSERT INTO ejemplo VALUES(1); INSERT INTO ejemplo VALUES(2); INSERT INTO ejemplo VALUES(3); Ejemplo ROLLBACK SELECT * FROM ejemplo;
Ahora veamos como usar transacciones.
mysql> BEGIN; mysql> INSERT INTO ejemplo VALUES(4); mysql> SELECT * FROM ejemplo; Ejecutamos un ROLLBACK, la transacción no será completada, y los cambios realizados sobre la tabla no tendrán efecto. mysql> ROLLBACK; mysql> SELECT * FROM ejemplo; Ejemplo COMMIT SELECT * FROM ejemplo;
Ahora veamos como usar transacciones.
mysql> BEGIN; mysql> INSERT INTO ejemplo VALUES(4); mysql> SELECT * FROM ejemplo; Ejecutamos un COMMIT, la transacción será completada, y se realizan los cambios sobre la tabla. mysql> COMMIT; mysql> SELECT * FROM ejemplo;