La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Fundamentos de MySQL.

Presentaciones similares


Presentación del tema: "Fundamentos de MySQL."— Transcripción de la presentación:

1 Fundamentos de MySQL

2 Introducción MySQL, es un Sistema de Administración de Base de Datos de código abierto, es licenciado bajo la GPL (General Public License) de la GNU. Fue creada por la empresa sueca MySQL AB. MySQL es el sistema administrador de base de datos más usado en el mundo del software libre, debido a su gran rapidez, confiabilidad y facilidad de uso. MySQL es parte de LAMP (Linux, Apache, MySQL, PHP / Perl / Python), fuente de rápido crecimiento de software de código abierto para negocios. Notas de Instructor Se presentan algunos de los conceptos fundamentales del Sistema de Administración de Base de Datos RelacionalMySQL. En esta unidad se estudiara algunos aspectos del MySQL. Frase de Transición Ahora hablaremos de la licencia GPL.

3 Licencia GPL Las licencias que cubren la mayor parte del software son comerciales, es decir el creador de la obra mantiene el código fuente y no es de libre distribución. La Licencia Pública General de GNU pretende garantizar la libertad de compartir y modificar software libre para asegurar que el software es libre para todos sus usuarios. Cuando se habla de software libre, se refiere a libertad del código fuente, no al precio. Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora discutiremos la Historia de MySQL

4 Historia de MySQL La necesidad de una base de datos SQL para aplicaciones Web llevaron a desarrollar una base de datos comercial inspirada en proyectos de código abierto (open source), MySQL comenzó a desarrollarse en 1994. No se sabe con certeza de donde proviene el nombre MySQL. Probablemente pueda ser de dos fuentes, la compañía MySQL AB los últimos 10 años a colocado como prefijo a los desarrollos realizados la palabra “My”, la otra fuente podría ser el nombre de una de las hijas del co-fundador Michael “Monty” Widenius, esto todavía sigue siendo un misterio. Notas de Instructor La historia inicialmente de MySQL comienza como un proyecto para desarrollar un DBMS para aplicaciones WEB, partiendo desde 1994, en las siguientes laminas ahondaremos en el hitos importantes en la historia de MySQL. Frase de Transición La siguiente lamina mostraremos los hitos importantes en el desarrollo de MySQL.

5 Hitos importantes en la evolución de MySQL
1995 Liberada primera versión de MySQL 1.0 1996 Liberada la versión MySQL 3.11 sobre Linux y Solaris 1997 Primera Licencia comercial y contrato de soporte 2000 La licencia de MySQL cambia a GPL Octubre 2004 La versión de producción GA es 4.1 Octubre 2005 La versión de producción GA es 5.0 Notas de Instructor Explique brevemente: La primera versión que se tiene conocimiento de MySQL fue la 1.0 la cual fue liberada en 1995. En 1996 es publicada la versión de MySQL 3.11 sobre las plataformas Linux y Solaris, dando inicio a la era de MySQL como manejador de base de datos. En 1997 la primera licencia comercial y contrato de soporte es realizado. En el año 2000 la licencia de MySQL cambia a GPL (Licencia Publica General de GNU). La versión de producción actual es la serie 4.1, la cual fue liberada con la etiqueta GA (Generally Available) en Octubre del 2004, se espera que la nueva serie 5.0 sea liberada pronto con nuevas funcionalidades y características disponibles. . Octubre 2005 Liberada la versión 5.0 con procedimientos almacenados, triggers (disparadores) y vistas Frase de Transición En la siguiente lamina hablaremos de las características de MySQL.

6 Características de MySQL
Internas y de portabilidad : Escrito en C y C++. Está disponible en diferentes plataformas: Linux, Solaris, FreeBSB, Mac OS X, HP-UX, AIX, Windows, etc. Disponibilidad de APIs para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby y Tcl. Aprovecha la potencia de sistemas multiprocesador, gracias a su implementación multihilo. Tablas Hash en memoria, son usadas como tablas temporales. El código de MySQL ha sido probado (Tested) con las principales herramientas del mercado. El servidor está disponible como un programa separado para ser usado en un ambiente cliente/servidor. Notas de Instructor Listar las características internas y de portabilidad Frase de Transición Ahora veremos las caracteristicas de tipos de columnas

7 DATE, TIME, DATETIME, TIMESTAMP, YEAR
Características de MySQL Tipos de Columna soportados : INTEGER de 1, 2, 3, 4, y 8 Bytes FLOAT DOUBLE CHAR VARCHAR TEXT BLOB Notas de Instructor Listar las características tipos de columnas Frase de Transición Ahora veremos las caracteristicas de sentencias y funciones DATE, TIME, DATETIME, TIMESTAMP, YEAR Tipos espaciales OpenGIS

8 Características de MySQL
Sentencias y Funciones: Soporte para las cláusulas GROUP BY y ORDER BY. Pueden usarse las funciones: COUNT(), COUNT(DISTINCT ...),AVG(), STD(), SUM(), MAX() y MIN(). Soporte para LEFT OUTER JOIN y RIGHT OUTER JOIN usando notación SQL estándar. Soporte para alias sobre: tablas y columnas usando SQL estándar. Las sentencias DELETE, INSERT y UPDATE retornan el número de filas que han sido afectadas. Se puede mezclar tablas de diferentes bases de datos en la misma consulta. Notas de Instructor Listar las características de sentencias y portabilidad STD()= desviación standard No hay soporte en esta versión para los full outer joins Frase de Transición Ahora veremos las caracteristicas seguridad, escalabiliad, limites y conectividad

9 Características de MySQL
Seguridad Maneja un sistema de privilegios muy seguro, la verificación se hace basado en host. Escalabilidad y Límites Maneja base de datos grandes. Su uso se extiende a más de 50 millones de registros. Se tiene conocimiento de algunos usuarios que usan el servidor MySQL con más de 60,000 tablas y cerca de de filas. Hasta 64 índices por tabla son permitidos. Cada índice puede consistir de 1 a 16 columnas. Conectividad Los clientes pueden conectarse al servidor MySQL usando TCP/IP sobre cualquier plataforma. El conector/ODBC (MyODBC) provee soporte a programas cliente que usen ODBC (Open Database Connectivity). La interfase conector/J provee soporte para programas cliente java que usan JDBC. Notas de Instructor Listar las características Frase de Transición Ahora veremos las caracteristicas de tipos de columnas

