Apuntes para trabajar con MySQL

Estos son algunas notas o apuntes que me sirven de referencia a la hora de trabajar con MySQL.

No pretendo que sean de uso básico, sino más bien de recordatorio cuando algo se olvida o no se recuerda exactamente su sintaxis.

Directorios habituales

  • Programa: /usr/local/var/
  • Datos: /usrl/local/mysql/data/ (o /var/lib/mysql/)
  • mysqladmin variables; => Muestra variables y directorios.

Permiso base de datos

  • mysql -h servidor -u usuario -p => Posteriormente nos pedirá el password. Conectar con el servidor (ip o nombre) a través del usuario.
  • GRANT ALL ON basedatos TO usuario@localhost IDENTIFIED BY “password”; => Dar permisos a usuario con el password indicado sobre la base de datos indicada. Acceso solo desde localhost (normalmente es suficiente ya que si lo queremos para scripts PHP o similar se ejecutarán, seguramente en localhost).
  • GRANT ALL ON basedatos TO usuario@% IDENTIFIED BY “password”; => Idem a anterior, pero % indica que se podrá conectar desde cualquier IP.
  • GRANT ALL ON basedatos.* TO usuario@localhost IDENTIFIED BY “password”; => Dar permiso al usuario sobre las tablas de la base de datos.
  • mysqladmin -u root password “nuevopassword”; => Asignar contraseña a root.

Trabajar con bases de datos

  • mysql basedatos <crear-basedatos.sql; => Crear una base de datos a través de un fichero.
  • mysqlshow; => Lista de bases de datos del servidor.
  • mysqlshow basedatos; => Lista de tablas de la base de datos.
  • mysqshow tabla; => Lista de campos (estructura) de la tabla.
  • create database basedatos; => Crea una base de datos.
  • show databases; => Muestra las bases de datos para el usuario actual.

Tipos de campos

  • Enteros: TINYURL (1 byte, -128…127), SMALLINT (2 bytes, -32768…32767), MEDIUMINT (3 bytes), INT (4 bytes), BIGINT (8 bytes).
  • Reales: FLOAT (4 bytes), DOUBLE (8 bytes).
  • Cadenas: CHAR (cadena de longitud fija, si no se usa se rellena con espacios), VARCHAR (cadena de longitud variable).
  • Fechas y horas: DATE (AAAA-MM-DD), TIME (hh:mm:ss), DATETIME (AAAA-MM-DD hh:mm:ss), TIMESTAMP (AAAAMMDDhhmmss).

Trabajo con tablas (SQL)

  • SELECT … ORDER BY … LIMIT 10,5; => Mostrar 5 registros a partir del registro 10.
  • SELECT COUNT(*) FROM tabla; => Mostrar cantidad de registros de una tabla.
  • SELECT COUNT(DISTINCT campo) FROM tabla; => Mostrar cantidad de valores diferentes de un campo en una tabla.
  • SELECT campo, COUNT(*) FROM tabla GROUP BY campo; => Mostrar un campo y la cantidad de veces que aparece en una tabla.
  • SELECT MONTH(fecha) as Mes, MONTHNAME(fecha) as Nombre, COUNT(*) AS Cantidad FROM tabla GROUP BY Nombre ORDER BY Mes; => Dado un campo llamado fecha, mostrar el número de mes, el nombre de mes (en inglés) y la cantidad de registros para dicho mes.
  • SELECT … FROM t1, t2 WHERE t1.id=t2.id; => Mostrar registros coincidentes de dos tablas.

Funciones

  • TO-DAYS(“1997-04-11”) => 729490. Nos devuelve el entero asociado a la fecha.
  • mysql_num_rows() => Cantidad de registros de una tabla.

Consejos y manuales sobre MySQL

Estos son algunos de los enlaces que os propongo de referencia para los que trabajeis con MySQL. Se habla de consejos a la hora de diseñar las tablas de la base base de datos, optimización a la hora de crear de consultas (básicamente desde PHP), y manuales de referencia.

  1. Manual de referencia de MySQL: Oficial, en español, formato PDF.
  2.  10 tips for optimizing MySQL queries: en inglés, recomendaciones para crear consultas.
  3. 10 tips for optimizing MySQL queries (that don’t suck): en inglés, post relacionado con el anterior.
  4. Compactar BBDD en MySQL desde VB.Net: en español, código para conectar y compactar (OPTIMIZE) una tabla utilizando VB.Net.
  5. Optimizando consultas en MySQL: en español. Comparación de diferentes consultas y rendimiento de ellas.

Instalando Debian 4.0 desde diskettes

Acabo de instalar la última versión de Debian, la 4.0, utilizando unos cuantos diskettes viejos. Esos diskettes que ya no sirven para nada. La idea de hacerlo de esta manera, es por un lado por curiosidad y por otro por no querer malgastar un CD o DVD, de esos que todos tenemos de todas las distribuciones de Linux posibles…

Si alguien lo quiere realizar aquí os indico los pasos, es realmente fácil para alguien acostumbrado a instalar cualquier distribución de Linux desde CD o DVD.

La parte más “complicada” es la de crear los diskettes, a partir de ahí no es más que meter un diskette tras otro y realizar la descarga del núcleo y los programas que deseemos desde internet. Con cualquier ADSL normalito será cuestión de unas pocas horas.

Creando los diskettes

  1. Descargar los 5 ficheros .img de FTP Debian (URL para arquitectura i386, para otras arquitecturas: URL)
  2. Necesitamos 5 diskettes para volcar las imágenes, aunque podría ser suficiente con los dos primeros: boot y root.
    1. En Windows: utilizar la herramienta Rawrite para volcar cada imagen a cada diskette.
    2. En Linux: comando:
      dd if=filename of=/dev/fd0 bs=1024 conv=sync ; sync
      Más información en: creating floppies from disk images

    Instalando el sistema

  1. Arrancar con el diskette “boot”, posteriormente nos pedirá el diskette “root”. Una vez dentro de la instalación utilizar la opción de cargar diskettes de drivers con los otros diskettes si los tenemos. Tendremos que configurar el idioma, país, teclado… y para realizar la instalación deberemos de escoger un servidor de internet desde donde efectuar la descarga de paquetes.
  2. Aparte del sistema base y del entorno gráfico que se pueden instalar en la misma instalación, le he añadido los siguientes paquetes: xfce4 y kde. Por un lado, xfce, para tener un sistema ligero (es una máquina Pentium III con 128 MB de RAM) y por otro para tener el otro gestor de ventanas más utilizado aparte de Gnome que viene por defecto con Debian. Para ello: apt-get install xfce4 kde, habiendo entrado previamente en consola como root.

      ¡Suerte!