Copiar datos de una tabla a otra en MySQL

MySQL

Image via Wikipedia

Este post va dirigido para cuando utilizamos MySQL en Linux o Windows y tenemos la necesidad de migrar ciertos datos de una tabla a otra es decir ciertos campos en la misma base de datos.

Como sabemos MySQL es un motor de base de datos con licencia open source.

Aquí les pongo como hacerlo:

La estructura de la <mitabla> es:

campo1 int(2), campo2 varchar (25), campo3 varchar (10)

Y la estructura de <mitabla1> es:

campo1 int(2), campo2 int (2), campo3 varchar (25)

INSERT INTO <mitabla> (campo1, campo2) SELECT campo1, campo3 FROM <mitabla1>

Espero les sirva de mucho.

Saludos

Zemanta Pixie
Anuncios

Sun cerrará el código de MySQL

MySQLComo ha pasado con otros productos Linux, como fue el caso de RedHat que paso a ser Redhat Enterprise y dejo su versión Fedora, parece que le toco el turno a MySQL.

Sun ha anunciado su nueva versión MySQL Enterprise la cual poseerá algunas optimizaciones en su desempeño como son:

  • Particiones de índices y tablas que permiten consultas mas rápidas
  • Replicación híbrida y basada en filas
  • Programador de eventos para programar tareas repetitivas

La replica basada en filas simplemente cambia los datos a diferencia del híbrido que permite solamente el cambio delta entre los servidores master y el servidor esclavo, o repica basada en expresiones.

Sun también ha anunciado que se mantendrá el licenciamiento GPL ya que habrá una versión comunitaria y otra empresarial con soportes basada en un modelo de subscripciones.

Esto significa que se desarrollaran muchas mejoras para las versiones enterprises las cuales no estarán disponibles para la versión comunitaria.

El articulo completo lo puedes ver en:

http://blogs.zdnet.com/open-source/?p=2294

Con esto debemos sentirnos marginados con nuestras soluciones implementadas con MySQL es decir antes de la 5.1 nuestras esperanzas de que esta sea nuestra BD con buenos cambios se van quedando atrás ya que si deseamos disponer de estas mejoras deberemos suscribirnos a la versión Enterprise.

Esto se nos vino como un balde de agua fria !!!!

Saludos.

Tips para consultas MySQL

En el presente post voy a detallar algunos consultas que me sirvieron en su momento para obtener resultados de mi base de datos MySQL haciendo uso de las funciones propias del motor de BD y espero que les sirva a mas de uno de vosotros…. bueno bueno acabo con la palabreria y paso a explicar de que se tratan los ejemplos.

Los Funciones a utilizar en este post son:

CONCAT

DISTINCT

SUBSTRING

COUNT

Bueno los ejemplos van en seguida.

Caso 1.

Para cuando queremos concatenar o adherir un dato extra a un campo en nuestra tabla.

Ejm. id_campo1 = 160 pero queremos antecederle el 1 es decir id_campo1=1160 y así a todos los campos de la tabla (id_campo1 es de tipo varchar).

id Dato actual Dato Futuro
1 90 090
2 10 010

entonces ejecutamos UPDATE <tabla> set id_campo1=CONCAT(‘0’, id_campo1,);

Caso 2.

En este caso describiré como obtener parte de una cadena es decir un subtring

Ejm.

del campo (Hola) solo queremos obtener (ola)

id Dato actual Dato Futuro
1 Hola ola
2 Jala ala

entonces ejecutamos: SELECT substring(campo,2,4) from <tabla>;

Caso 3.
Conseguir de una lista de valores, algunos repetidos que se listen una sola vez

Ejm.

id Dato actual  
1 10  
1 20  
1 20  
1 30  

Y queremos obtener los siguientes valores

id Dato actual  
1 10  
2 20  

entonces ejecutamos SELECT DISTINCT(campo1) FROM <TABLA>

Caso 4.
Para cuando queremos conseguir los totales de un grupo de datos agrupados por su fecha

id Dato actual  
1 2008-02-02  
1 2008-02-02  
1 2008-02-03  
1 2008-02-04  

Y queremos obtener los siguientes valores

id Fecha total
1 2008-02-02 2
2 2008-02-03 1
2 2008-02-04 1

entonces ejecutamos: SELECT DINTINCT(fecha), COUNT(fecha) as total FROM <tabla> group by fecha;

En lo posterior ire aumentando algunas de las consultas que se me quedaron pendientes… datediff, timediff

Saludos y suerte con tus consultas. !!!!

Desarrollar páginas Web