10 ¿Porque seleccionar a MySQL?
Aplicaciones Web: Muchas consultas y pocas escrituras, MySQL resuelve rápidamente peticiones. Aplicaciones de Negocios: Por su estabilidad, bajo costo, rapidez y soporte. Soporte a Código-Abierto: MySQL es software libre de código abierto, está basado en licencia GPL. Bajo requerimiento: MySQL no requiere recursos excesivos para ejecutarlo. Disponibilidad para tablas de gran tamaño:. En algunos sistemas usando MySQL se ha logrado hasta 8 terabytes (TB) por tabla. Estabilidad: MySQL está escrito en múltiples capas, y diferentes módulos, cada uno de los módulos están en versiones estables de funcionamiento. Notas de Instructor Se describen algunos aspectos relevantes de MySQL que lo hacen ser un DBMS ideal para ambientes de producción y desarrollo. Es importante que hable sobre las fases de madurez de las versiones de MySQL. Aplicaciones Web: Las aplicaciones Web se caracterizan por hacer muchas consultas y pocas escrituras en base de datos. MySQL es un manejador que puede resolver rápidamente las peticiones hechas, adaptándose a la velocidad que se exige a las aplicaciones Web. Aplicaciones de Negocios: Por su estabilidad, bajo costo, rapidez y soporte es usada por muchas organizaciones como su sistema administrador de base de datos, MySQL AB presta servicio de soporte sobre la aplicación. Soporte a Código-Abierto: MySQL es software libre de código abierto, está basado en licencia GPL, lo que permite que cualquiera pueda modificar el código fuente y adaptarlo a sus necesidades. Bajo requerimiento: MySQL no requiere recursos excesivos para correr, por ejemplo sobre la plataforma Windows en un computador basado en procesador Pentium-Intel y 32 MB de memoria bastarían para montar MySQL. Disponibilidad para tablas de gran tamaño: Las tablas en MySQL pueden ser de gran tamaño, muchas veces las limitaciones de tamaño son impuestas por el sistema operativo. En algunos sistemas usando MySQL se ha logrado hasta 8 terabytes (TB) por tabla. Estabilidad: MySQL está escrito en múltiples capas, y diferentes módulos, cada uno de los módulos están en versiones estables de funcionamiento, aunque MySQL está en continuo desarrollo, nuevas características y funcionalidades son agregadas. MySQL AB tiene una política con respecto a las versiones que son liberadas al mercado, estas se basan sobre fases de madurez: Alpha: Significa que es una etapa activa de desarrollo, nuevas características están siendo agregadas, algunos de estos nuevos desarrollos pueden cambiar durante la fase Alpha, los cambios son propuestos por los usuarios sobre situaciones de la vida real, no debe usarse en ambiente de producción. Beta: Significa “Características Hechas”. Todas las nuevas características planeadas para esta serie han sido implementadas y no existen cambios fundamentales. Esta es la fase de estabilización, enfocándose principalmente en identificar y corregir bugs (errores), no se agrega nuevo código en esta fase, no debe usarse en ambiente de producción. Gamma: Puede ser vista como “Candidata a Versión Final”. Por supuesto las versiones de MySQL están disponibles en el sitio desde la versión alpha. Las palabras “Candidata a Versión Final” aquí se refiere a que “casi” esta lista para ambiente de producción. Después de corregir los bugs (errores) encontrados en la fase beta y realizar nuevas pruebas, la versión se mueve a la fase Gamma significando esto que el producto es estable y esta casi listo para obtener la etiqueta de listo para producción. Production: Este es el próximo paso, y esto significa que la serie es conveniente para ambientes de producción. Es también llamada “GA” (Generally Available). Por supuesto aún en versiones de producción pueden existir bugs (errores). En este caso estos son fijos, y son reportados al sitio de MySQL para su corrección. Actualmente la versión estable de MySQL o “GA” es la que estaremos utilizando en el curso. Old: Es la versión previa a la versión de producción actual, significa que hay una nueva versión con nuevas características disponibles. Frase de Transición A continuación se describira las tareas realizadas por los agentes: Logico, trabajador y coordinador.

11 Deficiencias de MySQL Características no presentes en el núcleo de MySQL : Procedimientos almacenados Disparadores (Triggers): Vistas Soporte a estas características ha sido agregado a la serie 5.x, con soporte al estándar ANSI SQL-99 y SQL-2003. Notas de Instructor A continuación se listan las deficiencias mas importantes de MySQL Versión 4.x, muchas de estas han sido superadas por la nueva versión GA 5.x Frase de Transición Ahora estudiaremos los motores de almacenamiento

12 Motor de almacenamiento de MySQL
El motor de almacenamiento (storage engine) es el software que se encarga del manejo de los datos, cómo se organizan y qué relaciones tienen, como se almacenan y de qué forma son accedidos, cómo se gestiona el acceso de distintos usuarios y los bloqueos pertinentes, sus medidas de seguridad y la integridad. En MySQL es posible seleccionar el tipo de motor de almacenamiento a utilizar, esto se indica en la sentencia de creación de la tabla Notas de Instructor Explicar el concepto de motor de almacenamiento, indicar que MySQL maneja varios tipos de motores de almacenamiento y que estos pueden ser seleccionados al momento de definir la tabla. Con MySQL se puede elegir el tipo de una tabla al momento de crearla. Si se necesita que una tabla soporte bloqueo (locking) y/o transacciones, se puede elegir un tipo de tabla que mejor se acomode a las necesidades, es decir, no se necesita mantener la sobrecarga de manejo de transacciones sobre todas las tablas. MySQL soporta varios motores de almacenamiento que actúan como manejadores de tablas. Los motores de almacenamiento de MySQL incluyen el manejo de tablas transaccionales y tablas no-transaccionales. Frase de Transición Ahora hablaremos de los diferentes motores de almacenamiento de MySQL.

13 Motor de almacenamiento de MySQL
Notas de Instructor Grafico que describe la arquitectura de MySQL , donde se tiene un analizador de instrucción, un optimizador y un mecanismo de ejecución de instrucción el cual requiere a un motor de almacenamiento, ese proceso es transparente para el usuario. Frase de Transición Ahora veremos el motor de almacenamiento ISAM

14 Motor de almacenamiento de MySQL
Motor de almacenamiento ISAM: Motor de almacenamiento original de MySQL, sólo manejaba tablas no- transaccionales, estuvo disponible en la versión MySQL 3.23 y rápidamente fue reemplazado por MyISAM. Características: Registros de longitud fija y variable. Sólo pueden ser definidos 16 índices por tabla. Claves con longitud máxima de 256 bytes. Los datos son almacenados en el formato de la máquina donde esta instalado, más rápido, pero dependiente de la máquina. El máximo tamaño de una tabla es 4GB. No puede usarse sentencias de respaldo de tablas y restauración de tablas. No soporta búsquedas de texto completo y tipos de datos espaciales (OpenGIS). Notas de Instructor El modelo de memoria es uno de los aspectos vitales de la arquitectura de la base de datos, puesto que la administración de memoria determina el rendimiento de la base de datos. DB2 proporciona la capacidad al administrador de separar memoria en diferentes ‘heaps’ a través de diferentes parámetros de configuración. Explicar con el diagrama los diferentes tipos de memoria usados en el DB2. Frase de Transición Ahora veremos el motor de almacenamiento MyISAM

15 Motor de almacenamiento de MySQL
Motor de almacenamiento MyISAM: Es el motor de almacenamiento por defecto en MySQL desde la serie MyISAM esta basado en el código de ISAM pero tiene otras poderosas propiedades: . Características: Todos los datos son almacenados en formato complemento a dos y el formato de la IEEE de punto flotante. Manejo de tablas no-transaccionales El máximo número de índice por tablas son 64. El máximo número de columnas por índices es 16. MyISAM automáticamente actualiza las columnas definidas como AUTO_INCREMENTO en operaciones NSERT/UPDATE, incrementado la velocidad en al menos 10%. Los índices MyISAM tienen una bandera que indica si la tabla fue cerrada correctamente. Si mysqld es inicializado con la opción de recuperación, el MyISAM automáticamente repara la tabla que no haya sido cerrada correctamente. Usado frecuentemente en aplicaciones Web. Notas de Instructor Describir el motor de almacenamiento MyISAM, listar las otras caractericticas que estan en el manual pero que no estan en las laminas Frase de Transición Ahora veremos el motor de almacenamiento MEMORY O HEAP

