Tema 7 Trabajando Con Mysql
-
Upload
profeimplantacion -
Category
Education
-
view
4.646 -
download
0
Transcript of Tema 7 Trabajando Con Mysql
TEMA 7: TRABAJO CON MYSQL
1.- INTRODUCCION
2.-INSTALACION DE MYSQL
3.-USO DEL MONITOR MYSQL
4.-CONCEPTOS BÁSICOS DE MYSQL
1
1.- INTRODUCCION
Las características principales de Mysql son:
✔ Es un gestor de bases de datospor tanto es una aplicación capaz de manejar este conjunto de datos de manera eficiente y cómoda.
✔ Es una base de datos relacional
✔ Es Opensourceel código fuente se puede descargar
✔ Es rápido, seguro y fácil de usar
✔ Utiliza el lenguaje de consultas estructurado SQL
✔ Existe una gran cantidad de software que lo usa.
2.-INSTALACION DE MYSQL
El equipo en el que se ejecuta Mysql y que almacena los datos se denomina servidor MySQL. Para poder establecer una conexión con ese servidor existen varias opciones de instalación.
2
EL CLIENTE Y EL
SERVIDOR DE MYSQL
ESTÁN EN LA MISMA
MAQUINA
SERVIDOR
MYSQL
CLIENTE
MYSQL
✔✔
✔
La tercera opción sería que el cliente mysql no se encuentre instalado en el equipo de sobremesa y necesitaramos conectarnos a otro equipo para utilizar el cliente MYSQL, es ese cano necesitaríamos Telnet o un cliente Secure Shell (SSH) para realizar la conexión.
[2.1] Comenzar la instalación
Descargar el fichero de instalación, en nuestro caso mysql-x.x.x-win.zip, del sitio web www.mysql.com
✔ Descomprimir su contenido en algún directorio temporal
✔ Ejecutar el fichero Setup.exe
3
✔ Una vez instalado, y si no lo crea la misma instalación, habrá que crear un fichero llamado MY.INI Ó MY.CNF que contendrá los siguientes parámetros:
4
#This File was made using the WinMySQLadmin 1.0 Tool
#22/04/2001 11:44:09
#Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions
[mysqld]
basedir=C:/mysql/BIN
#bind-address=192.168.244.151
datadir=C:/mysql/ data
language=C:/mysql/share/spanish
#slow query log#=
#tmpdir#=
#port=3306
#set-variable=key_buffer=16M
[WinMySQLadmin]
Server=C:/mysql/bin/mysqld-opt.exe
user=admin
password=passadmin
QueryInterval=10
La IP 192.168.244.151 no se debe cambiar.
Este fichero se tendrá que copiar en el directorio de windows (C:/Window ó C:/WINNT).
Este fichero se crea en la instalación pero si tuviésemos otra instalación de MySQL, es decir, otra base de datos instalada en nuestro equipo, este fichero ya existiría y no se
5
creará de nuevo, cogiendo los parámetros que se hayan escrito durante la primera instalación.
✔ El servicio se añade pero no se arranca. Si intentásemos arrancarlo nos daría un error 1067. Esto no debe preocuparnos, lo que nos dice es que para que este servicio arranque con éxito debemos reiniciar el equipo.
Una vez reiniciado el servicio se arranca automáticamente. Sólo tenemos que ir al directorio c:mysqlbin y ejecutar el fichero WinMySQLAdmin ejecutándose la base de datos ya con el semáforo de estado en verde.
✔ Comprobar que el servicio de mysql está activo. Para ello iremos a:
Inicio>Configuración>Panel de Control>Herramientas Administrativas>Servicios
✔ Ejecutar la herramienta WinmysqlAdmin para ver si las versiones son correctas etc.
✔ Pruebas de conexión: Acceder al servidor mediante un cliente de mysql
6
3.-USO DEL MONITOR MYSQL
MYSQL ES UN PROGRAMA QUE SE EJECUTA DESDE EL PROMPT DEL SISTEMA, QUE PERMITE CONECTARSE A UN SERVIDOR MYSQL PARA ENVIARLE CONSULTAS Y COMANDOS, Y VER LOS RESULTADOS.
Este comando permite:
✔ Consultar información de las bases de datos y tablas
✔ Crear bases de datos y tablas✔ Eliminar bases de datos y tablas.✔ Asignar y revocar privilegios.✔ Consultar, insertar, actualizar y eliminar
registros de una tabla
[2.1] Sintaxis del comando mysql
$shell> mysql [-h hostname] [-u usuario] [-p] contraseña [base de datos]
✔ En un entorno multiusuario es aconsejable escribir –p sin introducir la contraseña para que MYSQL al iniciarse la solicite
✔ Para una conexión a un host local como usuario root, las siguientes líneas son equivalentes.
7
# mysql
# mysql -u root
# mysql -h localhost -u rootSi se puede establecer la conexión a MySQL, se obtiene un mensaje de bienvenida, y se cambia el prompt, indicando que se pueden enviar consultas al servidor.
# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 25 to server version: 3.23.41
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
[2.2] primeros comandos con el monitor de mysql
Un comando consta de una sentencia SQL seguida por punto y coma.
Al escribir un comando, mysql lo manda al servidor que lo ejecuta y posteriormente nos muestra los resultados y nos devuelve el prompt para indicar que está listo para recibir más consultas.
Mysql muestra cuántas filas fueron devueltas y cuanto tiempo tardó en ejecutarse la consulta.
8
Las palabras claves se pueden escribir usando mayúsculas y minúsculas.
Podemos escribir más de una sql en una línea separándolas por ;
Es mejor utilizar la comilla simple para la escritura de cadenas
No es necesario escribir un comando en una sola línea mysql determina el final cuando encuentra el ;
Si no queremos terminar de escribir una consulta podemos utilizar \c
✔ Para saber la version y la fecha actual:mysql> SELECT VERSION(), CURRENT_DATE;✔ El programa mysql permite ver las bases de
datos existentes.
mysql> SHOW DATABASES ;
//Ejemplo
mysql> SHOW DATABASES;+----------+| Database |+----------+| mysql || test |+----------+
✔ La base de datos mysql es muy importante para el funcionamiento del sistema de gestión de bases de datos puesto que corresponde al DICCIONARIO DE DATOS (relaciones que sirven para el correcto funcionamiento de la base de datos). Las tablas de la bd mysql contienen información sobre los privilegios de un determinado usuario sobre una base de datos cuando se conecta desde un determinado
9
ordenador y quiere acceder a ciertas tablas o columnas de una tabla.
✔ La base de datos test se crea durante la instalación para servir como área de trabajo a los usuarios que que se inician en el aprendizaje de Mysql.
✔ El programa mysql permite crear bases de datos. Si estamos en Linux, los nombres de las bases de datos y las tablas son sensibles a mayúsculas y minúsculas.
mysql> CREATE DATABASE nombreBaseDatos ;
//Ejemplo
mysql> CREATE DATABASE agendita;Query OK, 1 row affected (0.00 sec)
✔ Con el cliente mysql hay que seleccionar la base de datos sobre la que se va a trabajar.
mysql> USE nombreBaseDatos ;(este comando solo puede ir escrito en una única línea)
//Ejemplo
mysql> USE agendita;Database changed
✔ Una vez seleccionada una base de datos, se pueden crear las tablas necesarias.
//Ejemplo
10
mysql> CREATE TABLE contactos ( -> id INT NOT NULL AUTO_INCREMENT , -> nombre VARCHAR(50) NOT NULL , -> email VARCHAR(50) NOT NULL , -> telefono VARCHAR(20) NOT NUL , -> PRIMARY KEY (id) ); Query OK, 0 rows affected (0.02 sec)
✔ Si queremos permite ver cuales son las tablas de una base de datos.
mysql> SHOW TABLES ;
//Ejemplo
mysql> SHOW TABLES;+--------------------+| Tables_in_agendita |+--------------------+| contactos |+--------------------+1 row in set (0.00 sec
✔ Para poder examinar la estructura de una tabla.
mysql> DESC nombreTabla ;
//Ejemplo
mysql> DESC contactos;+----------+-------------+------+-----+---------+| Field | Type | Null | Key | Default |
11
+----------+-------------+------+-----+---------+| id | int(11) | | PRI | NULL | | nombre | varchar(50) | YES | | NULL | | email | varchar(50) | YES | | NULL | | telefono | varchar(50) | YES | | NULL | +----------+-------------+------+-----+---------+4 rows in set (0.00 sec)
12
✔ Vamos a insertar registros en la tabla utilizando la sentencia INSERT
mysql> INSERT INTO contactos VALUES -> (0, 'Juan Penas', '[email protected]', '5675 -7383' );
mysql> INSERT INTO contactos VALUES -> (0, 'Bety la fea', '[email protected]', '6373 -3459' );
mysql> INSERT INTO contactos VALUES -> (0, 'Pepe pecas', '[email protected]', '7282 -2728' );
mysql> INSERT INTO contactos VALUES -> (0, 'Mary B.', '[email protected]', '3459 -2339');
PARA NO TENER QUE UTILIZAR TANTOS INSERT INTO PODRIAMOS UTILIZAR UNO SOLO SEPARANDO LOS REGISTROS MEDIANTE COMAS ESTO REDUCE EL CODIGO Y HACE QUE EL SERVIDOR PROCESE MÁS RÁPIDO:mysql> INSERT INTO contactos VALUES -> (0, 'Juan Penas', '[email protected]', '5675 -7383' ),
-> (0, 'Bety la fea', '[email protected]', '6373 -3459' ),
-> (0, 'Pepe pecas', '[email protected]', '7282 -2728' ),
-> (0, 'Mary B.', '[email protected]', '3459 -2339');
✔ Si queremos evitar tener que ejecutar múltiples insert podemos cargar una tabla a partir de un archivo de texto. El archivo debe contener un registro por línea
13
separado por el tabulador cuidando de que el orden sea el mismo que utilizamos en la sentencia create table. Para valores desconocidos o sea null utilizaremos \N. Observar también que las fechas debemos darselas en el formato YYYY-MM-DD
mysql> LOAD DATA LOCAL INFILE “MIFICHERO.TXT” INTO TABLE CONTACTOS;
✔ Para restringir el acceso a una base de datos:
mysql> GRANT ALL ON base.* TO NOMBREUSUARIO@MIPC IDENTIFIED BY ‘MICONTRASEÑA’;
nombreusuario ES EL NOMBRE DE USUARIO ASIGNADO DENTRO DEL CONTEXTO DE MYSQL
MIPC ES EL NOMBRE O LA DIRECCION IP DEL ORDENADOR DESDE EL QUE NOS CONECTAMOS
MICONTRASEÑA ES LA CONTRASEÑA QUE SE LE HA ASIGNADO A ESE USUARIO.
El nombre de usuario y la contraseña no tienen nada que ver con el nombre del usuario y la contraseña manejados por el sistema operativo
✔ Podemos utilizar las sentencias SELECT que ya conocemos desde el monitor mysql
mysql> SELECT * FROM contactos;
mysql> SELECT nombre, email FROM contactos;
14
mysql> SELECT nombre, email, telefono FROM contactos -> WHERE id = 3;
mysql> SELECT * FROM contactos WHERE nombre -> LIKE 'Pepe%';
mysql> SELECT COUNT(*) AS num FROM contactos;
4.-CONCEPTOS BÁSICOS DE MYSQL
[4.1] tipos de datos en mysql
NUMÉRICOS:
Existen tipos de datos numéricos, que se pueden dividir en dos grandes grupos, los que están en coma flotante (con decimales) y los que no.
TinyInt: es un número entero con o sin signo. Con signo el rango de valores válidos va desde -128 a 127. Sin signo, el rango de valores es de 0 a 255
Bit ó Bool: un número entero que puede ser 0 ó 1
SmallInt: número entero con o sin signo. Con signo el rango de valores va desde -32768 a 32767. Sin signo, el rango de valores es de 0 a 65535.
MediumInt: número entero con o sin signo. Con signo el rango de valores va desde -8.388.608 a
15
8.388.607. Sin signo el rango va desde 0 a16777215.
Integer, Int: número entero con o sin signo. Con signo el rango de valores va desde -2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295
BigInt: número entero con o sin signo. Con signo el rango de valores va desde -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va desde 0 a 18.446.744.073.709.551.615.
Float: número pequeño en coma flotante de precisión simple. Los valores válidos van desde -3.402823466E+38 a -1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38.
xReal, Double: número en coma flotante de precisión doble. Los valores permitidos van desde -1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde 2.2250738585072014E-308 a 1.7976931348623157E+308
Decimal, Dec, Numeric: Número en coma flotante desempaquetado. El número se almacena como una cadena
Tipo de Campo
Tamaño de Almacenamiento
TINYINT 1 byte
SMALLINT 2 bytes
MEDIUMINT
3 bytes
INT 4 bytes
16
INTEGER 4 bytes
BIGINT 8 bytes
FLOAT(X) 4 ú 8 bytes
FLOAT 4 bytes
DOUBLE 8 bytes
DOUBLE PRECISION
8 bytes
REAL 8 bytes
DECIMAL(M,D
M+2 bytes sí D > 0, M+1 bytes sí D = 0
NUMERIC(M,D)
M+2 bytes if D > 0, M+1 bytes if D = 0
FECHA:
A la hora de almacenar fechas, hay que tener en cuenta que Mysql no comprueba de una manera estricta si una fecha es válida o no. Simplemente comprueba que el mes esta comprendido entre 0 y 12 y que el día esta comprendido entre 0 y 31. Date: tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999. El formato de almacenamiento es de año-mes-dia
DateTime: Combinación de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre
17
del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de año-mes-dia horas:minutos:segundos
TimeStamp: Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al año 2037. El formato de almacenamiento depende del tamaño del campo:
Tamaño
Formato
14
AñoMesDiaHoraMinutoSegundo aaaammddhhmmss
12
AñoMesDiaHoraMinutoSegundo aammddhhmmss
8 ñoMesDia aaaammdd
6 AñoMesDia aammdd
4 AñoMes aamm
2 Año aa
Time: almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS'
Year: almacena un año. El rango de valores permitidos va desde el año 1901 al año 2155. El campo puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el año con dos o cuatro dígitos.
18
Tipo de Campo
Tamaño de Almacenamiento
DATE
3 bytes
DATETIME
8 bytes
TIMESTAMP
4 bytes
TIME
3 bytes
YEAR
1 byte
CADENA:Char(n): almacena una cadena de longitud fija. La cadena podrá contener desde 0 a 255 caracteres.
VarChar(n): almacena una cadena de longitud variable. La cadena podrá contener desde 0 a 255 caracteres.
Dentro de los tipos de cadena se pueden distinguir otros dos subtipos, los tipo Test y los tipo BLOB (Binary large Object)
La diferencia entre un tipo y otro es el tratamiento que reciben a la hora de realizar ordenamientos y comparaciones. Mientras que el tipo test se ordena sin tener en cuenta las Mayúsculas y las minúsculas,
19
el tipo BLOB se ordena teniéndolas en cuenta.
Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser ficheros.
TinyText y TinyBlob: Columna con una longitud máxima de 255 caracteres.
Blob y Text: un texto con un máximo de 65535 caracteres.
MediumBlob y MediumText: un texto con un máximo de 16.777.215 caracteres.
LongBlob y LongText: un texto con un máximo de caracteres 4.294.967.295. Hay que tener en cuenta que debido a los protocolos de comunicación los paquetes pueden tener un máximo de 16 Mb.
Enum: campo que puede tener un único valor de una lista que se especifica. El tipo Enum acepta hasta 65535 valores distintos
Set: un campo que puede contener ninguno, uno ó varios valores de una lista. La lista puede tener un máximo de 64 valores.
Tipo de campoTamaño de Almacenamiento
CHAR(n) n bytes
VARCHAR(n) n +1 bytes
TINYBLOB, TINYTEXT Longitud+1 bytes
BLOB, TEXT Longitud +2 bytes
MEDIUMBLOB, Longitud +3
20
MEDIUMTEXT bytes
LONGBLOB, LONGTEXT
Longitud +4 bytes
ENUM('value1','value2',...)
1 ó dos bytes dependiendo del número de valores
SET('value1','value2',...)
1, 2, 3, 4 ó 8 bytes, dependiendo del número de valores
Diferencia de almacenamiento entre los tipos Char y VarChar:
ValorCHAR(
4)Almace
namientoVARCHAR(4
) Almace
namiento
'' '' 4 bytes " 1 byte
'ab' 'ab ' 4 bytes 'ab' 3 bytes
'abcd' 'abcd' 4 bytes 'abcd'
'abcdefgh'
'abcd' 4 bytes 'abcd' 5 bytes
[4.1] tipos de tablas en mysql
Mysql soporta varios motores de almacenamiento que tratan con diferentes tipos de tablas. Los motores de almacenamiento incluyen algunos que tratan con tablas transaccionales y otros que no lo hacen.
Los tipos de tablas transaccionales son: INNODB Y BDB
21
Los tipos de tablas no transaccionales son: ISAM, MYISAM, MERGE Y HEAP
22
Describamos brevemente algunos de los tipos existentes:ISAM: es el formato de almacenaje mas antiguo, y posiblemente podria desaparecer en futuras versiones. Presentaba limitaciones importantes como la no exportación de ficheros entre maquinas de distintas arquitecturas o que no podia usar mayores de 4 GigaBytes.MYISAM: es el tipo de tabla por defecto en MySQL desde la versión 3.23. Optimizada para sistemas operativos de 64 bits, permite ficheros de tamaños mayores que las ISAM. Los datos se almacenan en un formato independiente, lo que permite pasar tablas entre distintas plataformas. Los índices se almacenan en un archivo con la extensión ”.MYI” y los datos en otro archivo con extensión “.MYD”. Ofrece la posibilidad de indexar campos BLOB y TEXT. Además este tipo de tablas soportan el tipo de dato VARCHAR.Un inconveniente es que las tablas pueden llegar a corromperse, almacenando datos incorrectos debido a caídas del sistema o problemas de hardware.
INNODB: InnoDB provee a MySQL con el soporte para trabajar con transacciones, además de hacer un mejor bloqueo de registros para las instrucciones SELECT muy parecido al usado por Oracle, con lo que incrementa el rendimiento y la concurrencia en ambientes multiusuario.
InnoDB es el único formato que tiene MySQL para soportar llaves foráneas (FOREING KEY).
Las características más importantes a destacar son:
Recuperación automática ante fallas. Si MySQL se da de baja de una forma anormal,
23
InnoDB automáticamente completará las transacciones que quedaron incompletas.
Integridad referencial. Ahora se pueden definir llaves foráneas entre tablas InnoDB relacionadas para asegurarse de que un registro no puede ser eliminado de una tabla si aún está siendo referenciado por otra tabla.
Bloqueo a nivel de filas. Al usar tablas MyISAM, y tener consultas muy grandes que requieren de mucho tiempo, simplemente no se podían ejecutar más consultas hasta que terminarán las consultas que estaban en ejecución. En cambio, las tablas InnoDB usan bloqueo a nivel de filas para mejorar de manera impresionante el rendimiento.
¿Qué TIPO DE TABLA UTILIZAR? Por razones de rendimiento, las tablas
INNODB si hay que realizar gran cantidad de operaciones de inserción y actualización o bien utilizar integridad referencial.
Si las operaciones de selección son las mayoritarias es mejor el tipo MYISAM
Cuando se crea una tabla, el tipo se indica añadiendo la opción TYPE al comando CREATE TABLE
CREATE TABLE T (I INT) TYPE=INNODB;
Veamos ahora lo que es una TRANSACCIÓN.
[4.1] transacciones en mysql
24
Una TRANSACCIÓN en MySQL es una secuencia de una o más sentencias SQL que juntas forman una unidad de trabajo. Es decir, las operaciones que forman una transacción debe ser completas en su totalidad o pueden se desechas si el proceso no se completó correctamente
El SGBD tiene que disponer de procedimientos que aseguren la integridad de la información ante fallos de tipo físico, lógico, humano así como proteger los datos frente a accesos no autorizados.
Supongamos una sucursal bancaria donde tenemos almacenados los datos de los clientes:
Por ejemplo:
Nº CUENTA
NOMBRE
SALDO
1 PALOMA
1 MILL
2 JUAN 2 MILL
Supongamos un traspaso de la cuenta 2 de 1 MILL a la cuenta 1. La secuencia de operaciones lógicas a realizar sería:
Restar 1MILL a la cuenta2 2.Sumar 1MILL a la cuenta1
¿Qué ocurriría si se lleva a cabo la 1ª operación, pero no la 2ª?
Evidentemente la B.D quedaría en un estado inconsistente.
25
Nº CUENTA
NOMBRE
SALDO
1 PALOMA
1 MILL
2 JUAN 1 MILL
A este problema se le conoce con el nombre del problema DE LA INFORMACION PERDIDA. Para evitar este problema el SGBD va a realizar lo que se conoce como TRANSACCION. Para controlar las transacciones el SGBD se apoya en 1 o más ficheros diarios de extensión LOG, sobre los que se va volcando la información. De manera que cada cierto tiempo el SGBD realiza un CHECKPOINT, un pto. de chequeo. Cuando realiza ese chequeo graba en ciertas áreas de MEMORIA SECUNDARIA el estado de la B.D.
Suponiendo el siguiente diagrama de transacciones:
Trans1 Trans4
Trans3Trans2 Trans5
26
CHECKPOINT
RECUPERACION EN CALIENTE/FRIO DE LA B.D:
El SGBD deshace las transacciones que no hubieran concluido o bien las transacciones conclusas que no estén registradas en el área correspondiente de MEMORIA SECUNDARIA.
Si la recuperación de la B.D. se hace a través de un BACKUP la recuperación se conoce con el nombre de RECUPAERACION EN FRIO.
Otro ejemplo típico sería suponer que queremos borrar uno o varios registros de una tabla, pero nos equivocamos y eliminamos todos los registros de la tabla. ¿Existe alguna forma de subsanar el error y dar marcha atrás para recuperar los registros eliminados? La respuesta es sí, utilizando transacciones.
Por defecto MySQL funciona en modo autocommit. Esto quiere decir que se confirma (COMMIT) cada sentencia ejecutada.
Los pasos para iniciar una transacción son los siguientes:
Se comienza una transacción con la sentencia START TRANSACTION.
Si se realizan modificaciones en la base de datos y queremos volver atrás y cancelar los cambios realizados hasta el momento, utilizaremos la sentencia ROLLBACK.
Si queremos confirmar los cambios realizados en la base de datos, utilizaremos la sentencia
27
COMMIT, lo cual implica también que termina la transacción.
Si queremos comenzar una nueva transacción, usaremos START TRANSACTION.
Nota: para que las transacciones funcionen correctamente, debemos utilizar tablas InnoDB .
Veamos un ejemplo.
Disponemos de la tabla EMPLE, que está formada por los campos que se muestran en la imagen.
A continuación comenzamos una transacción con START TRANSACTION.
28
Modificamos el salario de todos los empleados de la tabla EMPLE, con la siguiente sentencia SQL.
update emple set salario=1000;
Observamos a continuación que se ha modificado el salario de todos los empleados.
29
Deshacemos el trabajo ya que nos hemos equivocado. Para ello utilizamos la sentencia ROLLBACK.
Y comprobamos a continuación que la tabla vuelve a su estado original.
30
Si queremos validar los cambios en la base de datos, completaremos la transacción con el uso de la sentencia COMMIT. Si ejecutamos ROLLBACK justo después de hacer el COMMIT, los cambios realizados sobre la base de datos permanecerán, debido a que anteriormente se validó la transacción.
31