Bueno este post lo realice en base a un correo que me llego de la lista de discusión de Linux a la que te pertenezco, espero oriente a mas de uno al momento de elegir las herramientas adecuadas bajo una tendencia open source.

Editor

1.- Quanta (Editor visual, bastante bueno lo he usado).
2.- Ñandú (Extensión de Firefox 2: Su manejo de CSS es destacado).
3.- Bluefish (Me parece tambien una buena elección).
4.- vim, {,x}emacs, jmacs, gedit, kedit, kate, mousepad, etc…
(editores de texto).
5.- Eclipse tiene un par de plugins para HTML. De hecho, Aptana IDE lo tiene.
6.- Creo que Netbeans también tiene un par de plugins para HTML.

Gráficas:
Aquíbueno hago algunas analogías con utilidades que funcionan en winbugs para quienes desarrollaban en este S.O y ahora lo quieren hacer en Linux.

1.- Krita
2.- GIMP (Photoshop)
3.- inkscape (Casi como el Ilustrator)

Efectos, flash, shockwave et al.

Hay por ahi una soluciones que se llama flash4linux pero no la he probado
1.- Prueba con Javascript purito.
2.- Si no te sirve, prueba con script.aculo.us y prototype.
3.- Si aún no te sirve, prueba a hacer un vídeo.
3.- Si aún hubiera la remota posibilidad de que no te sirviera, forget it.

A partir de las herramientas que di arriba, puede crearse la plantilla para generar un sitio Web. Si quieres hacerte un poco el genio, puedes continuar con esas y añadirle PHP/Python/Ruby/Perl… Si no, busca uno de los tantos CMS (Sistema manejador de contenido) que hay, y modifícale el template, con lo que tendrás un sitio Web de manera lo suficientemente rápida sin mucho esfuerzo y con todas tus neuronas intactas.

Para desarrollar una aplicación Web, ya obligatoriamente necesitas un lenguaje sólido y un poco más de conocimiento. Y tendrías que jugar con el lenguaje de tu elección, quizás usando alguna clase o bibliotecas aparte, como:
1.- PEAR de PHP
2.- CPAN de Perl
3.- Gem de Ruby.

Generalmente tienen bases de datos pequeñas, para lo que te recomiendo SQLite o MySQL, que es generalmente lo que tienen instalado los hostings…

Para modelado e datos, he escuchado que el Open System Architect es bien amistoso.

Saludos !!!

Sun adquiere MySQL

Bueno este es un post que me ha dejado un poco impresionado sobre la posición de mysql y su licencia GPL.

En el articulo publicado por Sun Microsystem se anuncia que adquirió mysql por nada menos que 1 millón de dólares.. nada pobres los panas de Sun, en fin pongo a su consideración el articulo el cuál esta en Ingles.

La base de datos de código abierto MySQL es la “M” en LAMP – la plataforma de software comprendida por Linux, Apache, MySQL y PHP/Perl a menudo vista como la fundación de Internet. Sun esta comprometido a mejorar y optimizar la pila de LAMP en GNU/Linux y Microsoft Windows con OpenSolaris y MAC OS X. La base de datos de MySQL, OpenSolaris y GlassFish, juntos con la plataforma Java de SUN y la comunidades de NetBeans, crearán una poderosa aplicación Web por un amplio rango de clientes para sus aplicaciones en la Web.

Más de 100 millones de copias de alto rendimiento del software de código abierto de MySQL han sido descargadas y distribuidas y una descarga diaria de 50.000 copias. Este par de amplia penetración con la fuerza de MySQL en Web 2.0, Software como un Servicio (SaaS), empresa, telecom y el mercado OEM hace un importante ataque para Sun. Con MySQL, Sun tendrá la habilidad profundizar la existente relación con los clientes y crear nuevas oportunidades con la busqueda de flexibilidad de companias y fácil uso de sistemas de código abierto.

Y ahora que pasará con nuestros sitios web que utilizan MySQL ?

La url es:

http://www.mysql.com/news-and-events/sun-to-acquire-mysql.html

Migrando a Mysql

Este articulo me pareció muy interesante para cuando queremos migrar desde una base de datos pagada empresarial a mysql ya sea por ahorrarnos costos o por migrar los datos de un sistema a otro.

Habla sobre las herramientas que podemos utilizar para poder realizar este proceso de migración con el menor riesgo posible.

La url es:

http://dev.mysql.com/tech-resources/articles/migration-software.html

Pero como esta en ingles me he dado el trabajo de traducirlo para que pueda ayudar a los que no dominan mucho el idioma ingles.

Para una migración exitosa de bases de datos empresariales corriendo en Oracle, SQL Server, Informix y Sybase a MySQL, tienes que elegir herramientas que automaticen el proceso de migración y evite riesgos y costos ocultos asociados con conversión parcial.