16 Motor de almacenamiento de MySQL
Motor de almacenamiento Memory (HEAP): El motor de almacenamiento MEMORY o HEAP crea tablas que son almacenadas en memoria Características: Las tablas MEMORY permiten hasta 32 índices por tabla, 16 columnas por índice, y un máximo tamaño de clave de 500 bytes. Manejo de tablas no-transaccionales. Las tablas MEMORY no soportan columnas BLOB y TEXT. Las tablas MEMORY no soportan columnas AUTO_INCREMENTO. Las tablas MEMORY no pueden ser convertidas a tablas físicas. El computador donde esta instalado el servidor MySQL requiere memoria adicional para mantener todas las tablas MEMORY que son usadas en el mismo momento. Para liberar memoria usada por una tabla MEMORY, podrían usarse las sentencias DELETE o DROP TABLE. Notas de Instructor Describir el motor de almacenamiento Memory o Heap, listar las otras caracterícticas que estan en el manual pero que no estan en las laminas Frase de Transición Ahora veremos el motor de almacenamiento InnoDB

17 Motor de almacenamiento de MySQL
Motor de almacenamiento InnoDB : InnoDB provee a MySQL un motor de almacenamiento con soporte a transacciones (propiedades ACID) con capacidades para commit y rollback. Características: Manejo de usuarios concurrentes. InnoDB soporta la definición de claves foráneas (FOREIGN KEY). En una sentencia SELECT puedan mezclarse diferentes tipos de tablas. InnoDB ha sido diseñado para máximo rendimiento cuando se procesan grandes volúmenes de datos. Integrada completamente con el servidor MySQL, InnoDB mantiene su propio buffer pool para mantener datos e índices en memoria principal. No existe un limite de tamaño predefinido para las tablas InnoDB Notas de Instructor Describir el motor de almacenamiento InnoDB, listar las otras caracterícticas que estan en el manual pero que no estan en las laminas Frase de Transición En la siguiente lamina se describira la arquitectura de hilos de MySQL.

18 Motor de almacenamiento de MySQL
Características InnoDB: InnoDB es usado en numerosos lugares a nivel en ambientes de producción Mucho más seguro. Si ocurren problemas de hardware o MySQL falla, es posible recuperar la información ya sea por una recuperación automática o desde un archivo log de transacciones de respaldo. Es posible combinar muchas sentencias y aceptar todas al mismo tiempo con la sentencia COMMIT. Para ignorar los cambios realizados se ejecuta la sentencia ROLLBACK. Si una actualización falla todos los cambios son revertidos (en un ambiente no transaccional todos los cambios hechos son permanentes). Los motores transaccionales proporcionan un mejor desempeño sobre tablas que tienen muchas actualizaciones concurrentes. Notas de Instructor En este listado de productos DB2, solo nombrar las caracteristicas sobresaliente. Frase de Transición En la siguiente la lamina se detallan las actividades realizadas por los administradores.

19 Arquitectura de Hilos de MySQL
MySQL corre sobre un motor de base de datos multi-hilo. Los clientes que se conectan al servidor de base de datos MySQL no necesitan esperar que otro cliente finalice la consulta o proceso que este ejecutando para que sean atendidas sus peticiones. Cuando un usuario se conecta al servidor de base de datos MySQL, un nuevo proceso llamado hilo maneja las tareas requerida por esa conexión MySQL mantiene activo un hilo administrador que es el encargado de recibir y atender las peticiones de otros hilos en un momento determinado. Notas de Instructor Describir la arquitectura de hios de MySQL, como un proceso llevado a cabo por el DBMS Frase de Transición Ahora hablaremos de los clientes DB2.

20 Seguridad en MySQL El sistema de seguridad en MySQL es referido como el Sistema de Privilegios de Acceso. Permite la autenticación de los usuarios del servidor de MySQL y la verificación de las actividades de todos los usuarios sobre el servidor y las bases de datos. La seguridad en MySQL es aplicada en dos niveles: Nivel de servidor Nivel de Base de Datos MySQL realiza la verificación de privilegios usando unas tablas del sistema llamadas tablas de concesión Notas de Instructor Para los administradores de base de datos la seguridad de la información es uno de los puntos más importantes. Un nivel de seguridad aceptable puede lograrse bloqueando el acceso al servidor y a la base de datos a usuarios no autorizados. Cuando se habla de seguridad de información también se deben tomar medidas con los usuarios que tienen autorización de acceder a la base de datos, el mecanismo más usado es restringir el acceso a la información, ya que ellos pueden causar daño a la información de manera accidental o maliciosa. Estos usuarios podrían ejecutar sentencias SQL delete o update. El sistema de seguridad en MySQL es referido como el Sistema de Privilegios de Acceso. Permite la autenticación de los usuarios del servidor de MySQL y la verificación de las actividades de todos los usuarios sobre el servidor y las bases de datos. La seguridad en MySQL es aplicada en dos niveles: Nivel de servidor y Nivel de Base de Datos. Cuando un usuario trata de acceder a una base de datos, primero se verifica si el usuario tiene privilegio para acceder al servidor de base de datos, después el servidor verifica si el usuario tiene privilegios para conectarse a una base de datos, La verificación de conexión al servidor y la verificación de conexión a la base de datos son dos procesos que siempre MySQL lleva a cabo. MySQL realiza la verificación de privilegios del servidor y la base de datos usando unas tablas del sistema llamadas tablas de concesión. Estas tablas contienen toda la información necesaria para aplicar las políticas de seguridad convenientes. Todos los host (otros computadores) y usuarios que se conectan al servidor MySQL deben estar representados en las tablas de concesión. Frase de Transición Ahora discutiremos sobre Sistema de privilegios de acceso en MySQL

21 Sistema de privilegios de acceso en MySQL
El mecanismo mediante el cuál se aseguran los datos y la integridad es el sistema de privilegios de MySQL. Las tablas de concesión de MySQL son responsables de la autenticación de usuarios y host (otros computadores) que acceden al servidor MySQL Las tablas de concesión están localizadas dentro del manejador de base de datos, específicamente en la base de datos mysql. MySQL almacena en las tablas de concesión toda información referente a los privilegios de conexión al sistema así como también los privilegios de acceso a las base de datos. En el momento de inicio el servidor lee de estas tablas toda la información referente a los privilegios y los carga en memoria principal. Notas de Instructor El mecanismo mediante el cuál se aseguran los datos y la integridad es el sistema de privilegios de MySQL, es un mecanismo que está basado en la validación de usuarios que intentan conectarse a un servidor de base de datos y en la asignación de privilegios sobre objetos de base de datos tales como SELECT, INSERT, UPDATE, DELETE, etc. Frase de Transición Ahora discutiremos sobre las tablas de concesión

22 Sistema de privilegios de acceso en MySQL
Tablas de concesión de MySQL: La tabla user es usada para especificar la información de privilegios de los usuarios que intentan conectarse al servidor MySQL. La tabla db es usada para especificar los accesos a las base de datos almacenadas en el servidor. La tabla host es usada en conjunción con la tabla db para permitir que un usuario pueda conectarse a un servidor MySQL desde diferentes máquinas en una red de computadoras. La tabla tables_priv es usada para especificar los privilegios de los usuarios a nivel de tablas. La tabla columns_priv es usada para especificar los privilegios de los usuarios a nivel de columnas Notas de Instructor El mecanismo mediante el cuál se aseguran los datos y la integridad es el sistema de privilegios de MySQL, es un mecanismo que está basado en la validación de usuarios que intentan conectarse a un servidor de base de datos y en la asignación de privilegios sobre objetos de base de datos tales como SELECT, INSERT, UPDATE, DELETE, etc. Es importante explicar a los estudiantes que estas tablas se actualizan cuando se ejecutan las sentencias GRANT y/o REVOKE, y que en MySQL pueden ser modificadas directamente, es decir a través de sentencias INSERT u/o UPDATE para modificar o definir nuevos privilegios sobre el sistema (esto solo puede hacerlo el administrador del DBMS) Frase de Transición En la siguiente lamina se nombraran los diferentes clientes MySQL

23 Clientes MySQL MySQL es inherentemente un sistema administrador de base de datos para redes Es posible que un cliente pueda comunicarse con un servidor que esté corriendo localmente o que el servidor esté en un lugar distante. Existen muchos programas cliente para MySQL algunos de ellos ofrecen interfaces gráficas (GUI) otros se basan en líneas de comando. Clientes: Línea de comandos mysql Cliente MySQL Administrator Cliente MySQL Query Browser Notas de Instructor Lamina autoexplicativa Frase de Transición A continuación explicaremos el cliente Línea de comandos mysql

24 Cliente MySQL Administrator
El administrador MySQL es un programa gráfico que permite a un usuario realizar tareas administrativas. Como por ejemplo: Configurar el servidor MySQL, Monitorear el desempeño del servidor Verificar el comportamiento, Iniciar o detener el servidor de base de datos, Administrar usuarios y conexiones, Ejecutar respaldos de la base de datos, Administrar las tablas de concesión Notas de Instructor Describir brevementeel cliente MySQL Administrator Frase de Transición Ejemplo de conexión a la herramienta

25 Ejecución de sentencias SQL con MySQL

26 Introducción al SQL SQL (Lenguaje de consulta estructurado) es un lenguaje muy sencillo. Basado en el habla inglés, orientado principalmente a base de datos relacionales y, sobre todo, al manejo de consultas. El lenguaje SQL está compuesto por una serie de sentencias y de cláusulas muy reducidas en número, pero muy potentes en efectividad. MySQL es el sistema administrador de base de datos más usado en el mundo del software libre, debido a su gran rapidez, confiabilidad y facilidad de uso. En esta unidad, se da una explicación completa del uso de las sentencias SQL sobre el sistemas administrador de base de datos MySQL. Notas de Instructor El lenguaje SQL está compuesto por una serie de sentencias y de cláusulas muy reducidas en número, pero muy potentes en efectividad. De entre todas las palabras, existen cuatro que son las más utilizadas, estando compuestas por una sentencia y por tres cláusulas: SELECT lista_campos FROM lista_tablas [WHERE criterios [ORDER BY lista_campos]] En esta unidad, se da una explicación completa del uso de las sentencias SQL sobre el sistemas administrador de base de datos MySQL. Frase de Transición Ahora hablaremos de la ejecución de sentencias SQL sobre MySQL

27 Ejecución de sentencias SQL con el programa mysql
Para conectarse al servidor, usualmente necesitamos de un nombre de usuario (login) y de una contraseña (password), y si el servidor al que nos deseamos conectar está en una máquina diferente de la nuestra, también necesitamos indicar el nombre o la dirección IP de dicho servidor. shell>mysql –u [usuario] –p [Presione la tecla Enter] A continuación ingrese el password, y presione [Enter] Usuario:mysqadmin y password:mysqladmin Usuario:test y password:Test2005 Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora hablaremos de la ejecución de sentencias SQL sobre MySQL

28 Ejecución de sentencias SQL con el programa mysql
Un comando normalmente consiste de una sentencia SQL seguida por un punto y coma. Ejemplos de Comandos MySQL: mysql> SELECT VERSION(), CURRENT_DATE; Es posible mostrar la información de la base de datos actual usando la sentencia SELECT DATABASE(); Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora hablaremos de la ejecución de sentencias SQL sobre MySQL

29 Ejecución de sentencias SQL con el programa mysql
Un comando no necesita ser escrito en una sola línea, mysql determinará en donde finaliza la sentencia cuando encuentre el punto y coma, no cuando encuentre el fin de línea Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora hablaremos de la ejecución de sentencias SQL sobre MySQL

30 Ejecución de sentencias SQL con el programa mysql
A continuación se usará la sentencia SHOW DATABASES para listar las bases de datos existentes en el servidor al que estamos conectados, sólo se mostrarán las bases de datos a las cuales se tiene privilegio de acceso. Se uso el usuario test para la conexión Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora hablaremos de la ejecución de sentencias SQL sobre MySQL

31 Ejecución de sentencias SQL con el programa mysql
SHOW TABLES es un comando que permite listar las tablas disponibles en la base de datos activa. Para mostrar el motor de almacenamiento usado en las tablas de una base de datos, use: SHOW TABLE STATUS FROM <BASE DE DATOS>; Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora hablaremos de los tipos de datos en MySQL

32 Tipos de Datos en MySQL Tipo de dato Numérico: Tipo de dato Cadena:
tinyint smallint mediunmint integer, int bigint float xreal, double decimal(m,d), dec(m,d) y numeric(m,d) Tipo de dato Cadena: char(n) varchar(n) text(n) blob(n) Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora hablaremos de las sentencias DDL Tipo de dato Fecha: date datatime timestamp time year

33 Sentencias DDL CREATE DATABASE: Permite crear una base de datos, la sintaxis es la siguiente: CREATE DATABASE [IF NOT EXISTS] nombre_base_de_datos; Sino se usa IF NOT EXISTS en la sentencia CREATE DATABASE, producirá un mensaje de error si ya existe una base de datos con el mismo nombre. DROP DATABASE: Elimina todas las tablas de la base de datos y elimina la base de datos, para ejecutar esta sentencia se debe tener el privilegio DROP sobre la base de datos. Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora hablaremos de la sentencia DDL create table

34 Sentencias DDL CREATE TABLE: Esta sentencia es utilizada para crear una tabla y definir las columnas que contiene. Sintaxis: 1.- CREATE TABLE nombre_tabla( nombre_columna1 tipo [NOT NULL] [PRIMARY KEY], nombre_columna2 tipo [NOT NULL], nombre_columnan tipo [NOT NULL]) [ENGINE | TYPE={INNODB | MYISAM | HEAP}]; 2.- CREATE TABLE nombre_tabla( nombre_columna1 tipo [NOT NULL], nombre_columnan tipo [NOT NULL][, [CONSTRAINT NOMBRERESTRICCION] PRIMARY KEY(nombre_columna(s)), INDEX(nombre_columna(s))]) 3.- CREATE TABLE nombre_tabla LIKE nombre_otra_tabla; Sintaxis para definir columnas es: nombre_col tipo [NOT NULL | NULL] [DEFAULT valor_por_defecto] [AUTO_INCREMENT] [[PRIMARY] KEY] [COMMENT 'string'] Notas de Instructor En la gráfica anterior se muestran tres sintaxis distintas par definir una tabla en MySQL, la tercera opción permite definir la estructura de una tabla a partir de la definición de otra, sólo se copia la estructura no los datos que contiene. Cuando no se especifica el motor de almacenamiento, por defecto el manejador usa el MyISAM. Es importante tener en cuenta que cuando una columna se define como clave primaria es obligatorio que antes se haya especificado la restricción NOT NULL sobre la columna. MySQL es sensible a minúsculas y mayúsculas con los nombres de las tablas, es importante mantener un estándar en el nombramiento de estos objetos de base de datos. Frase de Transición Ahora mostraremos algunos ejemplos de definición de tablas

35 Sentencias DDL 1.- CREATE TABLE cliente ( id_cliente INT NOT NULL,
nombre VARCHAR(20), PRIMARY KEY (id_cliente) ) TYPE = INNODB; 2.- CREATE TABLE cliente_copia LIKE cliente; 3.- CREATE TABLE factura id_factura INT NOT NULL PRIMARY KEY, monto DOUBLE, INDEX (id_cliente) ) TYPE = HEAP; 4.- CREATE TABLE PRUEBA ID INT AUTO_INCREMENT PRIMARY KEY, PREGUNTA VARCHAR(20), RESPUESTA VARCHAR(20) ) AUTO_INCREMENT = 10; Notas de Instructor A continuación mostramos algunos ejemplos de definición de tablas: En estos ejemplos se asume que existe una conexión a una base de datos: Ejemplo 1: Se define la tabla cliente la cual tiene dos columnas (id_cliente y nombre), siendo la columna id_cliente la clave primaria, además se indica el motor de almacenamiento es INNODB (Soporte a transacciones). Ejemplo 2: Se define la tabla cliente_copia a partir de la definición de la tabla cliente. Ejemplo 3: Se define la tabla factura la cual tiene tres columnas (id_factura_id_cliente_monto), siendo id_factura la clave primaria, y se crea un índice para la columna id_cliente, cuando el servidor es detenido todos los datos de la tabla se pierden, la estructura de la tabla permanece. Ejemplo 4: AUTO_INCREMENT puede ser agregada como opción a una columna, si al insertar una fila se omite el valor de la columna auto_incrementada o si se inserta un valor nulo para esa columna, su valor se calcula automáticamente, tomando el valor más alto de esa columna y sumándole una unidad. Esto permite crear, de una forma sencilla, una columna con un valor único para cada fila de la tabla., por defecto esta inicializado en uno, aunque puede ser configurado, en el ejemplo anterior el valor inicial para el auto_incremento es 10. Frase de Transición Seguimos con la definición de tablas de base de datos

36 Sentencias DDL Con la sentencia DESCRIBE es posible obtener información sobre la definición de una tabla: DESCRIBE cliente; Usando SHOW COLUMNS FROM cliente puede obtenerse un resultado semejante Ejemplo: SHOW COLUMNS FROM cliente; Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora hablaremos de los indices

37 Sentencias DDL ÍNDICES: Para definir índices sobre una columna o sobre varias se usan indistintamente las opciones KEY o INDEX. Ejemplo: CREATE TABLE computador( id INT, marca VARCHAR(20), modelo VARCHAR(20), INDEX(modelo)); KEY(modelo)); También podemos crear un índice sobre parte de una columna:   CREATE TABLE computador( id INT, marca VARCHAR(20), modelo VARCHAR(20), INDEX(modelo(4))); Notas de Instructor Ejemplo de índice parcial En el ejemplo usará sólo los cuatro primeros caracteres de la columna 'modelo' para crear el índice. Frase de Transición Ahora hablaremos de los indices

38 Sentencias DDL CLAVES FORÁNEAS: Se pueden definir claves foráneas en cualquier tipo de tabla de MySQL, pero únicamente tienen sentido cuando se usan tablas del tipo InnoDB Ejemplo: CREATE TABLE cliente ( id_cliente INT NOT NULL, nombre VARCHAR(30), PRIMARY KEY (id_cliente) ) TYPE = INNODB; CREATE TABLE factura ( id_factura INT NOT NULL, id_cliente INT NOT NULL, monto DOUBLE, PRIMARY KEY(id_factura), FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente) ON DELETE CASCADE ) TYPE = INNODB; Notas de Instructor Para que una columna sea una clave foránea, esta necesita ser definida como tal al momento de crear la tabla o en un momento posterior con la sentencia ALTER. Se pueden definir claves foráneas en cualquier tipo de tabla de MySQL, pero únicamente tienen sentido cuando se usan tablas del tipo InnoDB, en los otros motores de almacenamiento no se verifica si una clave foránea existe realmente en la tabla referenciada, y que no se eliminan filas de una tabla con una definición de clave foránea. Para hacer esto hay que usar tablas InnoDB. Es obligatorio que la columna que contiene una definición de clave foránea esté indexada. Pero esto no debe preocuparnos demasiado, ya que si no lo hacemos de forma explícita, MySQL lo hará de forma implícita. Frase de Transición Ahora hablaremos de la sentencia ALTER TABLE

39 Sentencias DDL En muchas oportunidades es posible que se requiera cambiar la estructura de las tablas en una base de datos, para hacer esto usamos la sentencia ALTER TABLE Ejemplo: 1.- ALTER TABLE cliente ADD COLUMN salario INT; 2.- ALTER TABLE cliente DROP COLUMN salario; 3.- ALTER TABLE cliente ADD COLUMN salario DOUBLE; 4.- ALTER TABLE cliente ADD INDEX salario_ind (salario); Notas de Instructor Ejemplo 1: Se agrega la columna salario del tipo entero a la tabla cliente Ejemplo 2: Se elimina la columna salario Ejemplo 3: Se agrega la columna salario del tipo double Ejemplo 4: Se define un índice sobre la columna salario indicando que el índice se llamara salario_ind Frase de Transición Ahora hablaremos de la sentencia DROP TABLE

40 Sentencias DDL Sintaxis:
DROP TABLE: Permite eliminar una o varias tabla(s) de una base de datos Sintaxis: DROP TABLE [IF EXISTS] nombre_tabla[, nombre_tabla2,….] ... Ejemplo DROP TABLE personal, asegurados; Notas de Instructor En la sentencia DROP es posible especificar mas de una tabla en MySQL Frase de Transición Ahora hablaremos de las sentencias DML

41 Sentencias DML INSERT: Sentencia usada para insertar datos en una tabla Sintaxis: INSERT INTO nombre_tabla[(nombre_columna1,nombre_columna2,..,..)]VALUES(valor1,valor2,..); Usando INSERT con SELECT: nombre_tabla1 (col1,col2,...) SELECT col1,col2,.. FROM nombre_tabla2; Ejemplos: INSERT INTO cliente values (1,'Juancho',54121); INSERT INTO cliente values (2, 'Luis', ),(3,'Pedro', ), (4,'Pedro', ),(5,'Pedro', ),(6,'Pablo', ), (7,'Nelson', ),(8,'Nelson', ) ,(9,'Jesus', ), (10,'Jesus',5487), (11,'Miguel',45877) ,(12,'Miguelina',45877), (13,'Pedrito',458377); INSERT INTO factura values(1,1, ); Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora hablaremos de carga masiva

42 Sentencias DML Ejemplo:
CARGA de DATOS DESDE UN ARCHIVO: Para cargar datos en una tabla desde un archivo externo se usa la sentencia LOAD DATA Ejemplo: mysql> LOAD DATA LOCAL INFILE "personal.txt“ INTO TABLE personal; La sentencia LOAD DATA nos permite especificar cuál es el separador de columnas, y el separador de registros, por defecto el “tabulador” es el separador de columnas (campos), y el “salto de línea” es el separador de registros En el ejemplo anterior la estructura de la tabla personal debe estar definida en la base de datos. Notas de Instructor Breve explicación de cada uno de los puntos de la lamina En el laboratorio no evaluado se practicara como cargar datos masivos desde un archivo externo Frase de Transición Ahora hablaremos de la sentencia UPDATE

43 Sentencias DML UPDATE: La sentencia UPDATE es usada para actualizar valores de columnas de una tabla. Sintaxis: UPDATE nombre_tabla SET nombrecol1=valor, [nombrecol2=valor, ...] [WHERE Condición] [LIMIT #] Ejemplo: UPDATE cliente SET nombre='Luis' Where id_cliente=1; Notas de Instructor La sentencia UPDATE es usada para actualizar valores de columnas de una tabla. La cláusula SET indica cual o cuales columna(s) va(n) a ser modificada(s) y los nuevos valores. La cláusula WHERE es usada para especificar las filas que van a ser afectadas. La cláusula LIMIT indica la cantidad máxima de filas (registros) que van a ser actualizadas. Frase de Transición Ahora hablaremos de la sentencia DELETE

44 Sentencias DML DELETE: La sentencia DELETE es usada para eliminar registros de una tabla. Sintaxis: 1.- DELETE FROM nombre_tabla [WHERE Condición] [ORDER BY ....] [LIMIT #]; 2.- DELETE <nombretabla1>, <nombretabla2>...... FROM nombretabla1,nombretabla2... [WHERE Condición]; Notas de Instructor Sintaxis: 1.- LIMIT permite definir el número de registros a ser eliminados. ORDER BY permite especificar un orden para los datos que van a ser eliminados(Orden Ascendente). 2.- Esta sentencia permite eliminar registros de una o varias tablas. Ejemplos: 1.- Elimina el cliente identificado con el id_cliente = 5 2.- Elimina el primer registro de la tabla cliente ordenado por nombre (primero ordena por nombre ascendentemente y después elimina el primer registro). 3.- Esta sentencia elimina registros tanto de la tabla cliente como factura. Frase de Transición Ahora hablaremos de las sentencias DQL Ejemplos: 1.- DELETE FROM cliente WHERE id_cliente=5; 2.- DELETE FROM cliente ORDER by nombre LIMIT 1; 3.- DELETE cliente,factura FROM cliente,factura where cliente.id_cliente = factura.id_cliente;

45 Sentencias DQL SELECT: La sentencia SELECT se usa para recuperar filas seleccionadas de una o más tablas. Sintaxis: SELECT [ALL | DISTINCT | DISTINCTROW] nombrecolumna1,nombrecolumna2,.... FROM tabla1[,tabla2...] ¨ [WHERE condiciones] [GROUP BY (nombre_col)] [HAVING condiciones] [ORDER BY nombre_col] [ASC | DESC] [LIMIT contador] Ejemplo: SELECT * FROM cliente; Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Cada nombrecolumna indica una columna que se quiere recuperar, tablax indica la tabla o tablas de las que se recuperan filas (Esta sintaxis describe un JOIN), condiciones_where consiste de la palabra clave WHERE seguida por una expresión que indica la condición o condiciones que las filas deben satisfacer para ser seleccionadas. SELECT puede usarse también para recuperar filas calculadas sin referencia a ninguna tabla. Por ejemplo: SELECT 5 - 3; Todas las cláusulas deben ser usadas en el mismo orden que se muestra en la descripción de la sintaxis. Frase de Transición Ahora hablaremos de las clausulas de la sentencia SELECT

46 Sentencias DQL DISTINCT y DISTINCTROW: Son usadas para restringir la aparición de filas repetidas. Ejemplo. SELECT [DISTINCT | DISTINCTROW] nombre FROM cliente; WHERE: Generalmente nos interesará saber qué filas se ajustan a determinados parámetros. Esto se realiza con la cláusula WHERE del SELECT Ejemplo: SELECT * FROM cliente WHERE nombre='Luis'; ALIAS: El alias se usa como un nombre de columna en expresiones, también es posible definir alias a las tablas de la cláusula FROM. SELECT CONCAT(nombre,', ',salario) AS Nombre_Salario FROM cliente ORDER BY Nombre_Salario; Notas de Instructor Para ALIAS: SELECT CONCAT(nombre,', ',salario) AS Nombre_Salario FROM cliente ORDER BY Nombre_Salario; El AS es opcional cuando se define un alias sobre una expresión o columna. El ejemplo anterior se puede escribir como: SELECT CONCAT(nombre,', ',salario) Nombre_Salario Para definir alias a una referencia de una tabla se usara la siguiente sintaxis: SELECT t1.col1, t2.col2 FROM tabla1 AS t1, tabla2 AS t2 WHERE t1.col1 = t2.col2; Frase de Transición Ahora hablaremos de las clausulas de la sentencia SELECT

47 Sentencias DQL GROUP BY: Es posible agrupar filas en la salida de una sentencia SELECT usando la cláusula GROUP BY. Ejemplo: SELECT id_cliente, nombre FROM cliente GROUP BY nombre; HAVING: La cláusula HAVING permite hacer selecciones sobre datos agrupados. SELECT nombre, count(nombre) FROM cliente GROUP BY nombre HAVING COUNT(nombre) >= 2; ORDER BY: Es usada para dar ordenamiento a los datos recuperados en una sentencia SELECT. SELECT id_cliente,nombre FROM cliente ORDER BY id_cliente, nombre; Notas de Instructor Breve explicación de cada uno de los puntos de la lamina GROUP BY: La principal utilidad de la cláusula GROUP BY es que permite usar funciones de resumen o reunión (funciones agregadas), tales como: COUNT(), MAX(), MIN(), SUM(), AVG(), etc. Ejemplo: SELECT COUNT(nombre) FROM cliente GROUP BY nombre; Para ORDER BY: Las columnas seleccionadas pueden ser referenciadas usando nombres de columna, alias de columna o posiciones de columna. Las posiciones de columna son enteros que empiezan en 1. Para ordenar en orden inverso se añade la palabra clave DESC (descendente). Por defecto el orden es ascendente, pero puede ser especificado explícitamente por la palabra clave ASC. El uso de posiciones de columna está desaconsejado ya que esa sintaxis ha sido eliminada de SQL estándar. Frase de Transición Ahora hablaremos de las clausulas de la sentencia SELECT

48 Sentencias DQL LIMIT: La cláusula LIMIT permite limitar el número de filas recuperadas por la sentencia SELECT. Ejemplo: SELECT * FROM cliente LIMIT 3; Operador IN: El operador IN se usa para realizar comparaciones con una lista de valores. SELECT * FROM cliente WHERE nombre = 'Jesus' OR nombre= 'Pedro' OR nombre='Nelson'; Esta sentencia puede ser reescrita como: SELECT * FROM cliente WHERE nombre IN ('Jesus','Pedro','Nelson'); Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora hablaremos de los operadores IS y between

49 Sentencias DQL Operador BETWEEN: El operador BETWEEN se usa para comprobar si cierto valor está dentro de un rango dado. Ejemplo: SELECT id_cliente,nombre FROM cliente WHERE salario >= 1000 AND salario <= 50000; La consulta anterior se puede escribir también usando el operador BETWEEN. SELECT id_cliente,nombre FROM cliente WHERE salario BETWEEN 1000 AND 50000; Operador IS: Los operadores IS NULL e IS NOT NULL son utilizados para verificar si una expresión determinada es o no nula. SELECT * FROM cliente WHERE nombre IS NOT NULL; Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora hablaremos del operador LIKE

50 Sentencias DQL Operador LIKE: Es usado para hacer comparaciones entre cadenas y patrones. El resultado es verdadero (1) si la cadena se ajusta al patrón, y falso (0) en caso contrario. Los patrones son cadenas de caracteres en las que se pueden encontrar en cualquier posición los caracteres especiales '%' y '_'. ‘%’ Es usado para hacer coincidir cualquier número de caracteres, incluso ninguno. ‘_’ Es usado para hacer coincidir un único carácter. Ejemplo: SELECT * FROM cliente WHERE nombre LIKE 'Miguel%'; Notas de Instructor Breve explicación de cada uno de los puntos de la lamina Frase de Transición Ahora hablaremos de las consultas multitablas

51 Consultas Multitablas
Los datos están distribuidos en diferentes tablas debido a la normalización Enlaza tablas de datos por medio de un valor de atributo común en ambas tablas Puede ser aplicada a dos o más tablas para poder recuperar registros de múltiples tablas Tipos de JOIN: Cartesian JOIN (Producto Cartesiano) INNER JOIN Right Outer Left Outer Self Notas de Instructor La data es distribuida en diferentes tablas debido a la normalización. La normalización elimina la redundancia de infoormación y garantiza la integridad de los datos almacenados en la base de datos. Cuando los usuarios requieren obtener datos que se encuentran dispersos en varias tablas se requiere el uso la union (JOINS) de varias tablas para obtener la infromación. Las sentencias SELECT permiten obtener o recuperar datos de una o mas tablas haciendo uso de JOINS, para unir (JOINS) dos o mas tablas estas deberian compartir valores al menos en una de esas columnas. En MySQL no esta implementado el FULL OUTER JOIN Frase de Transición Ahora veremos como trabajan las condiciones JOINS

52 Consultas Multitablas
PRODUCTO CARTESIANO (CARTESIAN JOIN): Hace corresponder todas las filas de la primera tabla con todas las filas de la segunda tabla y presenta una combinación de todos los registros de ambas tablas. Ejemplo SELECT * FROM personal, division; Notas de Instructor El Cartesian JOIN hace corresponder todas las filas presentes en la primera tabla con todas las filas de la segunda tabla y muestra como resultado la combinación de todos los registros de ambas tablas. Para el Cartesian JOIN no se requiere que las dos tablas mantengan columnas coincidentes. NOTA: En una carpeta anexa se encuentran los codigos para crear las tablas e insertar datos en las tablas, podriamos ir explicando las sentencias a medida que los estudiantes van ejecutandolas Frase de Transición En la siguiente lamina hablaremos de INNER JOIN

53 Consultas Multitablas
INNER JOIN: Las composiciones internas (INNER JOIN) se definen a partir de un producto cartesiano, eliminado las filas que no cumplen la condición de composición. Ejemplos SELECT * FROM personal JOIN division ON (personal.no_division=division.no_division); SELECT * FROM personal INNER JOIN division ON (personal.no_division=division.no_division); SELECT * FROM personal JOIN division USING(no_division); Notas de Instructor Las composiciones internas se definen a partir de un producto cartesiano, eliminado las filas que no cumplen la condición de composición. Estas composiciones se denominan internas porque en la salida no aparece ninguna fila que no esté presente en el producto cartesiano, es decir, la composición se hace en el interior del producto cartesiano de las tablas. La coma y JOIN son equivalentes, y la palabra INNER es opcional. La condición en la cláusula ON puede ser cualquier expresión válida para una cláusula WHERE, de hecho, en la mayoría de los casos, son equivalentes. La cláusula USING nos permite usar una lista de atributos que deben ser iguales en las dos tablas a componer. Frase de Transición En la siguiente lamina hablaremos de RIGHT OUTER JOIN

54 Consultas Multitablas
RIGHT OUTER JOIN: La sentencia Right Outer JOIN hace corresponder los registros de la tabla del lado derecho con los registros de la tabla del lado izquierdo basándose en la igualdad de valores que se especifica en la condición JOIN. Ejemplos SELECT * FROM personal RIGHT OUTER JOIN division ON (personal.no_division=division.no_division); Puede ser escrito como: SELECT * FROM personal RIGHT OUTER JOIN division USING(no_division); Notas de Instructor La sentencia Right Outer JOIN hace corresponder los registros de la tabla del lado derecho con los registros de la tabla del lado izquierdo basándose en la igualdad de valores que se especifica en la condición JOIN. Además, también incluye aquellos registros presentes en la tabla del lado derecho que no están asociados con los registros de la tabla del lado izquierdo. Este tipo de JOIN es llamado Right Outer JOIN porque el valor de la columna de la tabla del lado derecho es la base con la cual la comparación y la operación JOIN se realiza. Si no hay valor asociado, se muestra el valor NULL. Frase de Transición En la siguiente lamina hablaremos del LEFT OUTER JOIN

55 Consultas Multitablas
LEFT OUTER JOIN: La sentencia Left Outer JOIN hace corresponder los registros de la tabla del lado izquierdo con los registros de la tabla del lado derecho basándose en la igualdad de valores que es especificada en la condición JOIN. Ejemplo SELECT * FROM personal LEFT OUTER JOIN division ON (personal.no_division=division.no_division); Puede ser escrito como: SELECT * FROM personal LEFT OUTER JOIN division USING (no_division); Notas de Instructor La sentencia Left Outer JOIN hace corresponder los registros de la tabla del lado izquierdo con los registros de la tabla del lado derecho basándose en la igualdad de valores que es especificada en la condición JOIN. Además, también incluye aquellos registros presentes en la tabla del lado izquierdo, que no están asociados con los registros de la tabla del lado derecho. Este tipo de JOIN es llamado Left Outer JOIN porque el valor de la columna de la tabla del lado izquierdo es la base con la cual la comparación y la operación JOIN se realiza. Para hacer la correspondencia de los registros de la segunda tabla, si no se puede realizar la equivalencia de los valores, se muestra un valor NULL. Frase de Transición En la siguiente lamina hablaremos del SELF OUTER JOIN

56 Consultas Multitablas
SELF JOIN: Es posible realizar un JOIN en una misma tabla si una tabla tiene dos atributos que comparten el mismo valor. Ejemplos SELECT S.nombre, M.nombre FROM personal S, personal M WHERE S.no_grnt = M.no_personal; Notas de Instructor Por definición, un JOIN se aplica entre los valores de atributos comunes de dos tablas o más. En el caso de una tabla que tiene dos atributos, los cuales comparten el mismo valor, un JOIN puede ser realizado en la misma tabla. Frase de Transición En la siguiente lamina vamos a estudiar las subconsultas

57 SubConsultas Subconsulta Correlacionada: Cuando la subconsulta hija hace referencia a una o más columnas de la subconsulta padre. Ejemplo SELECT division.nombre_division FROM division WHERE EXISTS ( SELECT no_division FROM personal WHERE personal.no_division = division.no_division); Subconsulta No Correlacionada: No existe referencia de las columnas entonces se dice que es no-correlacionada. SELECT * FROM personal WHERE no_division = (SELECT no_division FROM division WHERE nombre_division='HARDWARE'); Notas de Instructor Una sub-consulta es una sentencia SELECT dentro de otra sentencia, MySQL da soporte para cualquier forma de sub-consulta basado en el estándar SQL. 1:SELECT * FROM tabla1 WHERE col1 =(2:SELECT col1 FROM tabla2); 1 Consulta Padre Consulta Hija. Existen dos tipos de sub-consultas: correlacionadas y no-correlacionadas, cuando la subconsulta hija hace referencia a una o más columnas de la subconsulta padre se dice que es una subconsulta correlacionada, si no existe referencia de las columnas entonces se dice que es no-correlacionada. En el ejemplo anterior si la consulta interna retorna más de un valor resultaría en un error, en estos casos cuando el resultado de la sub-consulta interna es un conjunto de datos utilizamos operador IN. La secuencia de ejecución de las sentencias es la misma que ya hemos aprendido del volumen anterior. Frase de Transición Ahora hablaremos de usuarios y privilegios

58 Usuarios y Privilegios
MySQL implementa 5 niveles de privilegios: Globales: Se aplican al conjunto de todas las bases de datos en un servidor. Es el nivel más alto de privilegio. De base de datos: Se aplican a bases de datos individuales, y a todos los objetos que contiene cada base de datos. De tabla: Se aplican a tablas individuales, y a todas las columnas de esas tablas. De columna: Se aplican a una columna en una tabla. De rutina: Se aplican a los procedimientos almacenados (MySQL 5.x). Notas de Instructor Explicar brevemente las laminas Frase de Transición La salida que se obtiene de ejecutar estas sentencia SQL se obtiene en la siguiente lamina.

59 Usuarios y Privilegios
SENTENCIA GRANT: Usando GRANT podemos crear un usuario y al mismo tiempo concederle privilegios. La sintaxis es: GRANT tipo_priv [(columnas)] [, tipo_priv [(columnas)]] ... ON {nombre_tabla | * | *.* | nombre_bd.*} TO usuario [IDENTIFIED BY [PASSWORD] 'password'] [,usuario [IDENTIFIED BY [PASSWORD] 'password']] ... [WITH GRANT OPTION] Notas de Instructor La opción tipo_priv [(columnas)] permite definir el tipo de privilegio concedido para determinadas columnas. La segunda ON {nombre_tabla | * | *.* | nombre_bd.*}, permite conceder privilegios en niveles globales, de base de datos o de tablas [WITH GRANT OPTION] : Permite al usuario que recibe los privilegios poder otorgarlos a otros. En el manual existe una tabla con los privilegios que pueden ser otorgados Frase de Transición La salida que se obtiene de ejecutar estas sentencia SQL se obtiene en la siguiente lamina.

60 Usuarios y Privilegios
SENTENCIA REVOKE: Para revocar privilegios se usa la sentencia REVOKE, la sintaxis es similar a la sentencia GRANT: REVOKE tipo_priv [(columnas)] [, tipo_priv [(columnas)]] ... ON {nombre_tabla | * | *.* | nombre_bd.*} FROM user [, user] .... SENTENCIA SHOW GRANT: Podemos ver qué privilegios se han concedido a un usuario mediante la sentencia SHOW GRANTS. La salida de esta sentencia es una lista de sentencias GRANT que se deben ejecutar para conceder los privilegios que tiene el usuario. Por ejemplo: Para mostrar los privilegios del usuario actual ejecutamos SHOW GRANTS: Notas de Instructor La salida de la sentencia SHOW GRANTS muestra dos partes: la primera consiste en un nombre de usuario, en nuestro ejemplo test. La segunda parte, que esta separada de la primera por el es un nombre de máquina (host). Este nombre puede ser bien el de una máquina, por ejemplo, localhost para referirse al ordenador local, cualquier otro nombre, o bien una dirección ip, esto indica donde es permitido al usuario conectarse al servidor MySQL. La parte de la máquina es opcional, si no se coloca, el usuario podrá conectarse desde cualquier máquina. La salida de SHOW GRANTS lo indica usando el comodín '%' para el nombre de la máquina. Si creamos un usuario para una máquina o conjunto de máquinas determinado, ese usuario no podrá conectar desde otras máquinas. Ejemplo (Esta sentencia solo puede ser ejecutada por el administrador del servidor de base de datos): GRANT USAGE ON * TO IDENTIFIED BY 'clave'; El usuario curso_tarde sólo puede conectarse desde el computador cuyo IP es Las mayores diferencias entre las versiones de GRANT del estándar SQL y de MySQL son: En MySQL, los privilegios están asociados con una combinación de usuario/contraseña y no sólo con un usuario. El estándar SQL no tiene privilegios de nivel global o de base de datos, ni soporta todos los tipos de privilegio que soporta MySQL. Los privilegios del estándar SQL están estructurados de forma jerárquica. Si se elimina un usuario, todos los privilegios que tiene concedidos se revocan. Antes de MySQL 5.0.2, los privilegios concedidos no son revocados automáticamente; deben ser revocados directamente. Con SQL estándar, cuando se elimina una tabla, todos los privilegios para la tabla son revocados. Con SQL estándar, cuando se revoca un privilegio, todos los privilegios concedidos basados en él son revocados también. En MySQL, los privilegios pueden ser eliminados sólo con la sentencia REVOKE explícita o mediante la manipulación de las tablas de concesión de MySQL. En MySQL, si sólo se posee el privilegio INSERT en algunas de las columnas de una tabla, se pueden ejecutar sentencias INSERT en la tabla; las columnas para las que no se posee el privilegio INSERT serán asignados sus valores por defecto. SQL estándar requiere que se posea el privilegio INSERT en todas las columnas. Frase de Transición Ahora hablaremos de respaldo y restauración


Descargar ppt "Fundamentos de MySQL."

Presentaciones similares


Anuncios Google