Herramientas de usuario

Herramientas del sitio


bases_de_datos:mysql:aspectos_basicos

Aspectos Básicos de MySQL

Introducción a MySQL

SQL son las siglas de Structured Query Language, es decir, lenguaje estructurado de consulta.
Es un lenguaje estándar no procedimental que se utiliza para definir, gestionar y manipular la información contenida en una Base de Datos Relacional.
SQL está compuesto a su vez por 3 lenguajes diferentes, en función de las acciones a realizar:

  • Lenguaje de Definición de Datos (DDL):
    • Crear objetos de base de datos: Sentencia CREATE
    • Eliminar objetos de la base de datos: Sentencia DROP
    • Modificar objetos de la base de datos: Sentencia ALTER
  • Lenguaje de manipulación de datos (DML):
    • Recuperar información: Sentencia SELECT
    • Actualizar información:
      • Añadir filas: Sentencia INSERT
      • Eliminar filas: Sentencia DELETE
      • Modificar filas: Sentencia UPDATE
  • Lenguaje de control de datos:
    • Crear privilegios de acceso a los datos: Sentencia GRANT
    • Quitar privilegios de acceso a los datos: Sentencias REVOKE

Existen diferentes Sistemas Gestores de Bases de Datos (SGBD) que implementan el estándar SQL, aunque en cada uno muestra algunas diferencias respecto de los demás, de forma que el estándar aunque muy similar, no se implementa exactamente igual en cada SGBD.
De entre los distintos SGBD que existen, nos vamos a centrar en MySQL, por ser libre, de código abierto y suficientemente potente para multitud de aplicaciones.
Además, hay que saber que MySQL no distingue mayúsculas de minúsculas, al contrario de otros gestores de bases de datos.

Datos

Literales

La información que almacena MySQL se guarda con literales que pueden ser de diferentes tipos:

  • Numérico: Contruidos mediante una cadena de dígitos que pueden llevar un punto decimal, y que pueden ir precedidos por un signo + ó -. Ejemplos: -273.6, 25.5, +25.5
  • Cadena: Las cadenas de caracteres van siempre encerradas entre comillas simples. Ejemplos: 'Hola mundo', 'Pza. del Carmen, s/n'.
  • Fecha: Son constantes de cadena que mantienen un formato determinado, de forma que el sistema puede extraer información de forma automática referente a la fecha y/o hora.

Tipos de datos

Existen multitud de tipos de datos en MySQL. A continuación se comentarán algunos de los más significativos:

  • Datos numéricos:
    • INT[(num)] o INTEGER[(num)]: Datos numéricos enteros.
      • num: Número de dígitos.
    • FLOAT(escala, precisión): Datos numéricos en coma flotante.
      • escala: Número de dígitos.
      • precisión: Número de posiciones decimales.
    • NUMERIC(escala, precisión): Datos numéricos.
      • escala: Número de dígitos.
      • precisión: Número de posiciones decimales. Si no se especifica, se supone 0 y funcionará como un INTEGER.
  • Cadenas de caracteres:
    • CHAR(long): Guarda cadenas de caracteres de longitud fija.
      • long: Número de caracteres. Puede estar comprendido entre 0 y 255. 1 carácter = 1 byte.
    • VARCHAR(long): Guarda cadenas de caracteres de longitud variables, de forma que sólo ocupa el espacio de datos correspondiente al número de caracteres introducidos.
      • long: Número de caracteres. Puede estar comprendido entre 0 y 255. 1 carácter = 1 byte.
    • TEXT: Guarda cadenas de caracteres de longitud máxima 65.535 caracteres. Su modo de almacenamiento es igual que el VARCHAR.
    • LONGTEXT: Guarda cadenas de caracteres de longitud máxima 4 Gigacaracteres (4.294.967.295 caracteres). Su modo de almacenamiento es igual que el VARCHAR.
  • Fechas:
    • DATE: Almacena fechas en formato 'YYYY-MM-DD'.
    • DATETIME: Almacena fechas y horas en formato 'YYYY-MM-DD HH:MM:SS'.
    • TIME: Almacena horas en formato 'HH:MM:SS'.
  • Binarios:
    • BOOLEAN: Almacena valores binarios 1 (TRUE), 0 (FALSE).

Operadores