Introducción

Las ultimas versiones de MySQL a incrementado el rango a aplicaciones empresariales que pueden beneficiarse del alto desempeño, confiabilidad, seguridad, escalabilidad y reducción de costos ofrecidos por este servidor de base de datos. Eso es porque mas y mas companias hoy consideran cambiar su misión critica de DB empresariales corriendo en Oracle, Microsoft SQL Server, Sybase e Informix a MySQL.

Sin embargo la migración de base de datos es un gran desafió a los profesionales de IT porque involucra un multitud de problemas de conversión causados por las considerables incompatibilidades entre la principal DB y la necesidad de preservar las propiedades de ejecución de las aplicaciones de DB existentes.

Los especialistas de IT a menudo desestiman la complejidad de la conversión de DB y no toman en cuenta todas las dificultades que envueltas en este proceso. Como resultado, usan herramientas que aseguran la conversión parcial y tienen que tratar con las tareas principales manualmente. Pero debido al largo numero de objetos (tablas, procedimientos, etc) en base de datos empresariales, el manejo manual de cualquier problema inesperado aparece en el transcurso del proyecto puede llevar a demorar y dramáticamente arriesgar el costo de migración.

El propósito de este articulo es describir los problemas y tareas envueltas en la migración de bases de datos empresariales a MySQL, y ayudar a profesionales a elegir las herramientas que aseguren el mas compresivo y apropiada conversión y hacer posible completar el proyecto de migración en tiempo y presupuesto.

Requerimientos en la Migración de Bases de datos Empresariales

Además de las significativas diferencias entre la sintaxis SQL y la funcionalidad de diferentes sistemas manejadores de bases de datos, toma en cuenta los siguientes factores que influencian la complejidad de la migración de bases de datos enterprise y la elección de métodos y herramientas.

Conversión de bases de datos y aplicaciones – No solo transferir datos

Las clases de sistemas manejadores de bases de datos como Oracle, SQL Server y otros provee gran funcionalidad para el desarrollo de aplicaciones. Son herméticamente limitadas con aplicaciones base de datos implementa una significante parte de lógica de negocios y reglas, mejorando el desempeño, seguridad y modularidad de aplicaciones criticas.

Por esta razón, la migración de bases de datos no debe ser considerada meramente como transferir datos. También involucra la conversión de esquema de base de datos (tablas y definición de vistas, integridad de relaciones, etc) y lógica de negocios del servidor (procedimientos almacenados y funciones).

Todas estas características de bases de datos y objetos de bases de datos son importantes para aplicaciones que deben ser convertidas para preservar aplicaciones ? comportamiento y funcionalidad.

Gran número de objetos de bases de datos — Costo de Esfuerzo manual

Las bases de datos corporativas contienen de cientos a miles de objetos de bases de datos (tablas, vistas, procedimientos, etc). Debido a este gran número de objetos y la variedad de características usadas, una herramienta de migración debe resolver tantas tareas de conversión como sea posible. Manual se corrige un par de menores dificultades, involucra muchos objetos y por eso viene el consumo extremado de tiempo y costo.

Otro problema es la gran interdependencia de los objetos de la DB. Casi todos los procedimientos hacen referencia a tablas, vistas y otros procedimientos y las dependencias deben ser mantenidas en el curso de conversión.

Por ejemplo, si el identificador origen (nombre de la tabla o columna, etc) es una palabra reservada en MySQL, debe ser encerrada en caracteres especiales o cambiado cuando se migre a MySQL. Esta modificación debe también ser hecha en todas las vistas, procedimientos y aplicaciones que a la que se refiere este identificador.

Gran volumen de datos

Base de datos empresariales usualmente almacenan gran volumen de datos. Debido a este transferencia de datos a MySQL puede tomar variar docenas de horas, dependiendo del método elegido para importar los datos. La diferencia de tiempo en este caso es considerable ye importante al usar la mas apropiada herramienta para transferir datos tan rápido como sea posible.

Requerimientos para Migración de Software

Tomando en cuenta las especificaciones de las DB empresariales y las aplicaciones descritas anteriormente, podemos definir los particulares requerimientos para la migración de software debido para automatizar mas las tareas de conversión y evitar el esfuerzo manual.

Solución compresiva e integrada

La migración de software convertiría solo datos, pero también el esquema y lógica de negocios de la DB (procedimientos almacenados e.g.).

Este software debe apoyar la conversión de datos incluyendo columnas LOB (imágenes, video, etc), definición de tablas incluyendo tipo de datos, NULL e identificando propiedades, valores por defecto, claves primarias y foráneas, relaciones únicas, vistas, procedimientos almacenados y funciones.

