Guillermo Caldern Ruiz, Eveling G. Castro Gutierrez Sesin 03
MySQL-Comandos Especializados
I OBJETIVOS
! Ms comandos SQL
II TEMAS A TRATAR
! Crear Tablas ! Cargar Datos en una tabla ! Extraer datos de una tabla ! Seleccionar, borrar, actualizar datos especficos.
III MARCO TEORICO
CREAR TABLAS
La creacin de la base de datos ha sido una tarea sencilla, pero hasta ahora permanece vaca, como le muestra SHOW TABLES: mysql> SHOW TABLES; Empty set (0.00 sec)
La parte difcil es decidir cmo debera ser la estructura de su base de datos: qu tablas necesitar, y qu columnas habr en cada tabla. Quizs quiera una tabla para contener un registro por cada mascota. Esta tabla puede llamarse pet, y debera contener, como mnimo, el nombre de cada animal. Dado que el nombre no es muy relevante por s mismo, tendra que tener ms informacin. Por ejemplo, si ms de una persona en su familia tendr mascotas, puede listar tambin el dueo de cada animal. Y algunos otros datos descriptivos bsicos, como especie y sexo. Sesin 3 Laboratorio de Base de Datos Pgina: 2
Guillermo Caldern Ruiz, Eveling G. Castro Gutierrez Sesin 03 Qu hacer con la edad? Podra ser de inters, pero no es un buen dato para almacenar en una base de datos. La edad cambia a medida que pasa el tiempo, lo cual significa que debera actualizar la base de datos a menudo. En lugar de esto, es mejor almacenar un valor fijo, como la fecha de nacimiento. De este modo, cada vez que requiera saber la edad, podr calcularla como la diferencia entre la fecha de nacimiento y la fecha actual. MySQL provee funciones para realizar clculos con fechas, por lo que no es dificultoso. Almacenar la fecha de nacimiento en lugar de la edad tiene otras ventajas: Puede usar la base de datos para tareas como generar recordatorios para los prximos cumpleaos de mascotas. (Si piensa que este tipo de consultas no es importante, considere que es lo mismo que hara en un contexto de base de datos de negocios para identificar aquellos clientes a los que habr que enviar una tarjeta por su cumpleaos, para conseguir ese toque personal con la asistencia del ordenador). Puede calcular edades en relacin a otras fechas adems de la actual. Por ejemplo, almacenar la fecha de muerte de una mascota le posibilita calcular la edad que tena a ese momento. Probablemente pensar en otros tipos de informacin que resultaran tiles dentro de la tabla pet pero los identificados hasta ahora son suficientes: name (nombre), owner (propietario), species (especie), sex (sexo), birth (nacimiento) y death (muerte). Debe usar la sentencia CREATE TABLE para especificar la estructura de una tabla: mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), -> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
El tipo de dato VARCHAR es una buena eleccin para las columnas name, owner, y species porque los datos que all se almacenan no son de longitud uniforme. En realidad no es necesario que todas estas columnas tengan la misma longitud ni que sta sea 20. En MySQL 5.0.3 y versiones posteriores, normalmente se puede adoptar cualquier longitud entre 1 y 65535, segn lo que se crea ms razonable. (Nota: Anteriormente a MySQL 5.0.3, el lmite de longitud era 255.) Si en el futuro debiera aumentar la longitud de estos campos, MySQL tiene la sentencia ALTER TABLE. Hay varios tipos de datos que podran usarse para representar el sexo en los registros de animales, tal como 'm' y 'f', o 'male' (masculino) y 'female' (femenino). Lo ms simple es usar los caracteres 'm' y 'f'. Es obvio el uso del tipo de dato DATE para las columnas birth y death. Luego de crear una tabla, SHOW TABLES debera producir una salida: mysql> SHOW TABLES; +------------------------+ | Tables in menagerie | +------------------------+ | pet | +------------------------+
Laboratorio de Base de Datos Pgina: 3
Guillermo Caldern Ruiz, Eveling G. Castro Gutierrez Sesin 03 Para verificar que la tabla ha sido creada en la forma esperada, utilice la sentencia DESCRIBE: mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | species | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | +---------+-------------+------+-----+---------+-------+
DESCRIBE puede ser utilizada en cualquier momento, por ejemplo, si olvida los nombres o el tipo de dato de las columnas de la tabla.
Cargar datos en una tabla
Luego de crear la tabla, necesitar completarla con datos. Para esto, le sern de utilidad las sentencias LOAD DATA e INSERT. Suponga que los registros de mascotas fueran como los mostrados a continuacin. (Observe que MySQL espera que las fechas tengan el formato 'AAAA-MM-DD', esto puede ser diferente a lo que acostumbra utilizar). name owner species sex birth death Fluffy Harold cat f 1993-02- 04
Claws Gwen cat m 1994-03- 17
Buffy Harold dog f 1989-05- 13
Fang Benny dog m 1990-08- 27
Bowser Diane dog m 1979-08- 31 1995-07- 29 Chirpy Gwen bird f 1998-09- 11
Whistler Gwen bird 1997-12- 09
Slim Benny snake m 1996-04- 29
Laboratorio de Base de Datos Pgina: 4
Guillermo Caldern Ruiz, Eveling G. Castro Gutierrez Sesin 03 Dado que est comenzando con una tabla vaca, una forma fcil de completarla es creando un fichero de texto que contenga una lnea por cada animal, y luego insertando el contenido del fichero en la tabla mediante una sola sentencia. Para esto, debera crear un fichero de texto llamado pet.txt, conteniendo un registro por linea, con cada valor separado por un carcter de tabulacin, y dispuestos en el orden en el cual se especificaron las columnas en la sentencia CREATE TABLE. Para valores ausentes (como sexo desconocido o fechas de muerte de animales con vida), puede usar valores NULL. Para representar estos valores en el archivo de texto, utilice \N (barra diagonal y N mayscula). Por ejemplo, el registro de Whistler se vera del modo siguiente (el espacio en blanco entre cada valor es un solo carcter de tabulacin): name own er speci es s e x birth dea th Whist ler Gwe n bird \ N 1997- 12-09 \N
Para cargar el fichero pet.txt dentro de la tabla pet, utilice este comando: mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
Si trabaja en Windows, con un editor que emplea \r\n (retorno de carro + nueva linea) como caracteres de fin de lnea, debera usar: mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet -> LINES TERMINATED BY '\r\n';
(En un ordenador Apple bajo OS X, probablemente quiera utilizar LINES TERMINATED BY '\r'.) Opcionalmente puede especificar en la sentencia LOAD DATA los caracteres que actuarn como separador de campo y fin de lnea, pero los valores por defecto son tabulacin y nueva lnea. Estos son suficientes para que la sentencia lea correctamente el fichero pet.txt Si ocurre un error al ejecutar la sentencia, probablemente se deba a que su instalacin de MySQL no tiene habilitada por defecto la capacidad de manejar archivos locales. Consulte Seccin 5.5.4, Cuestiones relacionadas con la seguridad y LOAD DATA LOCAL para obtener informacin sobre cmo cambiar esto. Cuando lo que desea es agregar nuevos registros de a uno por vez, la sentencia INSERT resulta de utilidad. De esta sencilla manera, se suministran valores para cada columna, dispuestos en el orden en el cual se especificaron las columnas en la sentencia CREATE TABLE statement. Suponga que Diane obtiene un nuevo hamster llamado "Puffball". Se podra agregar un nuevo registro, usando la sentencia INSERT de este modo: Laboratorio de Base de Datos Pgina: 5
Guillermo Caldern Ruiz, Eveling G. Castro Gutierrez Sesin 03 mysql> INSERT INTO pet -> VALUES ('Puffball','Diane','hamster','f','1999- 03-30',NULL); Observe que las cadenas alfanumricas y las fechas son representados como cadenas delimitadas por apstrofos. Tambin, con INSERT, se pueden insertar valores NULL directamente, para indicar un valor ausente. No se debe utilizar \N como se hace con LOAD DATA. A partir de este ejemplo queda demostrado que lleva mucho ms trabajo realizar una carga inicial de registros empleando varias sentencias INSERT que si se hace mediante la sentencia LOAD DATA.
Extraer datos de una tabla
La sentencia SELECT es utilizada para traer informacin desde una tabla. La sintaxis general de esta sentencia es:
SELECT seleccionar_Esto FROM desde_tabla WHERE condiciones;
seleccionar_esto es lo que se quiere ver. Puede ser una lista de columnas, o * para indicar todas las columnas. desde_tablaindica la tabla donde estn los datos a recuperar. La clusula WHERE es opcional. Si est presente, condiciones representa las condiciones que cada registro debe cumplir para retornar como resultado.
La forma ms simple de SELECT recupera todo lo que hay en la tabla: mysql> SELECT * FROM pet;
+----------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+--------+---------+------+------------+------------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Fang | Benny | dog | m | 1990-08-27 | NULL | | Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 | | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | | Slim | Benny | snake | m | 1996-04-29 | NULL | | Puffball | Diane | hamster | f | 1999-03-30 | NULL | +----------+--------+---------+------+------------+------------+ Esta forma de SELECT es til si se quiere revisar la tabla completa, por ejemplo, despues de haberla cargado con un conjunto de datos inicial. Por ejemplo, puede ocurrir que la fecha de nacimiento de Bowser no parezca correcta. Consultando los papeles de pedigri, se descubre que el ao correcto de nacimiento es 1989, no 1979. Existen al menos dos formas de solucionarlo: Laboratorio de Base de Datos Pgina: 6
Guillermo Caldern Ruiz, Eveling G. Castro Gutierrez Sesin 03 Editando el fichero pet.txt para corregir el error, vaciando la tabla y volviendola a llenar con los datos. Para esto se usan las sentencias DELETE y LOAD DATA: mysql> DELETE FROM pet; mysql> LOAD DATA LOCAL INFILE 'pet.txt' INTO TABLE pet;
No obstante, si opta por esto, deber volver a cargar el registro de Puffball.
Corrigiendo nicamente el registro errneo. Para esto se usa la sentencia UPDATE:
mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';
UPDATE modifica solo el registro en cuestin y no requiere que se vuelva a llenar la tabla.
Seleccionar registros especficos
Como se ha visto en la seccin anterior, es fcil recuperar una tabla en su totalidad. Slo debe omitir la clusula WHERE en la sentencia SELECT. Pero, generalmente, no se desea ver la tabla completa, especialmente cuando alcanza un gran tamao. En cambio, usualmente, se tiene inters en obtener una respuesta para una consulta en particular, en cuyo caso se especifican algunas restricciones para la informacin que se traer. A continuacin se vern algunas consultas que responden preguntas acerca de las mascotas. Se pueden seleccionar slo algunos registros de la tabla. Por ejemplo, si quisiera verificar los cambios realizados sobre la fecha de nacimiento de Bowser, seleccione el registro de Bowser de esta manera: mysql> SELECT * FROM pet WHERE name = 'Bowser'; +--------+-------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +--------+-------+---------+------+------------+------------+ | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | +--------+-------+---------+------+------------+------------+ La salida confirma que el ao fue correctamente registrado como 1989, ya no es 1979. Normalmente, las comparaciones de cadenas no son case sensitive, por eso puede escribir el nombre como 'bowser', 'BOWSER', etc. El resultado de la consulta ser el mismo. Se pueden indicar condiciones a cumplir por cualquier columna, no solamente por name. Por ejemplo, si quisiera saber qu animales han nacido luego de 1998, necesita evaluar la columna birth: mysql> SELECT * FROM pet WHERE birth > '1998-1-1';
+----------+-------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+-------+ | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | Laboratorio de Base de Datos Pgina: 7
Guillermo Caldern Ruiz, Eveling G. Castro Gutierrez Sesin 03 | Puffball | Diane | hamster | f | 1999-03-30 | NULL | +----------+-------+---------+------+------------+-------+ Se pueden combinar condiciones, por ejemplo para localizar perros hembra: mysql> SELECT * FROM pet WHERE species = 'dog' AND sex = 'f'; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+
La consulta anterior emplea el operador lgico AND. Tambin existe el operador OR: mysql> SELECT * FROM pet WHERE species = 'snake' OR species = 'bird'; +----------+-------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+-------+ | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | | Slim | Benny | snake | m | 1996-04-29 | NULL | +----------+-------+---------+------+------------+-------+
AND and OR pueden ser combinadas, si bien AND tiene mayor precedencia que OR. Si utiliza ambos operadores, es buena idea emplear parntesis para indicar explicitamente la forma en que las condiciones deben agruparse: mysql> SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm') -> OR (species = 'dog' AND sex = 'f');
+-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+
IV (La prctica tiene una duracin de 04 horas) ACTIVIDADES
01. Realice la invocacin a MySQL. 02. Compruebe que el servidor MySQL este funcionando correctamente. 03. Cree la BD Veterinaria 04. Establezca en uso la BD Veterinaria y cree la tabla pet visto en el marco terico 05. Inserte 20 registros adicionales a los vistos en el marco terico. 06. Cree la tabla propietario con los siguientes campos names, lastnames, address. 07. Visualice la tabla propietario. Laboratorio de Base de Datos Pgina: 8
Guillermo Caldern Ruiz, Eveling G. Castro Gutierrez Sesin 03 08. Inserte 5 registros a la tabla propietario con el comando INSERT. 09. Cargue 20 registros a la tabla propietario con el comando LOAD. 10. Utilice el comando DELETE para borrar los registros de las mascotas que cumplan con la condicion que su fecha de nacimiento sea menor de 1990 11. Utilice el comando UPDATE para actualizar las fechas de nacimiento de las mascotas que su fecha de nacimiento sea menor a 1999 por 2004 12. Liste los registros que cumplan con la siguiente condicin : nombre empiece con B y la especie sea un perro (dog).
V
CUESTIONARIO
1. Qu es ? 2. Investigue Ud. acerca de las funciones de tratamiento de cadenas que se utilizan en MySQL para su mejor desempeo en su funcionamiento.