4.1 Base de datos Relacionales. -...

23
4.1 Base de datos Relacionales. Una base de datos es un conjunto de datos y un gestor de base de datos es una aplicación capaz de manejar este conjunto de datos de manera eficiente y cómoda. Existen muchos tipos de base de daos en función del modo en que almacenan y acceden a la información que almacenan. Pueden ser de tipo relacional, jerárquica, en red, orientada a objetos, etc. Una base de datos relacional se basa en el concepto de relación y la representación que se establece es la correspondiente a la utilización de tablas o relaciones para el almacenamiento de datos, de tal forma que cada renglón es uno de los elementos a guardar y cada columna es una propiedad de dichos elementos. Ejemplos de gestores de base de datos relacionales son: MySQL, SQLite, Oracle, Informix, SyBase, Microsoft SQL Server, PostGress, mSQL, etc. El acceso a los gestores de base de datos se hace a través del lenguaje SQL (Structured Quero Language). Introducción a MySQL. Es uno de los motores de base de datos más usados en Internet, ya que es gratis para aplicaciones no comerciales. Las características principales de MySQL son: Es un gestor de base de datos. Es una base de datos relacional. Es Open Source. El código fuente de MySQL se puede descargar y está accesible a cualquiera, por otra parte, usa la licencia GPL para aplicaciones no comerciales. Es una base de datos muy rápida, segura y fácil de usar. Gracias a la colaboración de muchos usuarios, la base de datos se ha ido mejorando optimizándose en velocidad. Por eso es una de las bases de datos más usadas en Internet. Existe una gran cantidad de software que la usa.