Los operadores utilizados en MySQL son:

  • Aritméticos: Suma (+), resta (-), multiplicación (*), división (/), división entera (Div).
  • De comparación:
    • Retornan según proceda Verdadero, Falso o Nulo (TRUE, FALSE, NULL).
    • Igual(=), distinto(!=), menor(<), menor o igual(<=), mayor(>), mayor o igual(>=), BETWEEN / NOT BETWEEN, IN / NOT IN, IS NULL / IS NOT NULL, LIKE.
      • BETWEEN:
        • Forma de uso: BETWEEN valor1 AND valor2
        • Retorna TRUE si el resultado está contenido en el rango especificado, incluyendo los extremos.
      • IN:
        • Forma de uso: IN(lista de valores separados por comas)
        • Retorna TRUE si el valor comparado se encuentra dentro del listado especificado.
      • IS NULL:
        • Retorna TRUE si el valor comparado es Nulo (NULL).
      • LIKE:
        • Permite comparar dos cadenas de caracteres, con la peculiaridad de que admite caracteres comodines. Los caracteres comodines permiten utilizar patrones de comparación.
          • %: Permite ser sustituido por cualquier número de caracteres.
          • _: Permite ser sustituido por cualquier carácter en esa posición.
  • Lógicos:
    • NOT(!), AND(&&), OR(||), XOR.
    • Pueden expresarse por su literal, o por el símbolo.

La prioridad de los operadores es la marcada en la siguiente tabla:

Prioridad Operador Operación
*, /, DIV Multiplicación, división
+, - Suma, resta
=, !=, <, >, ⇐, >=, IS, LIKE, BETWEEN, IN Comparación
NOT Negación
ANDConjunción
OR, XOR Inclusión, exclusión

Funciones

Existen multitud de funciones predefinidas en MysQL, que le dan una gran potencia al lenguaje. A continuación se indican las más comunes:

  • Funciones aritméticas:
Función Operación
ABS(num) Valor absoluto de num
CEIL(num) Techo: Entero más pequeño mayor que num
FLOOR(num) Suelo: Entero más grande menor que num
EXP(num) Potencia de e: Devuelve e elevado a num
LN(num) Logaritmo neperiano (en base e) de num
LOG(num) Logaritmo en base 10 de num
MOD(num1, num2) Resto de num1/num2
PI() Número PI
POWER(num1, num2) num1 elevado a num2
RAND() Genera un número aleatorio comprendido entre 0 y 1
ROUND(num1, num2) Devuelve num1 redondeado a num2 decimales (0 si no se especifica num2)
SIGN(num) Devuelve -1, 0, 1 si num es menor, igual o mayor a cero, respectivamente
SQRT(num) Raíz cuadrada de num
TRUNCATE(num1, num2) num1 truncado a num2 decimales (0 decimales si no se especifica num2)
  • Funciones de caracteres:
Función Operación
ASCII(c1) Devuelve el código ASCII del carácter c1
CHAR(num) Devuelve el carácter cuyo código ASCII es num
CONCAT(cad1, cad2 [,cad3…]) Concatena las cadenas cad1, cad2, cad3…
INSERT(cad1, pos, len, cad2) Devuelve cad 1 con len caracteres sustituidos por cad2, desde pos en adelante
LENGTH(cad1) Longitud de cad1
LOCATE(cad1, cad2, pos) Devuelve la posición de la primera ocurrencia de cad1 en cad2 empezando desde pos
LOWER(cad1) cad1 en minúsculas
LPAD(cad1, n, cad2) Añade a cad1 por la izquierda cad2 hasta n caracteres (si se omite cad2, añade espacios)
LTRIM(cad1) Suprime blancos a la izquierda de cad1
REPLACE(cad1, cad2, cad3) devuelve cad1 con todas las ocurrencias de cad2 reemplazadas por cad3
RPAD(cad1, n, cad2) Añade a cad1 por la derecha cad2 hasta n caracteres (si se omite cad2, añade espacios)
RTRIM(c1) Suprime blancos a la derecha de c1
SUBSTR(c1, n, m) Devuelve una subcadena a partir de c1, comenzando en la posición n, tomando m caracteres
UPPER(cad1) La cadena cad1 en mayúsculas
  • Funciones de fecha:
Función Operación
ADDDATE(fecha, num) Fecha incrementada num días
SUBDATE(fecha, num) Fecha decrementada num días
DATE_ADD(fecha, INTERVAL num formato) Devuelve Fecha incrementada num veces lo indicado en formato(DAY, WEEK, HOUR, SECOND…)
DATE_SUB(fecha, INTERVAL num formato) Devuelve Fecha decrementada num veces lo indicado en formato(DAY, WEEK, HOUR, SECOND…)
DATEDIFF(fecha1, fecha2) Número de días entre fecha1 y fecha2
DAYNAME(fecha) Nombre del día de la semana de fecha
DAYOFMONTH(fecha) Número del día del mes de fecha
DAYOFWEEK(fecha) Número del día de la semana de fecha (de 1 a 7, empezando por el domingo)
DAYOFYEAR(fecha) Número del día del año de fecha (de 1 a 366)
WEEKOFYEAR(fecha) Número de la semana de fecha (de 1 a 53)
MONTH(fecha) Número del mes de fecha (de 1 a 12)
YEAR(fecha) Número del año con cuatro dígitos de fecha (de 0 a 9999)
HOUR(tiempo) Hora de tiempo (de 0 a 23)
MINUTE(tiempo) Minutos de tiempo (de 0 a 59)
SECOND(tiempo) Segundos de tiempo (de 0 a 59)
CURDATE() Fecha actual en formato 'YYYY-MM-DD'
CURTIME() Hora actual en formato 'HH:MM:SS'
SYSDATE() Fecha y hora actual con formato 'YYYY-MM-DD HH:MM:SS'