Son la diferencias de la sintaxis SQL, el software debe también resolver problemas específicos como palabras reservadas y conflicto de identificadores. Cada DB tiene una lista de palabras reservadas que no se permite usar como identificadores sin comillas. Los problemas se presentan cuando un identificador no es un palabra reservada en la DB fuente, pero es una palabra reservada en MySQL. Por ejemplo, LIMIT no es una palabra reservada en Oracle, pero lo es en MySQL. Mientras convertimos a MySQL, los identificadores deben estar en comillas o cambiados donde sean usados (en vistas, procedimientos almacenados etc.).

La herramienta también debe prevenir la sintaxis MySQL tan bien como los requerimientos necesarios para generar los índices para claves foráneas en tablas hijo no requeridas en otras DB.

La herramienta de migración debe estar integrada al automáticamente mantener cambios en los objetos de la DB relacionados. Por ejemplo, si cualquier cambio es hecho a la tabla este debe reflejarse automáticamente en todos los objetos dependientes (vistas, procedimientos almacenados) que se refieren a esta tabla.

Si la migración de software no conoce estos requerimientos y convierte solamente los datos e.g., debes realizar una conversión manual o generar una migración mas complicada combinando varias herramientas. En ultimo caso herramientas diferentes de ser integradas, cualquier cambio hecho en la DB en una herramienta no son consideradas en las otras.

Solución flexible provee reglas globales

Generalmente, no requiere considerablemente transformar la estructura DB y los datos durante la conversión desde la consecuente necesidad de re-escribir la aplicación esto haría la migración muy costosa.

En muchos casos, la DB migrada no son modificadas preservando la funcionalidad de las aplicaciones. Aun, renunciar a menudo puedes requerir un cambio imperceptible del esquema de la DB o setear especificas opciones al encontrar nuevos requerimientos de aplicaciones.

Por ejemplo, puedes requerir cambiar el tipo de dato mapeado entre le BD fuente y MySQL o especificando el tipo de tabla InnoDB para apoyar las claves foráneas e incluirlas.

Puedes también querer especificar reglas para convertir los identificadores que son palabras reservadas o contienen caracteres especiales. Por defecto como identificadores son encerrados con caracteres comillas (backtick in MySQL), pero es inusual e inconveniente para desarrolladores usar identificadores con comillas cuando escribes consultas SQL o procedimientos, y puedes querer cambiar identificadores para evitar comillas obligadas.

Finalmente, la migración de software de DB debería ser suficientemente flexible de permitirte desarrollar cualquier cambio requerido y definir varias configuraciones. Además ser capaz de cambiar todos los objetos individualmente, la herramienta debe también ofrecerte una forma global de setear opciones o reglas efectivas para todos los objetos. De otra manera puede consumir mucho tiempo setear las mismas opciones para múltiples objetos

Facilitando la conversión de aplicaciones

Muy frecuentemente las aplicaciones deben ser modificadas despues de la conversión de DB. Usualmente estas modificaciones no afectan la estructura de la aplicación y es requerido el cambio nativa de expresiones SQL, tomando en cuenta los cambios hechos e la DB (identificadores, tipos de datos etc.) tanto como resolver posibles interfaces incompatibles entre la aplicación y la DB MySQL.

Es importante para la migración de software proveer un reporte de todos los cambios hechos en la DB durante la conversión. No es necesario reportar todas los objetos de la DB y columnas su información puede ser obtenida de cualquier herramienta para manejar la DB y permitir análisis de cambios que afecten la ejecución de la aplicación y requiere modificación.

La migración de software debe facilitar la migración de aplicaciones y proveer utilidades para convertir expresiones SQL y resolver otros problemas de conversión.

Alto desempeño

Desde que las DB empresariales almacenan gran volumen de datos, toma mucho tiempo transferir datos desde la DB origen a MySQL. Por esta razón es importante que la migración de software provea el método mas rápido de importar datos a MySQL.

Como Oracle o IBM DB2, MySQL ofrecen herramienta de alto desempeño que es especialmente eficiente para cargar gran volumen de datos. El comando de MySQL LOAD DATA INFILE es usualmente 20 veces mas rápido que la importación de los mismo datos con la ayuda de expresiones SQL INSERT (Para mayor información mira el capitulo en la documentación de MySQL “MySQL Optimization” ).

La migración de software debe ofrecer una opción para migrar datos con la ayuda de LOAD DATA INFILE para reducir el tiempo de transferencia (que puede tomar varias horas usando un comando de alto-desempeño). Transfiriendo datos usando la interface ODBC y expresiones INSERT de SQL puede ser inaceptable para DB empresariales.

