Recuerdo instantes de mi pasado donde he tenido la necesidad de llevar Bases de Datos MDB, Microsoft Access, a bases de datos MySQL.
Recuerdo por entonces MySQL Migration Toolkit, una herramienta para realizar esta carga requerida. No obstante no era de mi agrado, y lo que buscaba por entonces era simplemente obtener un script SQL con el código DDL y DML necesario para el CREATE de los objetos de la base de datos y los INSERTs de los datos. A esa utilidad, hoy Linuxeando, le encontré el nombre: mdbtools.
MDBtools es un suite de herramientas (mdb-array mdb-header mdb-parsecsv mdb-schema mdb-tables mdb-export mdb-hexdump mdb-prop mdb-sql mdb-ver) que permiten, entre sus funciones, obtener esquema de una base de datos y exportar en SQL los datos de la misma.
Oracle SQL Developer es una herramienta gratuita para desarrolladores disponible para Windows, Mac y Linux que permite manipular bases de datos Oracle y de terceros, como DB2, Access o MySQL por medio de un driver JDBC.
La última versión disponible de este cliente es la 2.1 y puede descargarse gratuitamente, previo registro aquí. Para ver la lista de características de la aplicación puedes hacer clic aquí.
Esta publicación tiene origen a partir de una consulta realizada por un compañero. Es usual que esta pregunta se la hagan aquellos que vienen con conocimientos adquiridos en Access, aunque en este caso se trataba de reescribir para SQL Server una consulta originalmente escrita en MySQL (IF en vez de IIF).
Luego de buscar un poco llegué a unas FAQs que dieron solución a este problema.
Te guste o no, las consultas que utilicen IIF (o IF en MySQL) deberán ser reescritas utilizando la expresión CASE.
Lo que leeremos ahora es una solución bastante artesanal para tracear consultas SQL. Cuando leia mis feeds y leí el título de Cómo “tracear” consultas SQL entré inmediatamente debido a que desconocía un método para realizar esta tarea. Lo que suele suceder es que aveces queremos resolver los problemas de una forma prolija y elegante y lo cierto es que la solución puede ser bastante más rudimentaria pero muy ingeniosa.
Muchas veces suele ser tarea común la de consultar en MySQL el slow query log o verificar en tiempo real con un show processlist cual es esa consulta que está volviendo lento al servidor. Conocida la consulta, ¿como se cual es la aplicación que utiliza dicha consulta?. A menos que conozcamos muy bien nuestro sistema, debemos empezar a buscar en nuestros archivos y hacer algunos que otros grep recursivos hasta encontrar con la aplicación culpable de esa consulta lenta.
Soy de destacar que las combinaciones que se pueden lograr con los comandos y cláusulas del lenguaje SQL no tiene fin. Muestra de ello son estas interesantes opciones que encontré para realizar un swap entre los valores de dos columnas distintas de una misma tabla en MySQL (tarea que parece facil pero que tiene cierta complejidad, aunque no tanta).
Las opciones disponibles y que se publican a continuación son dos, de todas formas, tomando estos ejemplos como base se pueden escribir más variantes. Así también, estos ejemplos se podrían hacer extensivos a un reemplazo de valores entre más de dos columnas.

Generalmente, a los fines de tests o benchmarks requerimos de tablas llenas de registros, cuyo número anda en el orden de varios millones.
Para llenar un tabla de forma rápida en tan solo unas pocas repeticiones de unas instrucciones SQL, nada mejor que buscar lograr un crecimiento exponencialmente de la misma.
A continuación, te mostramos una forma muy sencilla, como bien pensada, de lograr esto haciendo uso del INSERT INTO …. SELECT. El ejemplo está desarrollado en MySQL, pero se puede adaptar a cualquier otro dialecto de SQL de otros motores bases de datos.
(más…)
A continuación, pongo a vuestra disposición un catálogo de Consultas SQL comunes escritas para MySQL:
Según palabras oficiales del director de arquitectura de MySQL, Drizzle será una base de datos basada en gran parte del código de MySQL.
Drizzle se trataría de una base de datos diseñada exclusivamente para aquellas aplicaciones que tengan un patrón de comportamiento como el de las aplicaciones web, como por ejemplo: concurrencia masiva, bases de datos sin lógica de negocios y arquitecturas modernas de múltiples núcleos, entre otras.
El código de Drizzle deriva de MySQL, con la salvedad que se han quitado todas las características superfluas para las características antes mencionadas.
La arquitectura de Drizzle sería del tipo micro-kernel y mucho del código será movido a módulos. Algunas partes de MySQL, seleccionadas para su remoción incluyen vistas, triggers, stored procedures, query cache, ACLs y algunos tipos de datos.
La sentencia de creación CREATE TABLE … SELECT … nos permite crear una tabla con los registros devueltos por una consulta de selección (SELECT).
Observemos un ejemplo:
(más…)
En publicación voy a intentar emular un FULL OUTER JOIN para aquellos DBMS que no lo soporten, por ejemplo, MySQL.
Para empezar recordemos que un FULL OUTER JOIN es así como un LEFT JOIN y RIGHT JOIN a la vez. O bien, como vimos en Inner, Outer, Natural & Cross JOINs, FULL OUTER JOIN combina los resultados de dos o más tablas, tengan o no coincidencia entre sí.
Veamos un ejemplo demostrativo: