Archivo

Posts Tagged ‘base de datos’

Averiguar el número de tablas de una base de datos

10 de junio de 2017 Deja un comentario

La consulta es sencilla:

select count(*) from information_schema.tables where table_schema = ‘nombredelabasededatos‘;

Dentro de cada servidor de base de datos de MySQL/MariaDB tendremos una base de datos llamada «information_schema«. Dentro de la misma, una tabla llamada tables. Es en esta en la que encontraremos el catálogo de todas las tablas del servidor.

En un hosting que utilizo para mis pruebas he utilizado esta consulta y funciona, por lo que imagino que tengo privilegios (de lectura) de la tabla. (Me planteo si podré consultar las tablas del resto de usuarios, por ahora me voy a quedar con la duda).

Esta tabla tiene los siguientes campos:

TABLE_CATALOG varchar(512) No
TABLE_SCHEMA varchar(64) No
TABLE_NAME varchar(64) No
TABLE_TYPE varchar(64) No
ENGINE varchar(64) Sí NULL
VERSION bigint(21) UNSIGNED Sí NULL
ROW_FORMAT varchar(10) Sí NULL
TABLE_ROWS bigint(21) UNSIGNED Sí NULL
AVG_ROW_LENGTH bigint(21) UNSIGNED Sí NULL
DATA_LENGTH bigint(21) UNSIGNED Sí NULL
MAX_DATA_LENGTH bigint(21) UNSIGNED Sí NULL
INDEX_LENGTH bigint(21) UNSIGNED Sí NULL
DATA_FREE bigint(21) UNSIGNED Sí NULL
AUTO_INCREMENT bigint(21) UNSIGNED Sí NULL
CREATE_TIME datetime Sí NULL
UPDATE_TIME datetime Sí NULL
CHECK_TIME datetime Sí NULL
TABLE_COLLATION varchar(32) Sí NULL
CHECKSUM bigint(21) UNSIGNED Sí NULL
CREATE_OPTIONS varchar(2048) Sí NULL
TABLE_COMMENT varchar(2048) No

.

Exportar/Importar tablas de MySQL/MariaDB desde consola

4 de marzo de 2015 1 comentario

Si quiero exportar una base de datos para luego importarla en otro servidor desde un terminal:

mysqldump –u usuario -p nombre_basededatos > fichero_exportación.sql

Nos pedirá la contraseña y nos genera el fichero en el directorio que especifiquemos o en la carpeta actual.

Si ese fichero quiero importarlo, podré hacerlo con la opción de Importar de phpMyAdmin o desde consola con el siguiente comando:

mysql –u usuario -p nombre_basededatos < fichero_importación.sql

En el formato en el que importamos/exportamos tendremos nuestro DROP TABLE seguido de CREATE TABLE, por lo que podemos olvidarnos de tener que crear las tablas por nuestra cuenta.

Si lo que queremos es exportar una tabla concreta de una bse de datos:

mysqldump –u usuario -p nombre_basededatos nombre_tabla > fichero_exportación.sql

Importar un DBF a MySQL

12 de febrero de 2014 1 comentario

Voy a utilizar phpMyAdmin.

En primer lugar hay que pasar el DBF a CSV, sí, es obligatorio (al menos con phpMyAdmin).

  1. Lo mejor es abrirse un Excel y desde ahí abrir el DBF. Te preguntará qué idioma tiene tu fichero, seleccionando internacional te funcionará.
  2. Ya tengo en Excel abierto el DBF. Ahora, me aseguro de que en la primera fila estén escritos los nombres de los campor por cada una de las columnas.
  3. Guardo el fichero DBF en formato CSV utilizando el Guardar como de Excel.
  4. ¿Todo hecho? No, ahora me debo abrir el fichero CSV con el Bloc de Notas o con un editor de texto (véase el GEdit).
  5. Ya tengo el fichero abierto. Debo asegurarme de lo siguiente para que la carga en phpMyAdmin sea correcta:
    • Los campos de texto deben estar encerrados entre comillas dobles «
    • Los campos deben estar separados por ;
    • Los números con decimales deben utilizar el .
  6. Guardo el fichero y me paso a phpMyAdmin.
  7. Selecciono la base de datos donde quiero crear la tabla con mis datos.
  8. Pulso la pestaña Importar
  9. Selecciono el botón Examinar para seleccionar el fichero que quiero cargar
  10. Una vez selecccionado, phpMyAdmin detecta que es un CSV y nos va a preguntar ciertas cosas. Únicamente debemos tener en cuenta que nuestro separador de texto son las comillas dobles «, y que nuestro separador de columnas es el ;
  11. Recuerda seleccionar el checkbox sobre que la primera fila contiene los nombres de los ficheros
  12. Pulsamos importar y ya estará todo hecho