Para incrementar el desempeño de importación de datos, la conversión de software debe permitir crear integridad de relaciones e índices después importar datos.

Personalización de servicios en la migración de software

En general la migración de DB es muy complejo emprendiemiento al automatizar 100% para todas las posibles DB y aplicaciones.

No obstante, cada DB y aplicación provista usa un limitado conjunto de características, la presente disponibilidad de herramientas de migración pueden automatizar la conversión de algo mas del 95% de ellas.

Como se describe anteriormente, debido al gran número de objetos y el uso de características inconvertibles en la mayoría de los objetos, cualquier manual fortalece la migración de mas del 5% de lo que es realmente después de que la automática conversión incrementa el   total del costo y tiempo del proyecto de gran manera.

Por esta razón, es muy importante que el vendedor del software de migración provea servicios de corte rapido de software al proyecto particular necesita y evitar esfuerzo manual.

Resumen de herramientas de migración para MySQL

Actualmente hay varias herramientas en el mercado que pueden convertir bases de datos privadas a MySQL.

Ispirer SQLWays

SQLWays es el mas comprensiva herramienta de migración para MySQL. Convierte datos, esquema de base de datos(tablas y definición de vistas, tipo de datos, claves primarias y foráneas, relaciones únicas, identificación y propiedades NULL, valores por defecto, comentarios) y lógica de negocios (procedimientos almacenados y funciones) desde Oracle, SQL Server, Sybase, IBM DB2 e Informix a MySQL.

SQLWays es un software de migración especializado, flexible y efectivo para uso de varios proyectos de conversión.

La herramienta te permite redefinir tipo de datos mapeados globalmente y para cada tabla, elige el tipo de datos para almacenar datos (InnoDB e.g.) y especifica otras opciones. SQLWays automáticamente resuelve conflicto de identificadores y palabras reservadas. En adelante casos tambien cuando el usuario modifica objetos de la DB, la herramienta refleja todos los cambios en las tablas dependientes, vistas, procediemientos almacenados etc. SQLWays exporta la DB origen a scripts SQL, puedes extender el proceso de migración  usando terceras partes en herramientas o lenguajes de scripts (Perl e,g.).

SQLWays crea reporte en modificaciones realizadas durante la conversión y facilita la conversión de aplicaciones.

Como las herramientas de migración dadas por Oracle e IBM para sus bases de datos, SQLWays utiliza el proceso export/import para migración de DB privadas, e internamente usa el alto desempeño del comando de MySQL LOAD DATA INFILE al dar la rapida importación de datos a MySQL.

Para mayor información acerca de SQLWays, mira http://www.ispirer.com

Embarcadero DT/Studio

DT/Studio is a high-performance ETL tool (Extraction, Transformation and Loading) that can be used for transferring data from various databases to MySQL.

DT/Studio es pretendido para usar datos en proyectos warehouse y el enfoque en transferencia de datos y transformación. Pero desde que  DT/Studio tiene modelado de datos y capacidad de ingeniería inversa, también te permite convertir el esquema de BD a MySQL.

No es tipico para proyectos de migración, DT/Studio es altamente efectivo si necesitas re-diseñar la estructura de la DB y transformar datos durante el proceso de conversión, provee muchas características de transformación y funciones.

DT/Studio no apoya la conversión de lógica de negocios del lado del servidor (procedimientos almacenados y funciones, etc) y aplicaciones a MySQL.

Para mayor información acerca de DT/Studio, mira http://www.embarcadero.com/products/dtstudio/

Microsoft DTS

Microsoft DTS is an ETL tool (Extraction, Transformation and Loading) that can be used to transferring data from various databases to MySQL.

DTS is also mostly focused on data transfer and transformation and allows you specifying data transformations using Visual Basic scripts.

DTS allows you to redefine data types for each table, modify table and column names and specify CREATE TABLE statements for tables. You have to set options for each table individually; DTS does not provide options affective for all converted tables.

DTS provides limited capabilities for the schema conversion. It does not support primary and foreign keys, unique constraints, default values and identity columns. DTS does not convert views and stored procedures to MySQL.

Para mayor información acerca de DTS, mira http://www.microsoft.com/sql

Conclusion

You have to thoroughly assess the requirements of your migration project and choose the most appropriate tool that will cover all the conversion issues and eliminate the risks and hidden costs associated with partial conversion.

While converting enterprise databases to MySQL, you should reduce the manual effort to the greatest possible extent; otherwise the migration project may be very time consuming and incur unexpected additional costs.