MySQL

MySql

MySQL es un gestor de bases de datos bastante popular y rápido. Normalmente lo puedes encontrar instalado en los sitios de hosting.

 

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

Importar mdb desde consola con mdb-export

Lo primero tendenemos que tener instalado mdbtools en nuestro sistema.

Para instalar en debian:

sudo apt-get -y install mdbtools

A continuación ponemos un fichero que tenemos crear bash para poder hacer exportacion de una forma sencilla.

#!/bin/bash
echo "Esquema"
mdb-tables $1.mdb all > $1.tablas
mdb-schema $1.mdb > $1.schema.sql
echo "Tablas"
echo "==========================="
arr=( $(cat $1.tablas) )
# read -a arr
for elem in ${arr[@]}
do
# mdb-export -I mysql $1.mdb $elem > $elem.sql #tablas individuales
mdb-export -I mysql $1.mdb $elem >> $1.data.sql # todas las tablas juntas
done

Para un "archivo.mdb" se exportan sus tablas.
se ejecuta con:

bash tablas.sh archivo

Siendo "archivo" el fichero mdb que quieres exportar, sin la extensión, para mySQL hay que hacer unos cambios básicos de tipos "Long Integer" por "bigint" y cosas así, pero lo gordo está hecho.

Muchas gracias por aporte Alberto Lago. :-)

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

Realizando el proyecto catalogos, necesito poder crear una consulta donde me cambie el valor de una columna en unas determinadas filas.

Lo que tengo montado hasta ahora es un array con las consultas.

$consulta[$i] = 'UPDATE referenciascruzadas SET Estado ="'.$Estado.'" WHERE RecambioID ='.$Encontrado['RecambioID'].' AND IdFabricaCruzado ='.$Encontrado['IdFabricaCruzado'].' AND  Ref_Fabricante ="'.$Encontrado['Ref_Fabricante'].'"';

Pero esto implica que si tengo un array con 200 elementos, implica que haga 200 peticiones al servidor msqyl, algo que considero que es innecesario, ya que no necesito saber si fue correcta o no la actualización.

Bueno el código completo es el siguiente

foreach ( $ArrayEncontrados as $Encontrado) {
		$i++;
		if ($Encontrado['Buscado'] =='NoEncontrado') { 
			$Estado = 'Nuevo';
		} else {
			$Estado = 'Existe Referencia Cruzada';
		}
		$consulta[$i] = 'UPDATE referenciascruzadas SET Estado ="'.$Estado.'" WHERE RecambioID ='.$Encontrado['RecambioID'].' AND IdFabricaCruzado ='.$Encontrado['IdFabricaCruzado'].' AND  Ref_Fabricante ="'.$Encontrado['Ref_Fabricante'].'"';
	}
Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

Teniendo en cuenta que tienes que ser administrador del equipo y la versió MYSQL que tengo es 5.5.40-0ubuntu0.12.04.1 encontre la siguiente web donde lo explica muy bien.

Lo repito por ecapy.com se les da por quitar el post o otros.

Paramos el servidor:

sudo service mysql stop

Arrancamos “mysqld_safe”:

sudo mysqld_safe --skip-grant-tables

Dejamos esa consola con “mysqld_safe” corriendo. Abramos otra consola y hagamos lo siguiente:

sudo mysql -u root

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

La mayoria de estos comando son ejecutables de phpmyadmin, aunque realmente esto esta estudiado para hacer desde la propia terminal Mysql

Comando SHOW

El comnando SHOW nos proporciona la información de las bases de datos, tablas, columnas o información de estado sobre el servidor de Mysql.

show databases

Nos muestra un listado de todas las bases de datos que tenemos disponibles en ese usuario.

Si estamos en prompt  de una base de datos, ya podemos listas las tablas, con :

show tables

Nos muestra todas las tablas de esa base datos.

 

Comando SELECT

 

¿Queremos contar los distintos valores que tenemos en un campo?

Imagina que tienes un campo con los nombres  y quieres saber cuantos nombres diferentes hay.

SELECT count(DISTINCT `NombreCampo`) as variable FROM `NombreTabla`

Imagina que tarifa de precios con los siguiente campos:ReferenciaProducto, ReferenciaFamilia, IdCliente, Precio. Hay que tener en cuenta que las ReferenciasProductos pueden estaŕan duplicada ya que tenemos un precio para cada cliente.

Ahora queremos saber cuantos productos hay en cada familia en esta tabla, no da igual que tengan precios distintos, solo queremos saber el numero de productos en cada familia.