Seguro??

Hay veces que con lo anterior la importación la hace «regulera». Esto se debe a que supone la definición de los campos, es decir, si va entre comillas dobles será un VARCHAR, si lleva decimales será un DECIMAL y por defecto te pondrá 4,2 por ejemplo. ¿Esto qué quiere decir? Que si tienes más de 3 decimales te va a truncar.

Solución

Define la tabla tú mismo. Asegúrate de que los campos los pones en el mismo orden y con el tipo correcto.

Una vez hecho esto. Modifica el fichero CSV para que en la primera fila no aparezcan los nombres de los campos, es decir, que sean datos directamente.

En phpMyAdmin pulsas sobre la tablas que acabas de crear y una vez mostrado que está vacía, pulsa Importar. Haces el mismo procedimiento de antes y lo que te hará será un INSERT por cada fila de tu CSV.

Mostrar mis bases de datos y tablas en MySQL. Clonar una tabla

19 de noviembre de 2013 Deja un comentario

Desde la consola de MySQL, para obtener los nombres de las bases de datos que tengo en el servidor al que estoy conectado utilizaré la orden:

show databases;

Si, una vez conectado a una base de datos, quiero saber los nombres de las distintas tablas que contiene esa base de datos utilizaré:

show tables;

Si quiero conocer la estrutura de una tabla en concreto utilizaré:

desc mitabla;

Y un consejo, una vez que vayamos a hacer algún ALTER a una tabla o a borrarle elementos, si esta tabla es de vital importancia, será mejor hacernos una copia de seguridad. Una opción es clonar la tabla. Para hacerlo la mejor opción es utilizar las dos siguientes órdenes:

create table clon_mitabla like mitabla;
insert into clon_mitabla select * from mitabla;

Con la primera copio la estructura y con la segunda copio los datos.

 

Generar bases de datos de prueba

27 de julio de 2013 Deja un comentario

Voy a empezar a trabajar en un nuevo proyecto personal, tiene que ver con Google Charts y con la API de Google Maps, así que pronto iré profundizando en el tema e iré subiendo nuevos posts.

Para empezar, necesito una base de datos con la que probar. Como siempre, he ido a buscar por ahí bases de datos de prueba y me he encontrado con la página:

www.generatedata.com

Está en beta y si quieres que te guarden tus datasets tendrás que donar algo. Si no, puedes generar tus datos online y descargarlos en tu PC o, incluso, descargarte su script en tu servidor y trabajar desde él.

Yo he hecho la prueba de la generación online de datos para MySQL y es altamente satisfactorio. He creado mi base de datos de VENTAS de una manera simple. Por ponerle una pega, te genera siempre 100 registros de cada tabla, pero la solución es fácil, generas varios ficheros SQL y sólo en el primero metes el CREATE TABLE y el DROP TABLE.

Solucionar problemas con el cotejamiento UTF8 – ISO 8859-1

25 de julio de 2013 Deja un comentario

Resulta que tengo una base de datos cuyo cotejamiento es ISO 8859-1.

No tenía ningún problema al mostrar los datos en mi página web debido a que tenía puesta la siguiente directiva:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />

Además, los ficheros php que componen mi página los había generado con el Bloc de Notas, por lo que todo estaba correcto, todo funcionaba correctamente.

Desde que utilizo Aptana, me apetece migrar la página a UTF8. Se puede configurar en el Aptana para que los ficheros generados estén en ISO 8859-1, pero prefiero migrarlo todo a UTF8.

Comienzo a redactar la página, todo bien, en Aptana, con mis ficheros en UTF8, pero entonces surge un problema. Quiero hacer una página dinámica que lea de la base de datos. Por ahora no quiero migrar la base de datos a UTF8, debo mantenerla en ISO8859-1, ya que la página antigua sigue funcionando.

Si leo datos de la base de datos y los muestro en la página, aparecen caracteres raros para las ñ, tildes, diéresis y demás. ¿Cómo se soluciona esto?

Con PHP es fácil:

$cadenabien = utf8_encode($row[1]);

Suponiendo que $row es el resultado de una sentencia mysql_fetch_row.

La función utf8_encode() recibe una cadena de caracteres y la transforma al juego de caracteres UTF8.

Diagramas E/R con DIA

23 de marzo de 2013 Deja un comentario

Dia, herramienta gratuita para crear diagramas entidad/relación

Dia es una aplicación para crear diagramas técnicos. Tiene versiones en Linux y Windows. Es Software Libre.

https://live.gnome.org/Dia


Instalar MySQL en Ubuntu

17 de marzo de 2013 Deja un comentario

Ejecutamos la orden:

sudo apt-get install mysql-server

En primer lugar nos pregunta la contraseña del superusuario (root).

Después nos informará de que debe descargar X MB de Internet e instalarlos en nuestro equipo y que si deseamos continuar. Tras contestar con una simple S, instala MySQL y nos pregunta la contraseña del root de la base de datos:

Captura de pantalla de 2013-03-17 13:42:14

Introducimos la contraseña del administrador de base de datos y continúa configurando la base de datos.

Captura de pantalla de 2013-03-17 13:46:34

Ya tenemos MySQL instalado.

 

 

 

Paginación de registros

26 de octubre de 2012 Deja un comentario

En situaciones en las cuales una consulta retorna muy muchos datos, en vez de enviarlos todos al navegador, se puede enviar un conjunto limitado de registros. Luego, mediante hipervínculos, ver el resto de datos. Por ejemplo, cuando hacemos búsquedas con el servidor google, generalmente no nos retorna todas las direcciones donde se encuentran los resultados buscados, nos retorna páginas con 10 enlaces por página (pensemos el tiempo de transferencia si nos retornara 1.000.000 de enlaces).
Bueno, ahora resolvamos con el lenguaje PHP este problema de paginación:

<?php
if (isset($_REQUEST['pos']))
  $inicio=$_REQUEST['pos'];
else
  $inicio=0;
?>
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysql_connect("localhost","root","") or
  die("Problemas en la conexion");
mysql_select_db("base1",$conexion) or
  die("Problemas en la selección de la base de datos");
$registros=mysql_query("select alu.codigo as 
                       codigo,nombre,mail,codigocurso, 
                       nombrecurso from alumnos as alu
                       inner join cursos as cur on cur.codigo=alu.codigocurso
                       limit $inicio,2", $conexion) or
  die("Problemas en el select:".mysql_error());
$impresos=0;
while ($reg=mysql_fetch_array($registros))
{
  $impresos++;
  echo "Codigo:".$reg['codigo']."<br>";
  echo "Nombre:".$reg['nombre']."<br>";
  echo "Mail:".$reg['mail']."<br>";
  echo "Curso:".$reg['nombrecurso']."<br>";
  echo "<hr>";
}
mysql_close($conexion);
if ($inicio==0)
  echo "anteriores ";
else
{
  $anterior=$inicio-2;
  echo "<a href=\"pagina1.php?pos=$anterior\">Anteriores </a>";
}
if ($impresos==2)
{
  $proximo=$inicio+2;
  echo "<a href=\"pagina1.php?pos=$proximo\">Siguientes</a>";
}
else
  echo "siguientes";
?>
</body>
</html>

Hay muchas cosas importantes en este ejemplo, lo primero que vemos es el bloque que rescata a partir de qué registro ir mostrando:

if (isset($_REQUEST['pos']))
  $inicio=$_REQUEST['pos'];
else
  $inicio=0;
?>

La función isset retorna verdadero si existe la variable que le pasamos como parámetro, en este caso le estamos pasando la componente pos del vector asociativo $_REQUEST. Cuando llamamos por primera vez a esta página, lo hacemos : pagina1.php sin parámetros, por lo que el if se verifica como falso. Es decir la variable $inicio se carga con el valor 0.

Otro concepto importante es la cláusula limit que es propiedad del gestor MySQL. Mediante esta cláusula limitamos la cantidad de registros que retorna el select. El primer valor del limit indica a partir de cual registro y el segundo la cantidad de registros. Es decir si un select sin limit retorna 100 registro, luego utilizando por ejemplo la sintaxis limit 50,25 nos retornará, de esa lista de 100 registros, a partir del registro de la posición 50, 25 registros.
En nuestro problema indicamos que retorne desde valor que tenga la variable $inicio y como cantidad 2 (páginas con 2 registros):

$registros=mysql_query("select alu.codigo as 
                       codigo,nombre,mail,codigocurso, 
                       nombrecurso from alumnos as alu
                       inner join cursos as cur on cur.codigo=alu.codigocurso
                       limit $inicio,2", $conexion) or

Seguidamente mostramos todos los registros retornados y además los contamos:

$impresos=0;
while ($reg=mysql_fetch_array($registros))
{
  $impresos++;
  echo "Codigo:".$reg['codigo']."<br>";
  echo "Nombre:".$reg['nombre']."<br>";
  echo "Mail:".$reg['mail']."<br>";
  echo "Curso:".$reg['nombrecurso']."<br>";
  echo "<hr>";
}

Ahora vemos dónde dispondremos los hipervínculos, hacia adelante o atrás:

if ($inicio==0)
  echo "anteriores ";
else
{
  $anterior=$inicio-2;
  echo "<a href=\"pagina1.php?pos=$anterior\">Anteriores </a>";
}

Si la variable $inicio vale 0 significa que no hay registros antes de éste, por lo que sólo mostramos un texto «anteriores». En caso que la variable $inicio sea distinta de 0, se ejecuta el else, donde disponemos un hipervínculo con la misma página e inicializando el parámetro pos con el valor de $inicio menos 2.
Si el contador $impresos tiene el valor 2 significa que posiblemente hay más registros por mostrar y debemos disponer un hipervínculo con la misma página pero inicializando el parámetro pos con el valor de $inicio más 2:

if ($impresos==2)
{
  $proximo=$inicio+2;
  echo "<a href=\"pagina1.php?pos=$proximo\">Siguientes</a>";
}
else
  echo "siguientes";

Consultas SELECT sobre BD Contactos

2 de octubre de 2012 Deja un comentario

Una vez importada a MySQL la BD CONTACTOS.MDB hacer las siguientes consultas:

  1. Número de registros de la tabla Usuarios
  2. Nombre y apellidos de las personas que viven en Valencia.
  3. Nombre, apellidos y dirección de correo de las mujeres que no están casadas.
  4. Alias y número de teléfono de los hombres que tienen la EGB o el Bachillerato.
  5. Alias, número de teléfono móvil y dirección de correo de los hombres que hablan castellano y tienen los ojos marrones
  6. Alias de las mujeres que les gusta el deporte
  7. Alias de Mujeres heterosexuales o bisexuales que miden más de 1.60m
  8. Alias de Hombres que no tienen fobias y cuyos ingresos mensuales sean mayores de 1000 euros
  9. Número de hombres por cada ciudad
  10. Número medio de hijos que tienen las mujeres que pesan más de 70 kg
  11. Alias de las mujeres rubias de entre 25 y 40 años.
  12. Altura media de los hombres calvos
  13. Nombre de las ciudades en la que la media del peso de los hombres es superior a 80.
  14. Nombre de las ciudades en las que hay más de 5 mujeres dadas de alta