Para la conversión a otro tipo de datos: DATE_FORMAT(fecha, formato)

  • Devuelve una cadena de caracteres con el formato especificado.
  • El formato es una cadena de caracteres que incluye las siguientes máscaras:
Máscara Descripción
%a Abreviatura (3 letras) del nombre del día de la semana
%b Abreviatura (3 letras) del nombre del día del mes
%c Número del mes (de 1 a 12)
%e Número del día del mes (de 0 a 31)
%H Número de la hora en formato 24 horas (de 00 a 23)
%h Número de la hora en formato 12 horas (de 01 a 12)
%i Número de minutos (de 00 a 59)
%j Número del día del año (de 000 a 366)
%M Nombre del mes
%m Número del mes (de 01 a 12)
%p AM o PM
%r Hora en formato 12 horas (hh:mm seguido de AM o PM)
%s Número de segundos (00 a 59)
%T Hora en formato 24 horas (hh:mm:ss)
%u Número de semana en el año (de 00 a 53)
%W Nombre del día de la semana
%w Número del día de la semana ( 0: domingo a 6 sábado)
%Y Número del año con cuatro dígitos
%y Número del año con dos dígitos
  • Funciones de comparación:
Función Operación
GREATEST(lista de valores) Mayor de la lista de columnas o expresiones de columna
LEAST(lista de valores) Menor de la lista de columnas o expresiones de columna
IFNULL(exp1, exp2) Si exp1 es nulo devuelve exp2, sino devuelve exp1
ISNULL(exp) TRUE si exp es NULL
STRCMP(cad1, cad2) TRUE si cad1 y cad2 son iguales (NULL si alguna de las dos es NULL)
  • Otras funciones:
Función Operación
DATABASE() Nombre de la base de datos actual
USER() Usuario y host de la sesión, de la forma: usuario@host
VERSION() Devuelve una cadena indicando la versión de MySQL que estamos utilizando

Valores Nulos (NULL)

En SQL (y por extensión en MySQL) la ausencia de valor se representa como NULL.
Al operar con valores nulos hay que tener en cuenta las siguientes consideraciones:

  • Si realizamos operaciones aritméticas, cualquier expresión aritmética que contenga algún valor nulo, dará como resultado un valor nulo.
  • Si comparamos expresiones que contienen el valor nulo, con otro valor nulo, el resultado no es mayor, ni menor, ni igual. En SQL un valor nulo no es igual a otro valor nulo.

Para evitar los problemas con valores nulos a la hora de que al realizar cálculos o comparaciones entre columnas, es recomendable usar la función IFNULL para devolver otro valor en caso de que un valor sea NULL.

Expresiones y condiciones

Una expresión es un conjunto de variables, literales, funciones, operadores y paréntesis.
Los paréntesis sirven para variar el orden de prioridad y sólo son obligatorios en ese caso.

Las condiciones son casos especiales de expresiones, en cuyo caso el resultado será TRUE, FALSE o NULL.

Control de Transacciones: COMMIT y ROLLBACK

Los gestores de bases de datos disponen de dos comandos que permiten confirmar o deshacer los cambios realiazdos en la base de datos:

  • COMMIT: Confirma los cambios realizados haciéndolos permanentes.
  • ROLLBACK: Deshace los cambios realizados.

Cuando hacemos modificaciones en las tablas no se hacen efectivas (escritura en disco) hasta que no ejecutamos la sentencia COMMIT. Cuando ejecutamos comandos DDL o de definición de datos (CREATE, DROP, ALTER), se ejecuta un COMMIT automático, así como cuando se cierra la sesión.

Cuando ejecutamos ROLLBACK, se deshacen todos los cambios hasta el último COMMIT ejecutado.

Existe una variable, AUTO_COMMIT, que indica la forma de trabajo, pudiéndo tomar los valores 0 y 1:

  • 0: AUTO_COMMIT está desactivado. Hay que hacer COMMIT de forma manual, por lo que es posible usar ROLLBACK.
  • 1: AUTO_COMMIT está activado. Cada vez que se ejecute una sentencia se hará automáticamente COMMIT, por lo que no es posible hacer ROLLBACK.

Para cambiar el valor de esta variable:

  SET AUTO_COMMIT = 0;
  SET AUTO_COMMIT = 1;

Este control de transacciones puede ser extremadamente útil edurante la fase de depuración y prueba de nuestra base de datos.

bases_de_datos/mysql/aspectos_basicos.txt · Última modificación: por alberto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki