manejador de base de datos

90
Manejador de Base de Datos MySQL Instructor: Ing. Román Hernández

description

mysql

Transcript of manejador de base de datos

Page 1: manejador de base de datos

Manejador de Base de Datos MySQL Instructor: Ing. Román Hernández

Page 2: manejador de base de datos

Sistema de gestión de bases de datos MySQL

• MySQL, el sistema de gestión de bases de datos SQL Open Source más popular, lo desarrolla, distribuye y soporta MySQL AB. MySQL AB es una compañía comercial, fundada por los desarrolladores de MySQL.

• Es una compañía Open Source de segunda generación que une los valores y metodología Open Source con un exitoso modelo de negocio.

• El sitio web MySQL (http://www.mysql.com/) proporciona la última información sobre MySQL y MySQL AB.

Page 3: manejador de base de datos

Sistema de gestión de bases de datos MySQL

• MySQL es un sistema de gestión de bases de datos • Una base de datos es una colección estruturada de datos. Puede ser

cualquier cosa, desde una simple lista de compra a una galería de pintura o las más vastas cantidades de información en una red corporativa. Para añadir, acceder, y procesar los datos almacenados en una base de datos, necesita un sistema de gestión de base de datos como MySQL Server. Al ser los computadores muy buenos en tratar grandes cantidades de datos, los sistemas de gestión de bases de datos juegan un papel central en computación, como aplicaciones autónomas o como parte de otras aplicaciones.

Page 4: manejador de base de datos

Sistema de gestión de bases de datos MySQL

• MySQL es un sistema de gestión de bases de datos relacionales • Una base de datos relacional almacena datos en tablas separadas en lugar

de poner todos los datos en un gran almacén. Esto añade velocidad y flexibilidad. La parte SQL de “MySQL” se refiere a “Structured Query Language”. SQL es el lenguaje estandarizado más común para acceder a bases de datos y está definido por el estándar ANSI/ISO SQL. El estándar SQL ha evolucionado desde 1986 y existen varias versiones. En este manual, "SQL-92" se refiere al estándar del 1992, “SQL:1999” se refiere a la versióndel 1999, y “SQL:2003” se refiere a la versión actual del estándar. Usamos la frase “el estándar SQL” para referirnos a la versión actual de SQL.

Page 5: manejador de base de datos

Sistema de gestión de bases de datos MySQL

• MySQL software es Open Source. • Open Source significa que es posible para cualquiera usar y modificar el

software. Cualquiera puede bajar el software MySQL desde internet y usarlo sin pagar nada. Si lo desea, puede estudiar el código fuente y cambiarlo para adapatarlo a sus necesidades. El software MySQL usa la licencia GPL (GNU General Public License), http://www.fsf.org/licenses/, para definir lo que puede y no puede hacer con el software en diferentes situaciones. Si no se encuentra cómodo con la GPL o necesita añadir código MySQL en una aplicación comercial, puede comprar una licencia comercial. Consulte la Introducción a las Licencias MySQL para más información (http://www.mysql.com/company/legal/licensing/).

Page 6: manejador de base de datos

Sistema de gestión de bases de datos MySQL

• El servidor de base de datos MySQL es muy rápido, fiable y fácil de usar • El servidor MySQL también tiene una serie de características prácticas

desarrolladas en cooperación con los usuarios. Puede encontrar comparaciones de rendimiento de MySLQL Server con otros sistemas de gestión de bases de datos en la página de comparativas de rendimiento.

• MySQL Server se desarrolló originalmente para tratar grandes bases de datos mucho más rápido que soluciones existentes y ha sido usado con éxito en entornos de producción de alto rendimiento durante varios años. MySQL Server ofrece hoy en día una gran cantidad de funciones. Su conectividad, velocidad, y seguridad hacen de MySQL Server altamente apropiado para acceder bases de datos en Internet

Page 7: manejador de base de datos

Sistema de gestión de bases de datos MySQL

• MySQL Server trabaja en entornos cliente/servidor o incrustados • El software de bases de datos MySQL es un sistema cliente/servidor que

consiste en un servidor SQL multi-threaded que trabaja con diferentes backends, programas y bibliotecas cliente, herramientas administrativas y un amplio abanico de interfaces de programación para aplicaciones (APIs).

• También proporcionan el MySQL Server como biblioteca incrustada multi-threaded que puede enlazar en su aplicación para obtener un producto más pequeño, rápido y fácil de administrar

Page 8: manejador de base de datos

Sistema de gestión de bases de datos MySQL

• Una gran cantidad de software de contribuciones está disponible para MySQL • Es muy posible que su aplicación o lenguaje favorito soporte el servidor de

base de datos MySQL.

• La forma oficial de pronunciar "MySQL" es "My Ess Que Ell" (no "my sicuel"), pero no importa si lo pronuncia como "my sicuel" o de alguna otra forma.

Page 9: manejador de base de datos

Historia de MySQL

• Empezaron con la intención de usar mSQL para conectar a sus tablas utilizando sus propias utinas rápidas de bajo nivel (ISAM). Sin embargo y tras algunas pruebas, llegaron a la conclusión que mSQL no era lo suficientemente rápido o flexible para sus necesidades. Esto provocó la creación de una nueva interfaz SQL para su base de datos pero casi con la misma interfaz API que mSQL. Esta API fue diseñada para permitir código de terceras partes que fue escrito para poder usarse con mSQL para ser fácilmente portado para el uso con MySQL.

• La derivación del nombre MySQL no está clara. Los directorios base y un gran número de sus bibliotecas y herramientas han tenido el prefijo "my" por más de 10 años. Sin embargo, la hija del cofundador Monty Widenius también se llama My. Cuál de los dos dió su nombre a MySQL todavía es un misterio, incluso para sus desarrolladores

Page 10: manejador de base de datos

Historia de MySQL

• El nombre del delfín de MySQL (logo) es "Sakila", que fue elegido por los fundadores de MySQL AB de una gran lista de nombres sugerida por los usuarios en el concurso "Name the Dolphin" (ponle nombre al delfín). El nombre ganador fue enviado por Ambrose Twebaze, un desarrollador de software Open Source de Swaziland, África. Según Ambrose, el nombre femenino de Sakila tiene sus raíces en SiSwate, el idioma local de Swaziland. Sakila también es el nombre de una ciudad en Arusha, Tanzania, cerca del país de origen de Ambrose, Uganda.

Page 11: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Interioridades y portabilidad

• Escrito en C y en C++

• Probado con un amplio rango de compiladores diferentes

• Funciona en diferentes plataformas.

• Usa GNU Automake, Autoconf, y Libtool para portabilidad.

• APIs disponibles para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, y Tcl.

Page 12: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Interioridades y portabilidad

• Uso completo de multi-threaded mediante threads del kernel. Pueden usarse fácilmente múltiples CPUs si están disponibles.

• Proporciona sistemas de almacenamiento transaccionales y no transaccionales.

• Usa tablas en disco B-tree (MyISAM) muy rápidas con compresión de índice.

• Relativamente sencillo de añadir otro sistema de almacenamiento. Esto es útil si desea añadir una interfaz SQL para una base de datos propia.

Page 13: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Interioridades y portabilidad

• Un sistema de reserva de memoria muy rápido basado en threads.

• Joins muy rápidos usando un multi-join de un paso optimizado.

• Tablas hash en memoria, que son usadas como tablas temporales.

• Las funciones SQL están implementadas usando una librería altamente optimizada y deben ser tan rápidas como sea posible. Normalmente no hay reserva de memoria tras toda la inicialización para consultas.

Page 14: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Interioridades y portabilidad

• El código MySQL se prueba con Purify (un detector de memoria perdida comercial) así como con Valgrind, una herramienta GPL (http://developer.kde.org/~sewardj/).

• El servidor está disponible como un programa separado para usar en un entorno de red cliente/servidor. También está disponible como biblioteca y puede ser incrustado (enlazado) en aplicaciones autónomas. Dichas aplicaciones pueden usarse por sí mismas o en entornos donde no hay red disponible.

Page 15: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Tipos de columnas

• Diversos tipos de columnas: enteros con/sin signo de 1, 2, 3, 4, y 8 bytes de longitud, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET, ENUM, y tipos espaciales OpenGIS.

• Registros de longitud fija y longitud variable.

Page 16: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Sentencias y funciones

• Soporte completo para operadores y funciones en las cláusulas de consultas SELECT y WHERE.

• Soporte completo para las cláusulas SQL GROUP BY y ORDER BY. Soporte de funciones de agrupación (COUNT(), COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX(), MIN(), y GROUP_CONCAT()).

• Soporte para LEFT OUTER JOIN y RIGHT OUTER JOIN cumpliendo estándares de sintaxis SQL y ODBC.

Page 17: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Sentencias y funciones

• Soporte para alias en tablas y columnas como lo requiere el estándar SQL.

• DELETE, INSERT, REPLACE, y UPDATE devuelven el número de filas que han cambiado (han sido afectadas). Es posible devolver el número de filas que serían afectadas usando un flag al conectar con el servidor.

• El comando específico de MySQL SHOW puede usarse para obtener información acerca de la base de datos, el motor de base de datos, tablas e índices. El comando EXPLAIN puede usarse para determinar cómo el optimizador resuelve una consulta.

Page 18: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Sentencias y funciones

• Los nombres de funciones no colisionan con los nombres de tabla o columna. Por ejemplo, ABS es un nombre válido de columna. La única restricción es que para una llamada a una función, no se permiten espacios entre el nombre de función y el paréntesis '(' a continuación.

• Puede mezclar tablas de distintas bases de datos en la misma consulta.

Page 19: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Seguridad

• Un sistema de privilegios y contraseñas que es muy flexible y seguro, y que permite verificación basada en el host. Las contraseñas son seguras porque todo el tráfico de contraseñas está cifrado cuando se conecta con un servidor.

Page 20: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Escalabilidad y límites

• Soporte a grandes bases de datos. Usamos MySQL Server con bases de datos que contienen 50 millones de registros. También conocemos a usuarios que usan MySQL Server con 60.000 tablas y cerca de 5.000.000.000.000 de registros.

• Se permiten hasta 64 índices por tabla (32 antes de MySQL 4.1.2). Cada índice puede consistir desde 1 hasta 16 columnas o partes de columnas. El máximo ancho de límite son 1000 bytes (500 antes de MySQL 4.1.2).Un índice puede usar prefijos de una columna para los tipos de columna CHAR, VARCHAR, BLOB, o TEXT.

Page 21: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Conectividad

• Los clientes pueden conectarse con el servidor MySQL usando sockets TCP/IP en cualquier plataforma. En sistemas Windows de la familia NT (NT,2000,XP, o 2003), los clientes pueden usar named pipes para la conexión. En sistemas Unix, los clientes pueden conectarse usando ficheros socket Unix.

Page 22: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Localización

• El servidor puede proporcionar mensajes de error a los clientes en muchos idiomas

• Soporte completo para distintos conjuntos de caracteres, incluyendo latin1 (ISO-8859-1), german, big5, ujis, y más. Por ejemplo, los caracteres escandinavos 'â', 'ä' y 'ö' están permitidos en nombres de tablas y columnas. El soporte para Unicode está disponible

Page 23: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Localización

• Todos los datos se guardan en el conjunto de caracteres elegido. Todas las comparaciones para columnas normales de cadenas de caracteres son case-insensitive.

• La ordenación se realiza acorde al conjunto de caracteres elegido. Es posible cambiarla cuando arranca el servidor MySQL.

• MySQL Server soporta diferentes conjuntos de caracteres que deben ser especificados en tiempo de compilación y de ejecución.

Page 24: manejador de base de datos

Principales características de MySQL

• La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.

• Clientes y herramientas

• MySQL server tiene soporte para comandos SQL para chequear, optimizar, y reparar tablas. Estos comandos están disponibles a través de la línea de comandos y el cliente mysqlcheck. MySQL también incluye myisamchk, una utilidad de línea de comandos muy rápida para efectuar estas operaciones en tablas MyISAM.

• Todos los programas MySQL pueden invocarse con las opciones --help o -? para obtener asistencia en línea.

Page 25: manejador de base de datos

Estabilidad de MySQL

• Las descripciones mayormente se corresponden con la versión 3.23, 4.0 y 4.1 de MySQL Server. Todos los bugs reportados y conocidos se arreglan en la última versión, con las excepciones listadas en las secciones de bugs y que están relacionados con problemas de diseño • El diseño de MySQL Server es multi capa, con módulos independientes.

Algunos de los últimos módulos se listan a continuación con una indicación de lo bien testeados que están:

• Replicación (Estable)

• Hay grandes grupos de servidores usando replicación en producción, con buenos resultados. Se trabaja para mejorar características de replicación en MySQL 5.x.

Page 26: manejador de base de datos

Estabilidad de MySQL

• InnoDB tablas (Estable)

• El motor de almacenamiento transaccional InnoDB es estable y usado en grandes sistemas de producción con alta carga de trabajo

• Búsquedas Full-text (Estable)

• Búsquedas Full-text es ámpliamente usada.

• MyODBC 3.51 (Estable)

• MyODBC 3.51 usa ODBC SDK 3.51 y es usado en sistemas de producción ampliamente. Algunas cuestiones surgidas parecen ser cuestión de las aplicaciones que lo usan e independientes del controlador ODBC o la base de datos subyacente.

• BDB tablas (Estable)

• El código Berkeley DB es muy estable, pero todavía lo están mejorando con la interfaz del motor de almacenamiento transaccional BDB en MySQL Server.

Page 27: manejador de base de datos

Instalar MySQL

• La manera recomendada de instalar MySQL en Linux es utilizando paquetes RPM. Los RPMs de MySQL están generados en SuSE Linux 7.3, pero deberían funcionar con cualquier versión de Linux que soporte rpm y el uso de glibc.

• En la mayoría de los casos, sólo será necesario instalar los paquetes MySQL-server y MySQL-client para conseguir una instalación de MySQL en funcionamiento. Los otros paquetes no se necesitan para una instalación estándar. Si se deseara ejecutar un servidor MySQL-Max, el cual posee capacidades adicionales, se debería instalar también el RPM MySQL-Max. No obstante, ello debería hacerse solamente después de instalar el RPM de MySQL-server

Page 28: manejador de base de datos

Instalar MySQL

• Si se obtiene un mensaje de error de dependencias cuando se intentan instalar los paquetes MySQL (por ejemplo, “error: removing these packages would break dependencies: libmysqlclient.so.10 is needed by ...”), se deberá instalar también el paquete MySQL-shared-compat, el cual incluye las bibliotecas para compatibilidad de versiones anteriores (libmysqlclient.so.12 para MySQL 4.0 y libmysqlclient.so.10 para MySQL 3.23).

Page 29: manejador de base de datos

Instalar MySQL

• Muchas distribuciones Linux aún incluyen MySQL 3.23 y usualmente enlazan las aplicaciones dinámicamente para economizar espacio de disco. Si estas bibliotecas compartidas están en un paquete separado (por ejemplo, MySQL-shared), es suficiente con dejar ese paquete instalado y solamente actualizar el servidor MySQL y los paquetes cliente (los cuales están enlazados estáticamente y no dependen de bibliotecas compartidas). Para aquellas distribuciones que incluyen las bibliotecas compartidas en el mismo paquete que el servidor MySQL (por ejemplo, Red Hat Linux), se puede instalar el RPM MySQL-shared 3.23 o utilizar en su lugar el paquete MySQL-shared-compat

Page 30: manejador de base de datos

Instalar MySQL

• Muchas distribuciones Linux aún incluyen MySQL 3.23 y usualmente enlazan las aplicaciones dinámicamente para economizar espacio de disco. Si estas bibliotecas compartidas están en un paquete separado (por ejemplo, MySQL-shared), es suficiente con dejar ese paquete instalado y solamente actualizar el servidor MySQL y los paquetes cliente (los cuales están enlazados estáticamente y no dependen de bibliotecas compartidas). Para aquellas distribuciones que incluyen las bibliotecas compartidas en el mismo paquete que el servidor MySQL (por ejemplo, Red Hat Linux), se puede instalar el RPM MySQL-shared 3.23 o utilizar en su lugar el paquete MySQL-shared-compat

Page 31: manejador de base de datos

Instalar MySQL

• Una forma sencilla de hacerlo en debian es acudiendo al gestor de paquetes Synaptic quien se encarga de realizar las validación de los paquetes requeridos y realizar la instalación conocida la clave de superusuario

• Otra forma es realizar la instalación vía Terminal y se debe tener conocimiento de los paquetes requeridos y comandos a ejecutar en caso de que falle la instalación

Page 32: manejador de base de datos

Ingresar a MySQL

• Para ingresar una vez se completa la instalación será vía terminal para ello se deben aplicar una serie de comandos: • @shell>mysql –h host –u nombre_usuario –p

• En esta sentencia la opción –h permite indicar el nombre del host al cual vamos a generar la conexión –u indica el nombre del usuario en nuestro caso trabajaremos con el superusuario root y –p es para indicar al pront que solicite la contraseña para validar el acceso

Page 33: manejador de base de datos

Ingresar a MySQL

• Nuestro terminal debe mostrar si todo fue correcto • mysql>

• Es en este momento que estamos en nuestro gestor de bases de datos mysql

• Si queremos saber cual versión tenemos instalada debemos aplicar la sentencia sql:

• Show variables like „%version%‟;

Page 34: manejador de base de datos

Entrada de comandos MySQL

• MySQL utiliza el lenguaje SQL de bases de datos para trabajar. Esas serán las sentencias que normalmente se utilizan en el terminal.

• Sobre los comandos hay que tener en cuenta que: • Da lo mismo escribir en mayúsculas o en minúsculas

• Todos los comandos terminan con el símbolo “;”

• El comando termina su ejecución si en la línea de comandos observamos el texto

mysql>

• Se pueden realizar operaciones aritméticas (3*6)

Page 35: manejador de base de datos

Entrada de comandos MySQL

• Sobre los comandos hay que tener en cuenta que: • En la misma línea se pueden colocar dos comandos (por ejemplo: SELECT

3*6; SELECT SIN(PI());) siempre y cuando los puntos y comas se coloquen de forma adecuada

• Una instrucción puede abarcar más de 1 línea (para informar que no ha terminado la instrucción, el terminal coloca el símbolo “->”, en lugar del normal “mysql>”).

• Una instrucción se puede anular antes del punto y coma, colocando el texto “\c”.

• Las cadenas de texto literal puede ir entre símbolos de comilla simple o símbolos de comilla doble. Si se pulsa Enter antes de cerrar la cadena, el terminal lo índica mostrando „> o “> en lugar del habitual --> o mysql>.

Page 36: manejador de base de datos

Bases de Datos en MySQL

• MySQL almacena las bases de datos en la carpeta data que está en la carpeta raíz de la instalación del programa. Cada base de datos crea una carpeta en la que aparecen los archivos necesarios para el correcto funcionamiento de la aplicación.

Page 37: manejador de base de datos

Bases de Datos en MySQL

• Comando SHOW DATABASES • El comando show databases permite visualizar las bases de datos

actualmente activas.

• Aplicar el comando en terminal

mysql> show databases;

Page 38: manejador de base de datos

Bases de Datos en MySQL

• Comando USE NOMBRE_DATABASE

El comando use nos permite utilizar una base de datos. Es (junto a quit) el único comando que no requiere punto y coma.

Page 39: manejador de base de datos

Bases de Datos en MySQL

• Comando CREATE DATABASE NOMBRE_DATABASE • Este comando permitirá crear una nueva base de datos con nombre

NOMBRE_DATABASE

• Aplicar el comando en terminal

mysql> create database test;

La base de datos recién creada estará representada por una carpeta dentro de la carpeta data de mysql.

Aunque la base esté creada, habrá que utilizar el comando use para trabajar con

ella.

Page 40: manejador de base de datos

Bases de Datos en MySQL

• Comando DROP DATABASE NOMBRE_DATABASE

El comando drop database nos permite eliminar una base de datos que tenga el nombre NOMBRE_DATABASE, en este caso elimina la BD y todas las tablas que contenga

Page 41: manejador de base de datos

Tablas en Bases de Datos MySQL

• Mostrar tablas

• El comando show tables; muestra las tablas de la base de datos actual

• Se puede utilizar la sintaxis show tables from bd, donde bd es el nombre de una base de datos que no tiene porque estar en uso.

Page 42: manejador de base de datos

Tablas en Bases de Datos MySQL

• Crear tablas • Esta es ya una operación muy importante. Es el comando create table el que la

realiza.

• Este comando funciona con esta sintaxis: • create table nombreTabla (nombrecampo1 tipodatos(tamaño), nombrecampo2

tipodatos(tamaño),...);

mysql> create table personas (nombre varchar(30),

->apellido1 varchar(30), apellido2 varchar(30),

->telefono varchar(9));

Page 43: manejador de base de datos

Tablas en Bases de Datos MySQL

• Crear tablas • Indicar opciones en los campos en la creación

• Durante la creación de campos se pueden indicar opciones (las opciones se enumeran más adelante) sobre los campos. Estas opciones se colocan tras el tipo de datos del campo.

mysql> create table personas (nombre varchar(30) not null,

->apellido1 varchar(30), apellido2 varchar(30),

->telefono varchar(9) unique);

Page 44: manejador de base de datos

Tablas en Bases de Datos MySQL

• Crear tablas • Establecimiento de la clave durante la creación

• Se puede añadir la palabra primary key tras el tipo de datos del campo que se desea sea la clave de la tabla. Si la clave es más de un campo se realiza colocando la palabra primary key como nombre de campo, seguida de los campos que forman la clave entre paréntesis.

mysql> create table pieza (codigo1 varchar(5),

->codigo2 int(2), peso int,

->descripcion text,

->primary key (codigo1, codigo2);

Page 45: manejador de base de datos

Tablas en Bases de Datos MySQL

• Estructura de las tablas • El comando describe seguido del nombre de una tabla, nos permite ver la

estructura completa de una tabla.

mysql> describe test;

• Mostrará por pantalla el detalle de la estructura de la tabla test

Page 46: manejador de base de datos

Tablas en Bases de Datos MySQL

• Tipos de datos numéricos

Tipo Espacio Rango Rango sin signo

TINYINT 1 byte -128 a 127 0 a 255

SMALL INT 2 bytes -32768 a 32767 0 a 65535

MEDIUM INT 3 bytes -8388608 a 8388607 0 a 16777215

INT 4 bytes -2147483648 a 2147483647 0 a 4294967295

BIG INT 8 bytes -9,223x10^18 a 9,223x10^18 0 a 18,446x10^36

FLOAT(M,D) 4 bytes Varían según parámetros

DOUBLE(M,D) 8 bytes Varían según parámetros

DECIMAL(M,D) M+2 bytes Varían según parámetros

Page 47: manejador de base de datos

Tablas en Bases de Datos MySQL

• Tipos de datos • Modificadores numéricos

• Los números enteros se pueden colocar sin signo adelantando la palabra UNSIGNED.

• Los decimales permiten indicar el número de la mantisa (M) y el número de decimales (D).

• A los números enteros se les puede asignar el modificador AUTO_INCREMENT para que el campo marcado almacene más rápido los valores.

• Se puede declarar una anchura de columna de esta forma: INT(8). Si además se define la columna con ZEROFILL, entonces se colocan ceros a la izquierda hasta llegar a esa anchura.

Page 48: manejador de base de datos

Tablas en Bases de Datos MySQL

• Tipos de datos texto

Tipo Espacio Tamaño máximo

CHAR(X) x bytes 255 bytes

VARCHAR(X) x + 1 bytes 255 bytes

TINYTEXT x + 1 bytes 255 bytes

TINYBLOB x + 1 bytes 255 bytes

TEXT x + 2 bytes 65535 bytes

Page 49: manejador de base de datos

Tablas en Bases de Datos MySQL

• Tipos de datos texto

Tipo Espacio Tamaño máximo

BLOB x + 2 bytes 65535 bytes

MEDIUMTEXT x + 3 bytes 1,6 MB

MEDIUMBLOB x + 3 bytes 1,6 MB

LONGTEXT x + 4 bytes 4,2 GB

LONGBLOB x + 4 bytes 4,2 GB

Page 50: manejador de base de datos

Tablas en Bases de Datos MySQL

• Tipos de datos texto • Los que más se usan son CHAR y VARCHAR. Ambos almacenan textos pero

CHAR los almacena de tamaño fijo y VARCHAR optimiza tamaño variable. Dicho de otra forma: si definimos un CHAR de tamaño 8, cualquier registro ocupa 8 bytes. Con VARCHAR si algún registro ocupa 4 caracteres, en disco ocupará 5 bytes independientemente del tamaño indicado inicialmente.

• TEXT y BLOB se usan para grandes cantidades de texto variable. La diferencia es que los tipos BLOB distinguen entre mayúsculas y minúsculas.

Page 51: manejador de base de datos

Tablas en Bases de Datos MySQL

• Tipos de datos lógicos

• Son los tipos BIT o BOOL que admiten los valores 0 o 1.

• Ocupan un byte siempre;

• Tipos de datos enumerado • Permite declarar campos cuyo contenido puede ser una de entre varias

opciones.

• Ejemplo CREATE TABLE personas (Sexo ENUM(„M‟, „H‟),...

Page 52: manejador de base de datos

Tablas en Bases de Datos MySQL

• Tipos de datos fecha

Tipo Rango Formato

DATE Del 1 de enero de 1001 al 31/12 del 9999 año-mes-día

DATETIME De las 0 horas del 1/1/1001 a las 0 horas del 31/12/9999 Año-mes-día horas:minutos:segundos

TIMESTAMP De las 0 horas del 1/1/1970 a las 0 horas del 31/12/2037

Año-mes-día horas:minutos:segundos Permite estos tamaños: 14 (aaaammddhhmmss) 12 (aaaammddhhmm) 8 (aaaammdd) 6 (aammdd) 4 (aamm) 2 (aa)

Page 53: manejador de base de datos

Tablas en Bases de Datos MySQL

• Tipos de datos fecha

Tipo Rango Formato

TIME Una hora en formato HH:MM:SS

YEAR Año desde 1901 a 2037

Page 54: manejador de base de datos

Tablas en Bases de Datos MySQL

• Modificadores

Modificador Se aplica a Uso

AUTO_INCREMENT Enteros El valor se va incrementando automáticamente en cada registro

BINARY CHAR y VARCHAR Convierte las cadenas a forma binaria en la que se distingue entre mayúsculas y minúsculas

DEFAULT Todos menos TEXT y BLOB Coloca un valor por defecto

NOT NULL Todos Impide que un campo sea nulo

PRIMARY KEY Todos Hace que el campo se considere clave primaria

UNIQUE Todos Evita la repetición de valores

UNSIGNED Enteros Sólo valen los valores positivos

ZEROFILL Enteros Rellena con ceros a la izquierda hasta llegar al ajuste

Page 55: manejador de base de datos

Operaciones con Tablas

• Modificar tablas • Es el comando alter table el encargado de realizar los cambios dependiendo

del orden especificado en la sentencia

mysql>alter table personas change nombre nombre varchar(20);

En el ejemplo el nombre pasa a tener tamaño 20.

Page 56: manejador de base de datos

Operaciones con Tablas

• Modificar tablas

mysql>alter table personas change nombre identif

-->varchar(20);

El campo nombre pasa a llamarse identif

Page 57: manejador de base de datos

Operaciones con Tablas

• Modificar tablas

mysql>alter table personas change identif nombre

-->varchar(25) not null default "pepe";

• Cambia el campo identif para que ahora sea pepe, tenga 25 caracteres de anchura, no admita nulos y establezca como valor por defecto, la cadena "pepe".

Page 58: manejador de base de datos

Operaciones con Tablas

• Modificar tablas

• Cambio de nombre de la tabla:

mysql>alter table personas rename clientes;

Page 59: manejador de base de datos

Operaciones con Tablas

• Borrar tablas • Se usa la sintaxis: drop table seguida del nombre de la tabla.

• Borrar columnas • La sintaxis es:

alter table tabla drop columnaABorrar;

Page 60: manejador de base de datos

Operaciones con Tablas

• Añadir columnas • Se usa:

alter table tabla add nuevaColumna Tipo...;

Page 61: manejador de base de datos

Operaciones con Tablas

• Varias operaciones a la vez • Se pueden realizar varias operaciones a la vez mediante la instrucción alter

table si se separan con comas:

alter table ejemplo drop campo1, add campo2, change campo3 campo4 int(8);

• De este modo, alter table se convierte en una instrucción muy versátil para modificar la estructura de las bases de datos.

Page 62: manejador de base de datos

Operaciones con Tablas

• Tablas innoDB • MySQL proporciona un motor de gestión de base de datos llamado innoDB

que permite una mayor potencia sobre el control y gestión de tablas. Las tablas normales, son creadas con el motor myISAM, para hacer que sean innoDB, basta con colocar el texto type=innoDB tras la lista de campos de la tabla en la creación.

• También se puede convertir una tabla al tipo innoDB si se ejecuta la orden:

alter table tabla type=innoDB;

Page 63: manejador de base de datos

Operaciones con Tablas

• Tablas innoDB

• Las tablas innoDB permiten transacciones, operaciones concurrentes y

control estricto de referencias (lo que se conoce como integridad referencial) entre otros detalles. Pero requieren más potencia por parte del sistema en el que se ejecuta MySQL.

Page 64: manejador de base de datos

Operaciones con Tablas

• Introducir datos a una tabla • Hay dos métodos:

• El comando Insert permite añadir datos manualmente a una tabla.

• Ejemplo:

mysql> insert into personas values('Pedro',

->'Hernández','Crespo','979898989');

• El orden debe coincidir con la estructura de la tabla donde se esta insertando

Page 65: manejador de base de datos

Operaciones con Tablas

• Introducir datos a una tabla • Hay dos métodos:

• El comando Insert permite añadir datos manualmente a una tabla.

mysql> insert into personas(nombre,apellido1,apellido2)

-> values ('Pedro','Hernández',"crespo");

• En ese caso la columna del teléfono tomaría el valor null indicando que está

vacío.

Page 66: manejador de base de datos

Operaciones con Tablas

• Introducir datos a una tabla • Hay dos métodos:

• Insertar datos desde un archivo externo

• Otra manera más poderosa es utilizar un archivo externo en el que se colocan los datos de la tabla. En ese archivo, cada registro se separa con un carácter concreto (que suelen ser los caracteres \r \n, resultado de la tecla intro) A su vez en el mismo registro, cada campo se separa con otro carácter (coma por ejemplo) y los valores de los campos podrían ir delimitados con otros caracteres (como las comillas).

• Para conseguir los datos en este formato, se pueden colocar a mano, o bien se pueden crear a través de software especial que consiga colocar registros en este formato (programas como Calc, Editores de texto u otros muchos poseen herramientas para realizar estas operaciones).

load data local infile "ruta" into table tabla;

Page 67: manejador de base de datos

Operaciones con Tablas

• Introducir datos a una tabla • Hay dos métodos:

load data local infile "ruta" into table tabla;

• La ruta es la ruta completa al archivo de texto que posee los datos. La tabla es la tabla a la cual se desean añadir dichos datos. Para que esta instrucción funcione correctamente, el orden de los campos en la tabla debe ser el mismo que en el archivo. Salvo que se indique una lista con el orden de los campos según aparecen en el archivo externo. Esta lista se coloca entre paréntesis, al final de la instrucción load data.

Page 68: manejador de base de datos

Operaciones con Tablas

• Introducir datos a una tabla • Hay dos métodos:

mysql>load data infile

->“/home/Escritorio/datos.txt”

->into table personas

->(nombre, cedula, apellido1, apellido2);

Page 69: manejador de base de datos

Creación de índices

• Para crear índices, se utiliza: • create index nombreÍndice ON tabla (lista_campos);

• lista_campos es una lista (separada por comas de los campos que forman la clave). Se puede indicar tras el nombre del índice, la palabra UNIQUE que indicaría que no se admiten valores duplicados en el índice (por lo que los campos que forman parte del índice no podrán repetir valores).

Page 70: manejador de base de datos

Creación de índices

• Desde la versión 3.23 de MySQL es más recomendable la sintaxis:

• alter table tabla add index (lista_campos);

• Ejemplo: • alter table clientes add index (apellidos, nombre);

• La instrucción anterior crea un índice sobre la lista de campos apellidos y nombre. Se le puede poner nombre al índice colocando el nombre antes del paréntesis de los campos.

Page 71: manejador de base de datos

Creación de índices

• Ejemplo: • alter table clientes add index nombreCompleto(apellidos,nombre);

• En la lista de campos, tras cada campo se puede colocar la palabra ASC (orden ascendente, se toma por defecto) o DESC (orden descendente).

• Se pueden crear índices únicos si coloca la palabra unique antes de la palabra index. Los índices únicos prohíben la repetición de valores en los campos que forman el índice:

• alter table clientes add unique index nombreCompleto(apellidos, nombre);

Page 72: manejador de base de datos

Creación de claves principales

• Si se pone como nombre del índice la palabra primary key, entonces el índice crea la clave principal de la tabla: • alter table clientes add primary key (campos);

• Si se desea eliminar el índice: • drop index (índice) ON tabla;

• También (recomendada desde la versión 3.23): • alter table tabla drop index (índice);

• alter table tabla drop primary key;

Page 73: manejador de base de datos

Creación de claves principales

• En la creación de una tabla se pueden crear también los índices.

• Ejemplo: • create table personas ( cedula char(10), nombre varchar(25) not null,

apellidos varchar(50) not null, dirección varchar(50), primary key (cedula), key datosCompletos (apellidos,nombre));

• En el ejemplo, datosCompletos es el nombre del índice basado en los campos apellidos y nombre.

Page 74: manejador de base de datos

Creación de claves externas

• Sólo funcionan correctamente si las tablas son innoDB. También se pueden crear claves secundarias. Las claves secundarias se crean para campos de una tabla relacionados con campos que forman índices en otras tablas (normalmente forman claves principales, es decir son los campos que permiten relacionar tablas). La creación de estas claves se puede hacer desde create table.

• Sintaxis: • create table tabla ( lista y propiedades de campo e índices, constraint

nombreDeClave foreign key (camposQueFormaClave) references tabla (camposClaveDeLatabla));

Page 75: manejador de base de datos

Creación de claves externas

• La palabra constraint es opcional y permite indicar un nombre para la clave externa.

• foreign key indica los campos de esta tabla relacionados con campos de otra.

• references indica el nombre de la tabla relacionada y el nombre de los campos relacionados.

Page 76: manejador de base de datos

Creación de claves externas

• Se pueden indicar al final las palabras:

• on delete cascade. Que hace que al borrar registros en la tabla principal, se

borren registros en la relacionada.

• on update cascade. Que permite que al cambiar los datos de los campos en la tabla principal, se actualicen en la relacionada.

• on delete set null. Hace que si se borra un registro de la tabla principal, los valores de los campos relacionados se coloque a null

Page 77: manejador de base de datos

Creación de claves externas

• on update set null. Al cambiar valores principales se dejan a null los relacionados.

• on update restrict. No permite modificar valores en la tabla principal si hay registros relacionados en otra tabla.

• on delete restrict. No permite eliminar valores en la tabla principal si hay registros relacionados en otra tabla.

• on update no action

• on delete no action

Page 78: manejador de base de datos

Consultas

• Obtener registros • La instrucción select es la fundamental del lenguaje SQL y por tanto de

MySQL. Esta instrucción permite realizar consultas sobre la base de datos. El formato básico de la instrucción es:

select ListaDecampos from tablas where condición;

Page 79: manejador de base de datos

Consultas

• Seleccionar todos los datos • El campo especial “*” sirve para representar todos los campos de una tabla.

Así la instrucción:

select * from personas;

• Muestra todos los campos de la tabla personas.

Page 80: manejador de base de datos

Consultas

• Seleccionar campos concretos • Se puede indicar la lista exacta de campos que queremos que aparezcan en

la consulta.

• Por ejemplo:

select nombre, apellido1, apellido2 from personas;

Page 81: manejador de base de datos

Consultas

• Condiciones • El apartado where de la instrucción select nos permite poner una condición

de modo que sólo aparezcan en la consulta los registros que cumplan la condición. Se pueden utilizar operadores de comparación.

• Ejemplos:

select nombre, apellido1, apellido2 from personas where edad=25;

select nombre, apellido1, apellido2 from personas where edad>25;

Page 82: manejador de base de datos

Consultas

• Condiciones • También se puede realizar consultas con el operador OR o AND:

• Ejemplos:

select nombre, apellido1, apellido2 from personas where (edad>25 AND edad<50);

select nombre, apellido1, apellido2 from personas where (nombre=”Luis” OR nombre=”Pedro”);

Page 83: manejador de base de datos

Consultas

• Condiciones • También se pueden usar patrones mediante la cláusula like.

• Ejemplo:

select * from personas where apellido1 like “g%”;

• Sacaría las personas cuyo primer apellido empiece por “g”. Es decir el

símbolo “%” hace de comodín.

Page 84: manejador de base de datos

Consultas

• Condiciones • También se pueden usar patrones mediante la cláusula like.

• Ejemplo:

select * from personas where apellido1 like “g%”;

• Sacaría las personas cuyo primer apellido empiece por “g”. Es decir el

símbolo “%” hace de comodín.

Page 85: manejador de base de datos

Consultas

• Comodín

Comodín Significado

“g%” Que empiece por g

“%g” Que termine por g

“%g%” Que tenga una g

“_____” Que tenga cinco caracteres

Page 86: manejador de base de datos

Consultas

• Ordenar • La cláusula order by sirve para ordenar en base a una o más columnas.

Ejemplo:

select * from personas order by apellido1, apellido2, nombre;

• Normalmente la ordenación se realiza en ascendente (de la A a la Z o de menor a mayor en el caso de los números), pero se puede colocar la palabra clave desc tras el nombre del campo por el que se ordena, para indicar que ese campo irá en descendente:

select * from personas order by edad desc;

Page 87: manejador de base de datos

Consultas

• Consultas de campos calculados • Esto permite realizar cálculos con las columnas de consulta. El resultado de

cada cálculo se coloca en una nueva columna de la tabla. Para los cálculos se pueden utilizar operadores aritméticos y funciones.

• Ejemplo:

select precio, precio * 0.16 from articulos;

Page 88: manejador de base de datos

Consultas

• Consultas Join:

Page 89: manejador de base de datos

Ejercicio

Nos han pedido que hagamos el diseño de una BD para una pequeña empresa que se dedica a organizar estancias en el extranjero dentro de una familia. La información que se desea almacenar es la siguiente:

Se tienen contactos con familias de diferentes países que ofrecen alguna de las habitaciones de su hogar para acoger algún chico (por un módico precio). De cada una de estas familias se conoce el nombre, la edad mínima y máxima de sus hijos, número de hijos y correo electrónico.

Cada una de estas familias vive en una casa, de la que se conoce la dirección (calle, numero, código postal, ciudad y país), el periodo de disponibilidad de la casa, el tiempo mínimo de estancia, el tiempo máximo y el precio de cada habitación por día.

Page 90: manejador de base de datos

Ejercicio

Se dispone también de información de los clientes que desean mandar a sus hijos a alguna de estas familias: idcliente, nombre, dirección (calle, numero, código postal, ciudad) y su correo electrónico.

En la BD se almacena información de las reservas y estancias realizadas por alguno de los clientes. Cada estancia o reserva la realiza un cliente, un cliente puede reservar varias habitaciones al mismo tiempo (por ejemplo para varios de sus hijos), para un periodo determinado (fecha_llegada, fecha_salida).

Nos gustaría también información depositada por los clientes sobre las casas en las que ya han estado (comentarios).