SELECT count(DISTINCT `NombreCampo`) as variable FROM `NombreTabla` where `ReferenciaFamilia`= FAMILIAQUEREMOSSABER 

 

Comando UPDATE

La comando UPDATE es la sentencia para actualizar registros de una tabla. Nos permite elegir los campos a actualizar y los datos. Son registros que ya existen.

Sustituir contenido de un campor por otro.

Lo ideal para hacer esto es con funcion replace que no facilita mysql, si quiere ver todas las funciones que tiene en este link: Funciones de mysql.

    UPDATE nombretabla SET campo = REPLACE(campo*, 'palabra', 'palabra_remplazada');

En esta sentencia lo que hace es cambiar en la tabla "nombretabla"  en todos lo registros, en el campo busca en valor del campo (campo* -> se pondría el campo) las 'palabras' y las sutituye por 'palabra_remplazada'

 

 

Comando INSERT

Tienes la necesidad de copiar los datos de una tabla en otra de otra BD

INSERT INTO `NUEVA-BASEDATOS`.`TABLA-NUEVA` SELECT * FROM `BASEDATOS`.`TABLAQUEREMOSCOPIARDATOSo` 

Recordar que la estructura tiene que ser la misma

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

Con esta nota de mysql queremos conseguir una pequeña guia para utiliza mysql desde terminal, al final del post podrás encontrar una relación de fuentes.

Paquetes necesarios para la instalación de MySql en Linux

Se necesitán varios paquetes para poder tener totalmente operativo myqsl en nuestro equipo.

  • mysql-server : Paquete Servidor de MYSQL
  • mysql-common : Paquete archivos comunes de MySql
  • mysql-client: Paquete  de Cliente de MYSQL

Tambien puede instalarte paquetes adicionarles como::

  • mysql-admin : Paquete entorno gráfico
  • mysql-query-browser: Paquete que sirve para hacer consultas.

Conectarnos a mysql desde terminal

Lo primordial tener los datos conexion : usuario, contraseña y host.

Si tienes MariaBD en un sistema local, puedes configurar el servicio para que no tengas que poner la contraseña cuando esta con root.

mysql -u root -p 

Si no es un sistema local, es  decir no queremos conectar a un servidor de bases datos (MariaDB o MYSQL) debemos incluir en la instrucción el servidor

mysql -u USUARIO -p -h SERVIDOR

A continuacion nos pide la contraseña que del usuario, si es root no pide la  pusimos en la instalación, una vez introducida nos aparece los siguiente o algo similar si va todo correcto.

Type 'help;' or '\h' for help.
Type '\c' to clear the current input statement.
mysql>

Para desconectarse de terminal, utilizamos

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

Dbf (Data Base File) es formato simple para almacenar datos estructurados, utilizado por Dbase, Paradox, Clipper, FoxPro y seguro que nos olvidamos de alguno más.

Por esto, puede que os surja la necesidad de convertir esas tablas en una tabla de mysql, por ello en esta entrada vamos a ver las opciones que utilizamos.

DESDE LA PROPIA CONSOLA DE LINUX:

Desde la propia terminal de linux es bastante sencillo, solo necesitamos dbf2mysql.

Utilizando dfb2mysql, instalando en UBUNTU

sudo apt-get install dbf2mysql

Una vez lo tengamos instalado , solo tenemos que crear la BD en mysql, y luego con la siguiente instruccion:

dbf2mysql -h [SERVIDOR] -U [USUARIO] -P [CONTRASEÑA] -d [BASEDATOS] -t [NOMBRETABAL] -c -f /path/del/fichero/nombrefichero.dbf

No es un proceso rápido y por lo que la duración del proceso puede ser largo ya que depende de los registros y lo pesada que sea la tabla, como referencia os indico que:

" Duro un par de horas el importar una tabla 250.000 registros en servidor local "

Con esto, os digo que toca esperar a que termine el comando en la terminal antes de cerrarlo , ya que sino vuestra tabla puede que no este completa.

Problemas encontrados:

- Algunos atributos que tiene dbf no los tiene en cuenta , como el auto incremento
- Algunos tipos de campos con decimales no los importa correctamente.

Referencias:

-Blog de manel perez
-Github un proyecto con modificaciones dbf2mysql

 Importar dbf con python

Cuando la cosa se nos pone compleja a la hora importar dbf, lo que hacemos es utilizar Python y una librería llamada dbfread, la cual nos permite leer los dbf , luego con un pequeño script podemos tratar los datos leido y añadirlos a donde queramos.

 

Referencias:

Documentacion libreria dbfread.