Seguimos con el tema del backup y restore en motores de base de datos mysql. Hacemos backup de una base de datos MySQL en un, por supuesto, entorno GPL Linux :). El archivo sql ocupa lo que no está escrito. Hacer un restore de eso es simplemente cuestión de tiempo y procesador, pero imagina que, tu jefe te pide que debes exportar de esa base de datos una serie de tablas, coger las filas de esa tabla y añadirlas a otra tabla con la misma estructura. Un infierno. Lo voy a explicar mejor:
– Tenemos 2 tablas: usuarios y usuarios2.
– Queremos unificar los registros de todas las tablas en una única tabla, usuarios.
– Eso supone, hacer un export de usuarios2 y con un archivo sql, importarlo en la bd y la tabla usuarios.
Hay muchas formas de hacerlo. La primera que se me ocurrió, fue bajarme el archivo sql generado por dump, trocearlo en partes y editar los inserts para después ejecutar el restore. Bueno, no es viable. Es posible si tenemos diez filas, pero si tenemos 1.500.000 filas mejor dejarlo. Así que, repetimos, tenemos que unificar el contenido de 2 tablas en una sola, suponemos que no tenemos problemas de primary keys repetidas o cosas por el estilo.
Con ayuda de Eloi Poch, utilizamos la forma de consulta INSERT INTO …. SELECT. Podéis leer más sobre el INSERT INTO aquí. Ejemplo:
INSERT INTO tbl_temp2 (fld_id)
SELECT tbl_templ.fld_order_id
FROM tbl_templ WHERE tbl_templ.fld_order_id > 100;
Con esta sentencia hacemos los INSERTS INTO en una determinada tabla pero tomando los valores que devuelve la segunda parte de la sentencia, el SELECT FROM. No lo había utilizado hasta ahora. Una pequeña nota más en todo caso :O
Jo tampoc ho he utilitzat mai, però no ho veig extrany sent coneixedor dels SUBSELECTS (SELECTS anidats, que cal dir que en general cal evitar-los pel performance hit que ocasionen, sent preferibles altres solucions com els JOINS).