Transcript of 4.1 Base de datos Relacionales. -...

  • 4.1 Base de datos Relacionales.

    Una base de datos es un conjunto de datos y un gestor de base de datos es una aplicación capaz de

    manejar este conjunto de datos de manera eficiente y cómoda.

    Existen muchos tipos de base de daos en función del modo en que almacenan y acceden a la información

    que almacenan.

    Pueden ser de tipo relacional, jerárquica, en red, orientada a objetos, etc.

    Una base de datos relacional se basa en el concepto de relación y la representación que se establece es

    la correspondiente a la utilización de tablas o relaciones para el almacenamiento de datos, de tal forma

    que cada renglón es uno de los elementos a guardar y cada columna es una propiedad de dichos

    elementos. Ejemplos de gestores de base de datos relacionales son: MySQL, SQLite, Oracle, Informix,

    SyBase, Microsoft SQL Server, PostGress, mSQL, etc.

    El acceso a los gestores de base de datos se hace a través del lenguaje SQL (Structured Quero

    Language).

    Introducción a MySQL.

    Es uno de los motores de base de datos más usados en Internet, ya que es gratis para aplicaciones

    no comerciales.

    Las características principales de MySQL son:

    Es un gestor de base de datos.

    Es una base de datos relacional.

    Es Open Source. El código fuente de MySQL se puede descargar y está accesible a cualquiera,

    por otra parte, usa la licencia GPL para aplicaciones no comerciales.

    Es una base de datos muy rápida, segura y fácil de usar. Gracias a la colaboración de muchos

    usuarios, la base de datos se ha ido mejorando optimizándose en velocidad. Por eso es una de

    las bases de datos más usadas en Internet.

    Existe una gran cantidad de software que la usa.

  • Iniciar y Finalizar MySQL.

    En el modulo I, aprendiste a instalar el servidor Web Apache, con el programa de instalación se instala

    también el gestor de base de datos MySQL.

    Los pasos para iniciar son:

    1. Inicia el modo de comandos (MSDOS), capturando en la opción Ejecutar del menú Inicio, el

    comando CMD.

    2. Hay que cambiar al directorio de C:\Appserv\MySQL\bin

    3. Para iniciar MySQL, hay que capturar: MySQL.exe y presionar enter.

    4. El prompt del sistema operativo cambiara, por lo que estas dentro de MySQL, tal como se

    muestra en la siguiente figura:

    Para finalizar con MySQL, basta captura el comando “quit”.

    Conexión con el servidor MySQL.

  • Para conectarse al servidor, se requiere de un nombre de usuario (login) y de una contraseña (password).

    Si el servidor al que deseamos conectarnos está en una máquina diferente de la nuestra, también

    necesitamos indicar el nombre o la dirección IP de dicho servidor. La forma de conexión es la siguiente:

    mysql -h NombreDelServidor -u NombreDeUsuario -p

    Cuando ejecutamos este comando, se nos pedirá que proporcionemos también la contraseña para el

    nombre de usuario que estamos usando.

    Si la conexión al servidor MySQL se pudo establecer de manera satisfactoria, recibiremos el mensaje de

    bienvenida y estaremos en el prompt de mysql, tal como se mostró en la figura anterior.

    mysql>

    Este prompt nos indica que mysql está listo para recibir comandos.

    Algunas instalaciones permiten que los usuarios se conecten de manera anónima al servidor corriendo en

    la máquina local. Si es el caso de nuestra máquina, debemos de ser capaces de conectarnos al servidor

    invocando a mysql sin ninguna opción:

    shell> mysql

    Comandos básicos de MySQL.

    Un comando normalmente consiste de una sentencia SQL seguida por un punto y coma. Cuando

    escribimos un comando, mysql lo envía al servidor para que lo ejecute, nos muestra los resultados y

    regresa el prompt indicando que está listo para recibir más comandos.

    MySQL muestra los resultados de la consulta como una tabla (filas y columnas). La primera fila contiene

    etiquetas para las columnas. Las filas siguientes muestran los resultados de la consulta. Normalmente las

    etiquetas de las columnas son los nombres de los campos de las tablas que se están usando en alguna

    consulta. Si lo que estamos recuperando es el valor de una expresión las etiquetas en las columnas son

    la expresión en sí.

    MySQL muestra cuántas filas fueron regresadas y cuanto tiempo tardó en ejecutarse la consulta, lo cual

    puede darnos una idea de la eficiencia del servidor, aunque estos valores pueden ser un tanto imprecisos

  • ya que no se muestra la hora del CPU, y porque pueden verse afectados por otros factores, tales como la

    carga del servidor y la velocidad de comunicación en una red.

    Las palabras clave pueden ser escritas usando mayúsculas y minúsculas.

    Algunos comandos de mysql son:

    SELECT VERSION();

    Muestra la versión de MySQL que se esta utilizando.

    SELECT CURRENT_DATE();

    Muestra la fecha actual del sistema.

    SELECT NOW();

    Muestra la fecha y la hora actual del sistema.

    SELECT USER();

    Muestra el usuario que esta conectado en ese momento a MySQL.

    La siguiente figura, muestra la ejecución de los siguientes comandos.

  • Es posible escribir más de una sentencia por línea, siempre y cuando estén separadas por punto y

    coma:

  • Los comandos pueden ser escritos en varias líneas. Mysql determinará en dónde finaliza la

    sentencia cuando encuentre el punto y coma, no cuando encuentre el fin de línea.

    Por ejemplo el siguiente comando:

    Mientras no se de ; el prompt de Mysql, cambia al símbolo ->, esta es la manera en mysql, nos

    indica que esta esperando la finalización de la consulta.

    Cuando se desea cancelar una instrucción, se puede presionar \c y se cancela la operación,

    devolviendo el prompt para aceptar nuevamente consultas.

    mysql> SELECT

    -> USER(),

    -> \c

    mysql>

    En mysql se pueden escribir cadenas utilizando comillas sencillas o comillas dobles (por ejemplo,

    'hola' y "hola"). El prompt (“>) o („>), especifica que una cadena no la hemos finalizado y la instrucción no

    será ejecutada.

    Por ejemplo:

    mysql> SELECT * FROM mi_tabla WHERE nombre = "Lupita AND edad < 30;

  • ">

  • 4.2 Creación de Base de datos.

    Algunos comandos de manipulación de base de datos son:

    Show Databases;

    Muestra la lista de base de datos registradas en el sistema.

    Use nombre_base_datos;

    Cambia o selecciona la base de datos a utilizar.

    Show tables;

    Muestra las tablas existentes en la base de datos seleccionada.

    Create database nombre_base_datos;

    Crea una nueva base de datos.

    La siguiente figura muestra la ejecución de los comandos anteriores.

  • Ejemplo de Creación de base de datos.

    Supongamos que tenemos diversas mascotas en casa y deseamos tener registros de los datos

    acerca de ellas. Podemos hacer esto al crear tablas que guarden esta información, para que

    posteriormente la consulta de estos datos sea bastante fácil y de manera muy práctica.

    Vamos a crear un a base de datos llamada "zoológico", utilizando los comandos correspondientes,

    tal como se muestran a continuación.

    mysql> CREATE DATABASE zoologico;

    Query OK, 1 row affected (0.03sec)

    mysql> USE zoologico

    Database changed

  • mysql>

    Al crear una base de datos no se selecciona ésta de manera automática; debemos hacerlo de

    manera explícita, por ello usamos el comando USE en el ejemplo anterior.

    La base de datos está vacía, como lo indica el comando SHOW TABLES:

    mysql> SHOW TABLES;

    Empty set (0.00 sec)

    La creación de los siguientes elementos en la base de datos, se vera en el siguiente tema.

  • 4.3 Creación de tablas.

    En el tema anterior se creo una base de datos llamada zoológico, ahora vamos a crear las tablas

    correspondientes.

    Se necesitara una tabla que contenga un registro para cada una de nuestras mascotas. Ésta puede

    ser una tabla llamada mascotas, y debe contener por lo menos el nombre de cada uno de nuestros

    animalitos, la información acerca de quien es el dueño de cada mascota. Así mismo, también sería

    interesante contar con alguna información más descriptiva tal como la especie, el sexo de cada mascota

    y la fecha de nacimiento.

    Para crear una tabla se utiliza la sentencia CREATE TABLE, cuya sintaxis es:

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options]

    [select_statement]

    create_definition: column_definition | [CONSTRAINT [symbol]] PRIMARY KEY [index_type]

    (index_col_name,...) | KEY [index_name] [index_type] (index_col_name,...) | INDEX

    [index_name] [index_type] (index_col_name,...) | [CONSTRAINT [symbol]] UNIQUE [INDEX]

    [index_name] [index_type] (index_col_name,...) | [FULLTEXT|SPATIAL] [INDEX] [index_name]

    (index_col_name,...) | [CONSTRAINT [symbol]] FOREIGN KEY [index_name]

    (index_col_name,...) [reference_definition] | CHECK (expr) column_definition: col_name type

    [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] |

    [PRIMARY] KEY] [COMMENT 'string'] [reference_definition]

    column_definition:

    col_name type [NOT NULL | NULL] [DEFAULT default_value]

    [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]

    [COMMENT 'string'] [reference_definition]

    Una simplificación de la instrucción CREATE TABLE, será:

    CREATE TABLE nombre_de_la_tabla

    (columna1 tipo,

    columna2 tipo,

  • columna3 tipo....)

    Para la creación de nuestra tabla mascotas será:

    mysql> CREATE TABLE mascotas(

    -> nombre VARCHAR(20), propietario VARCHAR(20),

    -> especie VARCHAR(20), sexo CHAR(1), nacimiento DATE);

    Query OK, 0 rows affected (0.02 sec)

    mysql>

    Para los campos que almacenan texto como nombre, propietario y especie, se establecen de tipo

    VARCHAR ya que los valores que almacenarán son de longitud variable. No es necesario que la longitud

    de estas columnas sea la misma, ni tampoco que sea de 20. Se puede especificar cualquier longitud

    entre 1 y 255.

    El campo sexo puede ser representado en una variedad de formas, por ejemplo, "m" y "f" por lo que

    se definió de tipo Char de un solo carácter. Por ultimo el tipo de dato DATE para el campos nacimiento.

    Los diferentes tipos de datos que se pueden utilizar para la descripción de los campos se describen

    a continuación.

    Columnas de tipo texto.

    Char Se utiliza como char(numero), cuyo valor de número es de máximo 255

    caracteres. Cuando el contenido del campo es más pequeño que el

    tamaño indicado MySQL lo rellena con espacios.

    Varchar Es utilizado similar a char, con la diferencia de que si el contenido es mas

    pequeño que el valor, solamente se almacenan los caracteres ocupados,

    sin añadir espacios en blanco.

    Tinytext Similar a varchar, almacenando como máximo 255 caracteres.

    text El número máximo de caracteres es de 65,535 que se pueden almacenar.

    mediumtext El número máximo de caracteres es de 16,777,215 que se pueden

  • almacenar.

    longtext El número máximo de caracteres es de 4,294,967,295 que se pueden

    almacenar.

    enum Se utiliza enum(valor1, valor2, …valorn) [default valor].

    Sirve para limitar los posibles valores de una columna.

    Columnas de tipo Numérico

    int /integer Almacena enteros de 0 hasta 4,294,967,295 sin signo. Valores con signo

    desde -2,147,483,648 hasta 2,147,483,647

    Tinyint Utiliza números sin signo desde 0 hasta 255 y con signo desde -128 hasta

    127.

    mediumint Almacena números sin signo desde 0 hasta 1677215 y con signo entre -

    8,388,608 y 8,388,607

    bigint números sin signo desde 0 hasta 18,446,744,073,709,551,615. números

    con signo ente -9,223,372,036,854,775,808 y 9,223,372,036,854,775,807

    El número máximo de caracteres es de 16,777,215 que se pueden

    almacenar.

    float Almacena valores de tipo real y no pueden ser sin signo, manejando entre

    23 y 25 números después del punto decimal.

    Columnas de tipo Fecha y Hora

    datetime Almacena valores con el formato aaaa-mm-dd hh:mm:ss. Los valores están

    entre 1000-01-01 00:00:00 y 9999-12-31 23:59:59

    time Almacena la hora en formato hh:mm:ss y los rangos son de -838:59:59

    hasta 838:59:59

    year Almacena el año en dos dígitos desde 1970 hasta 2069.

    Algunos comandos de manipulación de tables son:

    Show Tables;

    Muestra las tablas existentes en la base de datos actual.

  • Describe nombre_tabla;

    Muestra los campos de la tabla indicada.

    La ejecución de los comandos anteriores se visualiza a continuación.

  • 4.4 Sentencias de manipulación de tablas.

    Inserción de registros.

    Continuando con el ejemplo de las mascotas del zoologico.

    Supongamos que los registros de nuestras mascotas pueden ser descritos por los datos mostrados

    en la siguiente tabla.

    Nombre Propietario Especie Sexo Nacimiento

    Fluffy Arnoldo Gato F 1999-02-04

    Buffy Arnoldo Perro F 1999-05-13

    FanFan Benito Perro M 2000-08-27

    Chispa Omar Ave F 1998-09-11

    Skim Benito Serpiente M 2001-04-29

    Debemos observar que MySQL espera recibir fechas en el formato YYYY-MM-DD, que puede ser

    diferente a lo que nosotros estamos acostumbrados.

    La sentencia INSERT, permite añadir un registro a la vez, proporcionando un valor para cada

    columna en el orden en el cual fueron listados en la sentencia CREATE TABLE.

    La sintaxis de la instrucción Insert es la siguiente:

    INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

    [INTO] tbl_name [(col_name,...)]

    VALUES ({expr | DEFAULT},...),(...),...

    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

    INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

    [INTO] tbl_name

  • SET col_name={expr | DEFAULT}, ...

    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

    INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

    [INTO] tbl_name [(col_name,...)]

    SELECT ...

    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

    Simplificando la sintaxis:

    INSERT INTO nombre_de_la_tabla VALUES (valor1, valor2, valor3, valor4..)

    INSERT INTO nombre_de_la_tabla

    (columna1, columna2, columna3,...)

    VALUES

    (valor1, valor2, valor3,...)

    Las instrucciones de inserción de los valores anteriores son:

    Insert into mascotas values('Fluffy','Arnoldo','Gato','f','1999-02-04');

    Insert into mascotas values('Buffy','Arnoldo','Perro','f','1999-05-13');

    Insert into mascotas values('FanFan','Benito','Perro','m','2000-08-27');

    Insert into mascotas values('Chispa','Omar','Ave','f','1998-09-11');

    Insert into mascotas values('Skim','Benito','Serpiente','m',NULL);

  • NOTA:

    Los valores de cadenas y fechas deben estar encerrados entre comillas. También, con la sentencia

    INSERT podemos insertar el valor NULL directamente para representar un valor nulo, un valor que no

    conocemos.

    Seleccionar Registros.

    La sentencia SELECT es usada para obtener la información guardada en una tabla. La forma

    general de esta sentencia es:

    SELECT LaInformaciónQueDeseamos FROM DeQueTabla WHERE CondiciónASatisfacer

    Aquí, LaInformaciónQueDeseamos es la información que queremos ver. Esta puede ser una lista de

    columnas, o un * para indicar "todas las columnas". DeQueTabla indica el nombre de la tabla de la cual

    vamos a obtener los datos. La claúsula WHERE es opcional. Si está presente, la CondiciónASatisfacer

    especifica las condiciones que los registros deben satisfacer para que puedan ser mostrados.

    Seleccionando todos los datos

    La manera más simple de la sentencia SELECT es cuando se recuperan todos los datos de una

    tabla:

    --- select1.gf ---

    Esta forma del SELECT es útil si deseamos ver los datos completos de la tabla.

    Podemos seleccionar sólo registros particulares de una tabla. Por ejemplo, si deseamos verificar el

    cambio que hicimos a la fecha de nacimiento de Kaiser, seleccionamos sólo el registro de Kaiser de la

    siguiente manera:

  • La comparación de cadenas es normalmente no sensitiva, así que podemos especificar el nombre

    como "chispa", "CHISPA", etc. El resultado de la consulta será el mismo.

    Se puede especificar condiciones sobre cualquier columna, no sólo el "nombre". Por ejemplo, si

    deseamos conocer qué mascotas nacieron después del 2000, tendríamos que usar la columna

    "nacimiento":

    Podemos también combinar condiciones, por ejemplo, para localizar a los perros hembras:

    La consulta anterior usa el operador lógico AND. Hay también un operador lógico OR:

  • El operador AND y el operador OR pueden ser intercambiados. Si hacemos esto, es buena idea

    usar paréntesis para indicar como deben ser agrupadas las condiciones:

    Si no deseamos ver los registros completos de una tabla, entonces tenemos que usar los nombres

    de las columnas en las que estamos interesados separándolas por coma. Por ejemplo, si deseamos

    conocer la fecha de nacimiento de nuestras mascotas, debemos seleccionar la columna "nombre" y

    "nacimiento":

    Para conocer quién tiene alguna mascota, usaremos la siguiente consulta:

  • Sin embargo, debemos notar que la consulta recupera el nombre del propietario de cada mascota, y

    algunos de ellos aparecen más de una vez. Para minimizar la salida, agregaremos la palabra clave

    DISTINCT:

    Se puede usar también una claúsula WHERE para combinar selección de filas con selección de

    columnas. Por ejemplo, para obtener la fecha de nacimiento de los perritos y los gatitos, usaremos la

    siguiente consulta:

  • Se debe notar en los ejemplos anteriores que las filas regresadas son mostradas sin ningún orden

    en particular. Sin embargo, frecuentemente es más fácil examinar la salida de una consulta cuando las

    filas son ordenadas en alguna forma útil. Para ordenar los resultados, tenemos que usar una cláusula

    ORDER BY.

    Aquí aparecen algunos datos ordenados por fecha de nacimiento:

    En las columnas de tipo caracter, el ordenamiento es ejecutado normalmente de forma no sensitiva,

    es decir, no hay diferencia entre mayúsculas y minúsculas. Sin embargo, se puede forzar un

    ordenamiento sensitivo al usar el operador BINARY.

    Para ordenar en orden inverso, debemos agregar la palabra clave DESC al nombre de la columna

    que estamos usando en el ordenamiento:

    Podemos ordenar múltiples columnas. Por ejemplo, para ordenar por tipo de animal, y poner al

    inicio los animalitos más pequeños de edad, usaremos la siguiente consulta:

  • Notar que la palabra clave DESC aplica sólo a la columna nombrada que le precede.

    Actualizacion de registos.

    La instrucción UPDATE permite modificar la columnas de uno o varios renglones de acuerdo a un

    criterio establecido.

    La sintaxis de la instrucción Update es la siguiente:

    UPDATE tabla SET campo = valor1, … [WHERE condicion ];

    Ejemplo, se modificara la fecha de nacimiento de Buffy.

    mysql> UPDATE mascotas SET nacimiento="1989-08-31"

    WHERE nombre="Buffy";

  • Eliminación de registros.

    La instrucción DELETE permite borrar uno o varios renglones de acuerdo a un criterio establecido.

    La sintaxis simplificada de la sentencia SQL DELETE es la siguiente:

    DELETE FROM tabla WHERE condicion;

    La condicion es igual a las utlizadas para consultar elementos de la tabla.

    Continuando con el ejemplo anterior, si se desea eliminar todas las mascotas cuyo propietario es Benito,

    a instrucción seria:

    DELETE FROM mascotas WHERE propietario= “Benito”;

    El resultado se visualiza en la siguiente figura: