MySQL for Developers

20.996 visualizaciones

Publicado el

Manual para desarrolladores de bases de datos MySQL , muestra desde el levantamniento del servicio hasta configuraciones, bd, transacciones,etc

Publicado en: Educación, Tecnología
1 comentario
8 recomendaciones
Estadísticas
Notas
Sin descargas
Visualizaciones
Visualizaciones totales
20.996
En SlideShare
0
De insertados
0
Número de insertados
382
Acciones
Compartido
0
Descargas
1.036
Comentarios
1
Recomendaciones
8
Insertados 0
No insertados

No hay notas en la diapositiva.

MySQL for Developers

  1. 1. MySQL for Developers MySQL for Developers v.1 Update 2 “The most Popular Open Source Database” By: Domínguez Geniz Amalio Javier 12/02/2009 GENIZ v. 1 Update 2 1
  2. 2. Notas: Parte del presente Manual se encuentra basado en la guía del estudiante “MySQL for Developers” Presented by MySQL Training Services Firmado digitalmente por Javier Of Sun Microsystems, INC. Javier Dominguez Geniz Nombre de reconocimiento (DN): Dominguez cn=Javier Dominguez Geniz, o=Geniz SWF, ou, email=ajdgeniz@hotmail.com, Geniz c=MX Fecha: 2009.02.12 21:43:13 +01'00' Este manual esta dedicado a quien siempre me ha apoyado y motivado en el transcurso de mi carrera, quien de además de transmitirme conocimientos y conducirme a ellos, es ahora mi mejor amigo. 12/02/2009 GENIZ v. 1 Update 2 2
  3. 3. MySQL for Developers 1 Índice: 1. Introducción 2. MySQL Cliente – Servidor 3. Clientes MySQL 4. Consultando Datos de una Tabla 5. Expresiones SQL 6. Tipos de Datos 7. Manejo de Errores y Alertas 8. Metadatos 9. Bases de Datos 10. Tablas 11. Manipulando Datos de Tablas 12. Transacciones 12/02/2009 GENIZ v. 1 Update 2 3
  4. 4. MySQL for Developers 2 Indice: 13. JOINS 14. Subconsultas 15. Vistas 16. Consultas Preparadas 17. Exportando e importando Datos 18. Rutinas Almacenadas • Funciones • Procedimientos Almacenados 19. Triggers (Disparadores) 20. Motores de Almacenamiento (Engines) 21. Optimización 12/02/2009 GENIZ v. 1 Update 2 4
  5. 5. 1. Introduction 12/02/2009 GENIZ v. 1 Update 2 5
  6. 6. Objetivos:  Los detalles del Modelo de Negocios de MySQL AB Productos disponibles desde MySQL AB Definir las diferencias entre Enterprise y Community Sistemas Operativos Soportados Como Instalar MySQL Server en un entorno Windows 12/02/2009 GENIZ v. 1 Update 2 6
  7. 7. 1. Introduction 1. 1 MySQL AB MySQL es un sistema manejador de Base de Datos Relacionales (RDBMS). MySQL AB desarrolla una familia de alto performance, servidores de base de datos y herramientas. Contribuye a construir la misión-critica , un alto volumen de sistemas y productos en la red mundial es lo que hace de MySQL la base de datos de código abierto más popular del mundo. MySQL no es tan solo la base de datos de código abierto más popular del mundo, es también la base de datos con mayor crecimiento en la industria, con más de 8 millones de instalaciones y 50,000 descargas por día. La compañía fue fundada en Suecia por David Axmark, Allan Larsson y Michael Monty Widenius. The MySQL mission: To make superior database software available and affordable to all. 12/02/2009 GENIZ v. 1 Update 2 7
  8. 8. 1. 2 MySQL Products MySQL provee productos Empresariales y de usuarios de Community Server. Los productos son reconocidos por su superior caso de uso, ejecución y rentabilidad. Enterprise Server Community Server Embedded Database Cluster MaxDB 12/02/2009 GENIZ v. 1 Update 2 8
  9. 9. 1.3 MySQL GUI Tools  MySQL Migration Toolkit MySQL Administrator MySQL Query Browser Network Enterprise Dashboard 12/02/2009 GENIZ v. 1 Update 2 9
  10. 10. 1.4 MySQL Drivers También conocidos como conectores son hechos para desarrolladores que construyen aplicaciones en el lenguaje que prefieran. Además una librería nativa de C que permite embeber MySQL directamente dentro de sus aplicaciones de C. MySQL provee los siguientes drivers.  MySQL Connector/ODBC MySQL Connector/J MySQL Connector/Net MySQL Connector/MXJ MySQL Connector/PHP 12/02/2009 GENIZ v. 1 Update 2 10
  11. 11. 1.5 Supported Operating Systems • Windows •Linux •Solaris •FreeBSD •Mac OS •HP-UX •IBM AIX •QNX •SCO •Open BSD •SGI Irix •Novell NetWare 12/02/2009 GENIZ v. 1 Update 2 11
  12. 12. Lab 1 •Installing MySQL • Installing the ‘world’ Database 1. Teclea en la línea de comandos: mysql> CREATE DATABASE world; 2. Teclea: mysql> USE world; 3. Teclea: mysql> SOURCE C:/world.sql; 12/02/2009 GENIZ v. 1 Update 2 12
  13. 13. 2. MySQL Client/Server 12/02/2009 GENIZ v. 1 Update 2 13
  14. 14. Objetivos:  Describir Modelo de MySQL Client Server Comprender como el servidor soporta distintos Motores de Almacenamiento Explicar el uso básico de Memoria y Disco 12/02/2009 GENIZ v. 1 Update 2 14
  15. 15. 2. MySQL Client/Server 2.1 MySQL General Architecture MySQL opera en un entorno de Red de trabajo usando la arquitectura Cliente- Servidor. En otras palabras, un programa se encuentra activo en el servidor y varios programas clientes se conectan al servidor haciendo diferentes peticiones. Una instalación de MySQL incluye los siguientes componentes: •MySQL Server •Clients Programs •MySQl nonclient utilities 12/02/2009 GENIZ v. 1 Update 2 15
  16. 16. 2.2 MySQL Server El servidor MySQL o mysqld, es el programa servidor de la base de datos. El servidor administra el acceso a la base de datos actual en disco o en memoria. MySQL Server es multihilo y soporta muchas conexiones simultaneas de clientes. La diferencia entre un Server y un Host El server es software(mysqld), algunas características que incluye son: el Numero de la Versión y procesar consultas SQL. Mientras que el host es la maquina física donde el programa servidor se ejecuta. El host tiene características de configuración de hardware, el sistema operativo y direcciones de red. 12/02/2009 GENIZ v. 1 Update 2 16
  17. 17. 2.3 Client Programs Estos son programas usados para la comunicación con el servidor para manipular las bases de datos administradas por el servidor. MySQL AB provee varios clientes, a continuación se describen algunos de ellos: • MySQL Query Browser y MySQL Administrator, son interfaces gráficas de el servidor. •Mysql: es un programa de línea de comandos basado en texto, utilizado para emitir consultas y ver los resultados interactivamente en una terminal de Windows o una Shell de UNIX. •Otros clientes de línea de comandos son: mysqlimport para importar archivos de datos, mysqldump para realizar copias de seguridad, mysqladmin para la administración del servidor y mysqlcheck para la integridad de los archivos de la base de datos. 12/02/2009 GENIZ v. 1 Update 2 17
  18. 18. 2.4 MySQL Client/Server Model mysqld MySQL Server Process TCP/IP ODBC TCP/IP Socket Database localhost Windows mysql PHP Client Client TCP/IP Process Process PHP Linux 12/02/2009 GENIZ v. 1 Update 2 18
  19. 19. 2.5 MySQL Non-Client Utilities Estos son programas independientes del servidor. Por ejemplo myisamchk que se encarga de checar y reparar operaciones de tablas. Otro programa en esta categoría es myisampack el cual crea y comprime versiones de tablas MyISAM. Las utilidades antes mencionadas acceden a los archivos de tablas MyISAM directamente, son independientes de el servidor mysqld. 12/02/2009 GENIZ v. 1 Update 2 19
  20. 20. 2.5 Disk Space and uses Memory MySQL utiliza espacio en diferentes formas, principalmente para directorios y archivos que se encuentran bajo una localización conocida como “Directorio de datos”, el servidor utiliza a este directorio para almacenar archivos como los siguientes: • Database Directories. •Table Format Files (.FRM) •Datos e Índices •InnoDB tiene su propio espacio de tablas y archivo de errores •Triggers , se almacena directamente en el directorio de base de datos •Autentificación, es almacenada en mysql database Memoria La memoria es utilizada para estructurar los datos que el servidor administrará para establecer la comunicación con los clientes y los procesos contenidos en la base de datos. Memory Stored Engine Temporary tables 12/02/2009 GENIZ v. 1 Update 2 20
  21. 21. Quiz: 1. All of the MySQL client programs and utilities communicate with the mysql server. (True or False) 2. When running a MySQL server under windows, clients programs accesing that server also must run under windows. (True or False) 3. A command line program commonly used to communicate with the server is called mysqld. (True or False) 4. Every table has its own _________ file(containing a description of table structure ) , located in the appropiate database directory 5. The server executes cach statements using a two-tier processing model: The upper tier includes the SQL parser and optimizer. The lower tier comprises a set of ________ _________ 12/02/2009 GENIZ v. 1 Update 2 21
  22. 22. 3. MySQL Clients 12/02/2009 GENIZ v. 1 Update 2 22
  23. 23. Objetivos:  Invocar los programas clientes con la arquitectura MySQL Client/Server Usar algunos de los recursos del cliente mysql Descargar y utilizar MySQL Query Browser Describir las interfaces clientes provistas por MySQL AB Clientes provistos por terceros 12/02/2009 GENIZ v. 1 Update 2 23
  24. 24. 3. MySQL Clients 3.1 Invoking Client Programs Los programas clientes de MySQL pueden ser invocados desde línea de comandos, como una consola de Windows o una Shell de Unix. Cuando invocamos al programa cliente, debemos especificar el nombre de las opciones que el programa ejecutará. También podemos dar opciones de archivos. shell> mysql –help shell> mysql –version Las opciones tiene dos formas generales: Long Options: Consiste en escribir la palabra con doble guión. Short Options: Consiste en una letra precedida por un guión. shell> mysql - - version shell> mysql - - host=myhost.example.com shell> mysql -V shell> mysql -h myhost.example.com 12/02/2009 GENIZshell> mysql -hmyhost.example.com v. 1 Update 2 24
  25. 25. 3.1.2 Connection Parameter Options -- protocol= protocol_name --host=host_name or –h host name --port=port_number or –P port_number --shared-memory-base-name=memory_name Solo Windows --socket=socket_name or –S socket_name  Solo Unix --compress or -C Protocolos: Opciones de Usuario: TCP Todos --user=user_name or –u user_name SocketUnix --password=pass_value or –ppass_value Pipe Windows Memory  Windows Ejemplo: shell> mysql –h localhost –p –u root shell> mysql –protocol=memory shell> mysql –host=192.168.1.10 –user=myname –password=mypass shell> mysql –host=localhost –compress –uroot -pXXXXXX 12/02/2009 GENIZ v. 1 Update 2 25
  26. 26. Lab 3-A 1. Invoca la ayuda del cliente mysql desde la línea de comandos. 1. Invoca al cliente mysql con un login, utilizando la forma larga. 1. Cierra el cliente escribiendo la orden exit 1. Invoca al cliente con la forma corta del puerto, no beep, user y password. Puerto 3306 12/02/2009 GENIZ v. 1 Update 2 26
  27. 27. 3.2 Using Option Files Una alternativa para especificar opciones en la línea de comandos, es realizar un archivo de opciones, este nos servirá para utilizar y cargar datos desde una archivo. --defaults-file=file_name - -defaults-extra-file=file_name --no-defaults shell> mysql - -defaults-file=C:my-opts.txt [mysql] password=123456 user=root safe-updates compress 12/02/2009 GENIZ v. 1 Update 2 27
  28. 28. Lab 3-B 1. Construye un archivo de opciones utilizando el bloc de notas que incluya lo siguiente: Password, nombre de usuario, safe-updates, modo comprimido , puerto y host. 2. Invoca al cliente mysql con el archivo de opciones utilizando el comando -- defaults-extra-file 3. Confirma las nuevas opciones 4. Cierra la sesión. 12/02/2009 GENIZ v. 1 Update 2 28
  29. 29. 3.3 Using mysql Interactively El cliente mysql puede habilitar el envío de consultas al servidor y recibir los resultados. Puede ser utilizado interactivamente para poder leer entradas de las consultas. También puede ejecutar Statements directamente desde la línea de comandos usando –e or - - execute shell> mysql –uroot –pXXXXXX –e “SELECT VERSION()” 12/02/2009 GENIZ v. 1 Update 2 29
  30. 30. 3.4 Statements Terminators Son utilizados para finalizar una sentencia. Dos de ellos terminan la sentencia y arrojan resultados en forma vertical: ; mysql> SELECT VERSION(), DATABASE(); g mysql> SELECT VERSION(), DATABASE()g Pero si desea que los resultados le aparezcan en forma de fila utilice: G mysql> SELECT VERSION(), DATABASE()G 12/02/2009 GENIZ v. 1 Update 2 30
  31. 31. 3.5 The mysql Prompts El Prompt mysql> es solo una de las diferentes formas que la Prompt nos muestra cuando ingresamos consultas. Cada tipo de Prompt tiene un significado diferente. mysql> Listo para una nueva consulta -> Esperando la siguiente línea de la consulta (; or G) ‘> Esperando finalizar una comilla simple “> Esperando finalizar una comilla doble `> Esperando finalizar el identificador (`) /*> mysql> prompt win1> Win 1> mysql>prompt (u@h)[d]> 12/02/2009 GENIZ v. 1 Update 2 31
  32. 32. LAB 3-C 1. Invoca cliente mysql interactively usando la opción - - execute para mostrar la hora actual. Utiliza la función CURRENT_TIME() 2. En la prompt ingresa una sentencia múltiple para ver la fecha y hora actual, utiliza CURRENT_DATE para ver el tiempo actual. 3. Utiliza la sentencia del paso 2 pero visualiza la salida directamente en forma vertical. 4. Ingresa la siguiente Sentencia: SELECT Name, Population FROM City WHERE CountryCode=‘IND 5. Cambia la prompt mysql> colocando tu Nombre:, después regresa a la prompt de default. 6. Cambia mysql> prompt por el tiempo y la base de datos actual, después regresa al prompt. 7. Cierra la sesión de mysql utilizando q 12/02/2009 GENIZ v. 1 Update 2 32
  33. 33. 3.6 MySQL Output Formats (HTML y XML) Por default mysql produce dos opciones de salida, una de ellas es en forma tabular y en forma vertical, pero podemos seleccionar diferentes formatos, como son el HTML y el XML. --html or -H Produce una salida en formato HTML - -xml or -X Produce la salida en formato XML shell> mysql –uroot –p -H 12/02/2009 GENIZ v. 1 Update 2 33
  34. 34. LAB 3-D 1. Invoca al cliente mysql interactively con una sentencia que muestre la fecha y hora, y que muestre la salida en formato HTML. 2. Invoca al cliente mysql por el modo de default pero indicando que la salida será en formato HTML. 3. Crea un nuevo archivo llamado t1.txt para que almacene toda la sesión, colócalo en la unidad C. utiliza la opción tee 4. Teclea SHOW DATABASES; 5. Dentro del cliente visualiza los contenidos de ayuda utilizando HELP Contents 6. Ingresa mysql>HELP SHOW COLLATION 7. Deshabilita el archivo t1.txt. Utiliza notee 8. Abre el archivo t1.txt y visualiza su contenido 12/02/2009 GENIZ v. 1 Update 2 34
  35. 35. 3.6 MySQL Query Browser Es una interfaz gráfica de usuario del programa cliente mysql, es intuitivo y fácil de usar, provee una interfaz grafica del servidor mysql para ingresar consultas y analizar datos. LAB 3-D 1. Instala y configura MySQL Query Browser 12/02/2009 GENIZ v. 1 Update 2 35
  36. 36. 3.7 MySQL Connectors MySQL provee de Interfaz de Programa de Aplicación (API) para acceder al servidor MySQL , algunas son usadas para escribir programas y otras son solo drivers. Algunas son puentes para programas clientes que quieran acceder utilizando un protocolo en particular. Los conectores soportados oficialmente por MySQL son: •Native “C : Viene incluido en MySQL •MySQL Connector/ODBC : Es un puente entre el servidor MySQL y aplicaciones cliente utilizando el estándar ODBC. •MySQL Connector/J : Es similar a ODBC, pero es usado por programas JAVA basados en JDBC. Escrito en JAVA e implementa la arquitectura cliente-Servidor. •MySQL Connector/NET : Esta hecho para aplicaciones .NET, y no esta basado en librerías de C. esta escrito en C# e implementa la arquitectura cliente-Servidor. •MySQL Connector /MXJ : Es una utilidad de JAVA para desplegar y administrar Bases de datos MySQL. 12/02/2009 GENIZ v. 1 Update 2 36
  37. 37. Quiz: 1. Where does MySQL Connector/ODBC have to be installed? A. Connector/ODBC must be installed on every client host where programs run that should use that connector. B. Connector/ODBC has to be installed on the server host only. This will make it available for all clients connection from remote hosts. C. Connector/ODBC has to be installed both on the server host and on all client hosts. 2. Which of the following statements is true? a. MySQL Connectors are available for all operating systems that MySQL supports. b. MySQL Connectors are shipped together winth MySQL server distributions. c. MySQL Connectors areshipped separately from MySQL server distributions by MySQL AB d. MySQL Connectors are shipped with the MySQL GUI tools. e. MySQL Connectors are shipped separately from MySQL Server distributions by third parties. 3. MySQL Connector/NET runs Windows only. (True or False) 4.All MySQL Connectors are based on MySQL’s C API and are implements using the MySQL C client library (True or False) 5. Is the following statement true? Like all other MySQL programs, MySQL Connectors are written in C. (True or False) 12/02/2009 GENIZ v. 1 Update 2 37
  38. 38. 4. Querying for Table data 12/02/2009 GENIZ v. 1 Update 2 38
  39. 39. Objetivos:  Ejecutar consultas en una tabla utilizando el Statement SELECT Utilizar funciones de Agregación Utilizar la UNION para concatenar resultados 12/02/2009 GENIZ v. 1 Update 2 39
  40. 40. 4. Querying for Table data 4.1 The SELECT Statement El Statement SELECT es principalmente usado para retribuir cero o más registros de una o más tablas en una base de datos, pertenece al DML (Data Manipulation Language ). SINTAXIS mysql> SELECT[<clause options>] <colum list> [FROM] <table> [<clause options>]; EJEMPLO mysql> SELECT Name FROM Country; mysql> SELECT 1+2; 12/02/2009 GENIZ v. 1 Update 2 40
  41. 41. 4.1.1 Usos básicos del SELECT Clauses Definición DISTINCT Elimina registros duplicados FROM Especifica las tablas de donde tomará los datos WHERE Decisión ORDER BY Ordena los datos especificando un criterio LIMIT Reduce el numero de Registros SINTAXIS EJEMPLO SELECT DISTINCT values_to_display mysql> SELECT Continent FROM Country; FROM table_name mysql> SELECT DISTINCT Continent FROM Country; WHERE expression ORDER BY how_to_sort LIMIT row_count; 12/02/2009 GENIZ v. 1 Update 2 41
  42. 42. 4.1.2 SELECT with WHERE Operadores Aritméticos Operador Definición + Suma - Resta * Multiplicación / División % Modulo EJEMPLO mysql> SELECT 1+2 AS suma; 12/02/2009 GENIZ v. 1 Update 2 42
  43. 43. 4.1.2 SELECT with WHERE Operadores de Comparación Operador Definición < Menor que <= Menor o Igual a <=> Igual a <> Or != Diferente(works even for NULL) >= Mayor o igual > Mayor que BETWEEN Indica un rango X and Y 12/02/2009 GENIZ v. 1 Update 2 43
  44. 44. 4.1.2 SELECT with WHERE Operadores Lógicos Operador Definición AND Y Lógica OR O Lógica XOR Lógica exclusive-OR NOT Negación Opciones Adicionales • IN es equivalente a una lista de comparación con OR •NULL los valores pueden ser filtrados usando IS NULL ( WHERE column_name IS NULL) •También podemos utilizar paréntesis () para agrupar alguna operación. 12/02/2009 GENIZ v. 1 Update 2 44
  45. 45. 4.1.2 SELECT with WHERE EJEMPLOS mysql> SELECT Name, Population FROM Country -> WHERE Population > 50000000 AND ->(Continent=‘Europe’ OR Code=‘USA’); mysql> SELECT ID, Name FROM City -> WHERE Name IN (‘New York’ ,’Rochester’,‘Mexico’); 12/02/2009 GENIZ v. 1 Update 2 45
  46. 46. LAB 4-A 1. Realiza un Statement SELECT el cual muestre solo la columna Continent de la tabla Country. 2. Realiza un Statement SELECT el cual muestre la columna Continent y Name de la tabla Country. 3. Realiza un Statement SELECT el cual muestre solo la columna Region de la tabla Country. 4. Repite la consulta del paso 3, pero utiliza un DISTINCT para eliminar los registros Repetidos. 5. Realiza un SELECT /WHERE y que muestre todas las columnas de la tabla City donde el ID sea el numero 3875. 6. Realiza un SELECT /WHERE y que muestre la columna Name de la tabla Country donde la población (Population) sea menor a 1000. 7. Realiza un SELECT/ORDER BY que muestre el nombre(Name) de todas las ciudades de la tabla city en orden descendente (DESC) del nombre. 8. Realiza un SELECT/ORDER BY que muestre el nombre(Name) de los países y ordene el resultado por el campo population en orden descendente. 12/02/2009 GENIZ v. 1 Update 2 46
  47. 47. 4.1.3 SELECT with LIMIT Cuando una consulta regresa muchos resultados y queremos solo visualizar algunos, deberemos de agregar la clausula LIMIT. Esta puede ser utilizada con la clausula ORDER BY. SINTAXIS •LIMIT row_count; •LIMIT posicion_inicial,contador; EJEMPLO mysql> SELECT Name FROM Country LIMIT 8; mysql> SELECT Name , Population FROM Country LIMIT 20,8; mysql> SELECT Name , Population -> FROM Country -> ORDER BY Population DESC LIMIT 5; 12/02/2009 GENIZ v. 1 Update 2 47
  48. 48. 4.2 SELECT with MYSQL Query Browser MySQL Query Browser nos provee una interfaz Grafica de Usuario que nos permite hacer consultas a las tablas. Todas las consultas SELECT pueden ser realizadas desde la interfaz grafica de MySQL Query Browser. 12/02/2009 GENIZ v. 1 Update 2 48
  49. 49. LAB 4-B 1. Realiza un SELECT/LIMIT el cual muestre el nombre de la ciudad, los ordene por nombre y solo muestre 10. 2. Realiza un SELECT/LIMIT el cual muestre Name y Population de la tabla city , los ordene descendentemente y limitado a 5. 3. Realiza un SELECT/LIMIT el cual muestre todas las columnas de la tabla Country donde GNP sea mayor a GNPOLD, en orden del nombre del país, limitado a tres registros y que los muestre en forma de fila. 4. Utilizando el MySQL Query Browser ejecuta las siguientes consultas: • SELECT Continent FROM Country; • SELECT DISTINCT Region FROM Country; • SELECT * FROM City WHERE Name=‘Mexico’G  E • SELECT Name FROM City ORDER BY Name DESC; • SELECT Name FROM City ORDER BY Name ASC LIMIT 10; 12/02/2009 GENIZ v. 1 Update 2 49
  50. 50. 4.3 Aggregate Functions Las funciones de agregación realizan operaciones con valores como un conjunto, promedios o encontrar el máximo o mínimo valor. Función Definición MIN() Encuentra el valor más pequeño MAX() Encuentra el valor más Grande SUM() Suma Total AVG() Promedio STD() Desviación Estándar COUNT() Contador del numero de Registros GROUP_CONCAT() Concatena Cadenas mysql> SELECT COUNT(*) FROM Country; mysql> SELECT COUNT(capital) FROM Country; 12/02/2009 GENIZ v. 1 Update 2 50
  51. 51. 4.4 GROUP BY Una función de agregación puede ser o no utilizada con GROUP BY. Con GROUP BY los grupos son ordenados. Los grupos son basados en valores de una o más columnas. mysql> SELECT Continent, AVG (Population) FROM Country GROUP BY Continent; 4.4.1 GROUP BY with GROUP_CONCAT La función GROUP_CONCAT, concatena los resultados para cada grupo de cadenas, por ejemplo: mysql> SELECT GovernmentForm, GROUP_CONCAT(Name) AS Countries FROM Country -> WHERE Continent=‘South America’ GROUP BY GovernmentForm G 12/02/2009 GENIZ v. 1 Update 2 51
  52. 52. 4.4.2 GROUP BY with ROLLUP El Modificador ROLLUP es utilizado con GROUP BY para realizar una sumatoria total de los valores, por ejemplo, si necesitáramos una lista de la población de cada continente y un el total de la población de todos los continentes usaríamos la clausula WITH ROLLUP: mysql> SELECT Continent, SUM(Population) AS Poblacion FROM Country GROUP BY Continent WITH ROLLUP; 4.4.3 GROUP BY with HAVING El modificador HAVING es utilizado parta eliminar registros basados en funciones de agregación, debe ser colocado en lugar de la clausula WHERE. mysql> SELECT Continent, SUM(Population) AS Pop FROM Country GROUP BY Continent HAVING SUM(Population)>10000000; 12/02/2009 GENIZ v. 1 Update 2 52
  53. 53. LAB 4-C 1. Realiza un SELECT/GROUP BY el cual muestre el nombre de todos los continentes de la tabla Country y el Numero de países por continente SELECT Continent, COUNT(*) AS TOTAL_PAISES FROM Country GROUP BY Continent; 2. Realiza un SELECT/GROUP BY/GROUP_CONCAT que muestre el nombre de todos los continentes de la tabla Country y sus correspondientes países, Muéstralos por filas. SELECT Continent, GROUP_CONCAT(Name) FROM Country GROUP BY ContinentG 3. Realiza un SELECT/GROUP BY/ROLLUP que liste los nombres de todos los continentes de la table Country y sume el GNP por cada continente. SELECT Continent, SUM(GNP) FROM Country GROUP BY Continent WITH ROLLUP; 4. Realiza un SELECT/GROUP BY/HAVING para listar los distritos que tienen más de 30 ciudades. SELECT District, Count(*) AS NumCities FROM City GROUP BY District HAVING Numcities>=30; 12/02/2009 GENIZ v. 1 Update 2 53
  54. 54. 4.5 UNION La UNION habilita la concatenación de los resultados de uno o más SELECT. La sintaxis es la siguiente: SELECT … UNION SELECT … UNION SELECT … mysql> SELECT 1+1 UNION SELECT 2+2; mysql> SELECT Name FROM Country WHERE Continent=‘Europe’ UNION SELECT Name -> FROM Country WHERE Continent=‘North America’ ORDER BY Name ; 12/02/2009 GENIZ v. 1 Update 2 54
  55. 55. 5. SQL Expressions 12/02/2009 GENIZ v. 1 Update 2 55
  56. 56. Objetivos:  Usar componentes de expresiones Usar valores numéricos, cadenas y de tiempo en las expresiones Tipos de funciones que pueden utilizar las expresiones Escribir comentarios en las consultas SQL 12/02/2009 GENIZ v. 1 Update 2 56
  57. 57. 5. SQL Expressions 5.1 Components of SQL Expressions Una Expresión SQL es la parte de una sentencia SQL que define como serán retribuidos los datos. Los términos de una expresión consisten en literales, cadenas, fechas y tiempos. Los valores pueden ser referenciados a columnas de tablas y llamadas a funciones. Por ejemplo SINTAXIS mysql> SELECT Name, Population FROM Country; mysql> SELECT 14, -312.82, 4.32E-03, ‘soy una cadena’; mysql> SELECT CURDATE(), VERSION(); mysql> SELECT Name , TRUNCATE(Population/SurfaceArea,2) AS ‘people/sq. KM’, ->IF(GNP>GNPOLD,’Incremento’,’No Incremento’) AS ‘GNP Trend’ -> FROM Country ORDER BY Name LIMIT 10; 12/02/2009 GENIZ v. 1 Update 2 57
  58. 58. 5.2 Numeric Expressions Los números pueden ser valores exactos, literales o literales con valores aproximados, los valores exactos son usados solo para dar a las sentencias SQL la posibilidad de no producir errores. Los valores numéricos son enteros, valores con punto decimal o valores con partes fraccionales. EJEMPLO mysql> SELECT 1.1+2.2=3.3, 1.1E0 +2.2E0=3.3E0; mysql> SELECT 1+ ‘1’,1=‘1’; 12/02/2009 GENIZ v. 1 Update 2 58
  59. 59. 5.3 String Expressions Las expresiones de cadenas son escritas entre comillas. Pueden ser utilizadas las comillas simples y dobles, a pesar de que las simples son establecidas por default, podemos habilitar el ANSI_QUOTES mode para que las comillas dobles puedan ser interpretadas. Además se les puede aplicar los operadores de comparación. EJEMPLO mysql> SELECT CONCAT(‘abc’,’def’,REPEAT(‘GENIZ’,3)); mysql> SELECT ‘abc’ || ‘def’; mysql> SET sql_mode=‘PIPES_AS_CONCAT’; mysql> SELECT ‘abc’ || ‘def’; 12/02/2009 GENIZ v. 1 Update 2 59
  60. 60. 5.4 Using LIKE El operador = y != son utilizados para encontrar valores iguales o NO Iguales que son específicos exactamente durante la comparación. Podemos usar el Operador LIKE para relacionar cadenas que contengan caracteres especiales llamados ‘METACARACTERES’, para ello utilizaremos el carácter % seguida de una sentencia de caracteres o viceversa. EJEMPLO mysql> SELECT Name FROM Country -> WHERE Name LIKE ‘United%’; mysql> SELECT Name FROM Country -> WHERE Name NOT LIKE ‘United%’; 12/02/2009 GENIZ v. 1 Update 2 60
  61. 61. 5.5 Temporal Expressions Este tipo de expresiones incluyen fechas, tiempos o valores de fecha y tiempo. Este tipo de expresiones también pueden utilizar los operadores de comparación. Tipo FORMATO DATE YYYY-MM-DD TIME HH:MM:SS DATETIME YYYY-MM-DD HH:MI:SS TIMESTAMP YYYY-MM-DD HH:MI:SS DAY DD MONTH MM QUARTER Q YEAR YYYY 12/02/2009 GENIZ v. 1 Update 2 61
  62. 62. 5.5 Temporal Expressions mysql> SELECT ‘2010-01-01’ + INTERVAL 10 DAY, -> INTERVAL 10 DAY + ‘2010-01-01’; mysql> SELECT ‘2010-01-01’ - INTERVAL 10 DAY; 12/02/2009 GENIZ v. 1 Update 2 62
  63. 63. LAB 5-A 1. Ingrese las siguientes Sentencias y anote la respuesta del server: • SELECT 2 + 3+NULL; • SELECT 2+3+’6’; 2. Use un SELECT para concatenar Name y su correspondiente District de la table ciudad con la palabra ‘es en’ entre el Name y el District, limite la salida a 5 registros. SELECT CONCAT(Name, ‘ esta en ’,District ) FROM City LIMIT 5; 3.Haga una consulta que incluya la palabra city en su nombre. 4.Haga una consulta que incluya la palabra city y que además tenga la letra ‘a’ como su segunda letra. 5. Muestre la fecha con una columna llamada HOY. 6. Muestre la fecha actual y otra diez años después. SELECT NOW() as HOY, YEAR(NOW())+10 YEAR; 12/02/2009 GENIZ v. 1 Update 2 63
  64. 64. 5.6 Functions in SQL Expressions Las funciones pueden ser invocadas con expresiones y regresar valores cuando la función es evaluada. Es posible utilizar IGNORE_SPACE SQL mode para que los espacios de una función sean eliminados. EJEMPLO mysql> SELECT PI (); mysql> SET SQL_MODE=‘IGNORE_SPACE’; 12/02/2009 GENIZ v. 1 Update 2 64
  65. 65. 5.6.1 Comparison Functions Son utilizadas para habilitar pruebas relativas a valores de uno o más de ellos. LEAST() y GREATEST() tiene cadenas o números como argumentos y regresa el valor más pequeño o el más grande respectivamente. EJEMPLO mysql> SELECT LEAST(4,3,8,-15), LEAST(‘abc’,’ab’,’ghi’); mysql> SELECT GREATEST(4,3,8,-15), GREATEST(‘abc’,’ab’,’ghi’); 12/02/2009 GENIZ v. 1 Update 2 65
  66. 66. 5.6.2 Control Flow Functions 5.6.2.1 IF Se utilizan para escoger entre diferentes valores basados en el resultado de una expresión. EJEMPLO mysql> SELECT IF(1>0,’SI’,’NO’); mysql> SELECT Name FROM Country ORDER BY IF (code=‘USA’,1,2) ,Name LIMIT 10; SINTAXIS del IF IF(condicion,verdadero,falso); 12/02/2009 GENIZ v. 1 Update 2 66
  67. 67. 5.6.2.2 CASE Este es un constructor y no una función, pero también sirve para el control, la sintaxis es la siguiente: EJEMPLO mysql> SELECT Name FROM Country ORDER BY -> CASE code -> WHEN ‘MEX’ THEN 1 SINTAXIS CASE -> WHEN ‘CAN’ THEN 2 CASE case_expr -> WHEN ‘USA’ THEN 3 WHEN when_expr THEN result -> ELSE 4 END, Name; WHEN when_expr THEN result ELSE result END 12/02/2009 GENIZ v. 1 Update 2 67
  68. 68. 5.6.2.2 CASE Este es otro tipo de CASE, pero no tiene algún parámetro que evaluar. EJEMPLO mysql> SELECT CASE -> WHEN Code=‘MEX’ THEN ‘MEXICO’ -> WHEN Continent=‘Europe’ THEN ‘EUROPA’ -> ELSE ‘RESTO DEL MUNDO’ -> END AS Area, -> SUM(GNP), SUM(Population) FROM Country GROUP BY Area; SINTAXIS CASE CASE WHEN when_expr THEN result WHEN when_expr THEN result ELSE result END 12/02/2009 GENIZ v. 1 Update 2 68
  69. 69. 5.6.3 Numeric Functions Estas nos ayudan a Realizar operaciones matemáticas como redondeo, truncar, funciones trigonométricas o generar números aleatorios. 5.6.3.1 FUNCION ROUND(): Sirve para aproximar valores utilizando los métodos de la librería de C utilizada por MySQL. mysql> SELECT ROUND(28.5), ROUND (-28.5); mysql> SELECT ROUND(28.5E1), ROUND (-28.5E1); 12/02/2009 GENIZ v. 1 Update 2 69
  70. 70. 5.6.3 Numeric Functions 5.6.3.2 FUNCION FLOOR(): Sirve para aproximar valores al próximo entero hacia abajo. Puede utilizar TRUNCATE (<numero>,<decimales>), sin embargo no regresará valores negativos. mysql> SELECT FLOOR (-14.7), FLOOR(14.7); 5.6.3.3 FUNCION CEILING(): Sirve para aproximar valores al próximo entero hacia arriba. mysql> SELECT CEILING (-14.7), CEILING(14.7); 12/02/2009 GENIZ v. 1 Update 2 70
  71. 71. 5.6.3 Numeric Functions 5.6.3.4 FUNCION ABS(): Sirve para extraer el valor absoluto de un numero mysql> SELECT ABS (-14.7), ABS(14.7); 5.6.3.5 FUNCION SIGN(): Sirve para extraer el signo de un número mysql> SELECT SIGN(-14.7), SIGN(14.7), SIGN(0); 12/02/2009 GENIZ v. 1 Update 2 71
  72. 72. 5.6.3 Numeric Functions 5.6.3.6 FUNCION SIN(), COS() y TAN(): Calculan el valor de las funciones trigonométricas SENO, COSENO y TANGENTE mysql> SELECT SIN(0), COS(0),TAN(0); 5.6.3.7 FUNCION PI(), DEGREES (), RADIANS(): Sirve para extraer el valor de PI, convertir grados y radianes. mysql> SELECT PI(), DEGREES(PI()), RADIANS (180); 5.6.3.8 FUNCION RAND (): Genera Números aleatorios mysql> SELECT RAND(), RAND(), RAND(); 12/02/2009 GENIZ v. 1 Update 2 72
  73. 73. 5.6.4 String Functions Calculan longitudes de cadenas, extraen subcadenas y hacen conversiones. 5.6.4.1 FUNCION LENGTH() y CHAR_LENGTH: Determina la longitud de la cadena. mysql> SELECT LENGTH(‘GENIZ’), CHAR_LENGTH(‘MySQL’); mysql> SELECT LENGTH(CONVERT(‘GENIZ’ USING ucs2)) AS Length, -> CHAR_LENGTH (CONVERT (‘MySQL’ USING ucs2)) AS c_length; 12/02/2009 GENIZ v. 1 Update 2 73
  74. 74. 5.6.4 String Functions 5.6.4.2 FUNCION CONCAT(): Concatena todos los argumentos mysql> SELECT CONCAT (‘Bienvenidos’,’A’,’MYSQL’,’Desarrolladores’); 5.6.4.3 FUNCION CONCAT_WS(): Concatena todos los argumentos pero interpreta al primero como un patrón mysql> SELECT CONCAT_WS (‘--’,‘Bienvenidos’,’A’,’MYSQL’,’Desarrolladores’); 12/02/2009 GENIZ v. 1 Update 2 74
  75. 75. 5.6.4 String Functions 5.6.4.4 FUNCION USER(): Devuelve el nombre del usuario actual 5.6.4.5 FUNCION CHARSET(): Muestra el juego de caracteres que utiliza 5.6.4.6 FUNCION COLLATION(): Muestra el collation usado mysql> SELECT USER(), CHARSET(USER()), COLLATION(USER()); 5.6.4.7 FUNCION STRCMP(): Compara dos cadenas y devuelve -1 si la primera cadena es menor, 0 cuando son iguales y 1 cuando la segunda es mayor. mysql> SELECT STRCMP(‘abc’,’def’), STRCMP(‘def’,’def’), STRCMP (‘def’,’abc’); 12/02/2009 GENIZ v. 1 Update 2 75
  76. 76. 5.6.5 Temporal Functions Estas realizan operaciones para extraer partes de fechas y horas, además de convertir valores. Función Definición NOW() Extrae la hora y fecha de la maquina cliente en formato DATETIME CURDATE() Extrae la fecha en formato DATE CURTIME() Extrae la fecha en formato TIME YEAR() Extrae el año en formato YEAR MONTH() Extrae el mes en formato INTEGER DAYOFTHEMONTH() Día del mes en formato INTEGER DAY() Día en formato INTEGER DAYNAME() Día de la semana en cadena (Inglés) HOUR() Hora del día en formato INTEGER MINUTE() Minuto del día en formato INTEGER SECOND() Segundo del día en formato INTEGER 12/02/2009 GET_FORMAT() Retorna el formato GENIZ v. 1 Update 2 de la fecha en cadena 76
  77. 77. 5.6.5 Temporal Functions EJEMPLOS: mysql> SELECT NOW(); mysql> SELECT GET_FORMAT(DATE,’EUR’); GET_FORMAT (DATE|TIME|DATETIME, ‘EUR’|’USA’,’JIS’,’ISO’|’INTERNAL’) mysql> SELECT YEAR(‘2010-04-15’), MONTH(‘2010-04-15’), DAYOFMONTH(‘2010-04-15’); mysql> SELECT CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP; 12/02/2009 GENIZ v. 1 Update 2 77
  78. 78. 5.6.5 Temporal Functions 5.6.5.1 Función MAKETIME(): Compone la hora de los argumentos asignados. mysql> SELECT MAKETIME(9,23,57); 5.6.5.2 Función MAKEDATE(): Compone la fecha de los argumentos asignados. mysql> SELECT MAKEDATE(2009,57); 12/02/2009 GENIZ v. 1 Update 2 78
  79. 79. LAB 5-B 1. Utilice un IF() y la función SUM() para calcular la población del continente Africano, asigne un alias llamado Poblacion_Africa, de la tabla country. 2. Utilice un la función IF() para especificar el orden de la lista de códigos(Countrycode) y lenguajes(language) de la tabla countrylanguage, utiliza el valor del código ‘NOR’ y coloca primero los de Noruega. Limita los resultados a 10 y ordénalos por lenguaje. 3. Redondea 3.75 hacia el valor más cercano a un entero 4. Muestra el signo de los siguientes números (-80,-(-15.4),0) 5. Utiliza un SELECT para mostrar la longitud de chars de la cadena ‘Dallas’ de la tabla City. 6. Concatena las siguinetes palabras(‘Esta’,’Es’,’Una’,’Gran’,’clase’) utiliza el patrón (-) para separlas. 7. Muestra solo la fecha actual. 8. Utiliza un SELECT para mostrar la fecha actual más un intervalo de 21 dias. 9. Utilice un SELECT para mostrar la fecha/Hora de hoy, y la fecha/hora de hoy más 5 horas. 12/02/2009 GENIZ v. 1 Update 2 79
  80. 80. 5.7 Comments in SQL Statements MySQL soporta tres tipos de comentarios. Una de estas formas tiene variantes que permiten ejecutar instrucciones especiales. mysql> # Esto es un Comentario de una sola línea mysql> /* Esto es un /*> también */ Esto es un comentario especial mysql> SHOW /*! 50002 FULL*/ TABLES; mysql> CREATE TABLE t (i int) /*! ENGINE=MEMORY*/; CREATE TABLE ‘CountryLanguage’ ( … ) ENGINE=MyISAM COMMENT ‘Lista de lenguages’; 12/02/2009 GENIZ v. 1 Update 2 80
  81. 81. 6. DATA TYPES 12/02/2009 GENIZ v. 1 Update 2 81
  82. 82. Objetivos:  Describir las categorías de tipos de datos Comprender los juegos de caracteres y columnas Asignar el tipo de dato apropiado 12/02/2009 GENIZ v. 1 Update 2 82
  83. 83. 6. DATA TYPES 6.1 Data type Overview En MySQL Los tipos de datos se pueden agrupar en cuatro categorías: 1. Numeric: Valores Numéricos (Enteros, Punto flotante, Punto Fijo y Bit) 2. Character: Cadenas de Texto 3. Binary: Cadenas binarias de datos. 4. Temporal: Hora y Fecha 6.1.2 Creating tables with data type Cuando creamos una tabla, la declaración de las columnas debe incluir un nombre y un tipo de dato CREATE TABLE people ( Id INT, First_name CHAR(30), date DATATIME ); 12/02/2009 GENIZ v. 1 Update 2 83
  84. 84. 6.2 Numeric data types Estos almacenan datos numéricos, MySQL provee de datos enteros, flotantes, punto fijo y bit. 6.2.1 INTEGER Abarcan todos los números, este tipo de datos no abarca fracciones, a continuación se muestra una lista de datos numéricos y atributos asociados: •TINYINT: Es un entero muy pequeño •SMALLINT: Es un entero pequeño •MEDIUMINT: Es un entero de la mitad del entero •INT, INTEGER: es el tamaño normal del entero •BIGINT: Es un entero largo La sintaxis para asignar un tipo es: INT <tamaño> Population INT (11), 12/02/2009 GENIZ v. 1 Update 2 84
  85. 85. 6.2.1.1 Integer Data Type Comparison Type Storeg Signed Range Unsigned Range Required TINYINT 1 byte -128 to 127 0 to 255 SMALLINT 2 bytes -32768 to 32767 0 to 65535 MEDIUMINT 3 bytes -8388608 to 8388607 0 to 16777215 INT 4 bytes -2147683648 to 0 to 4294967295 2147483647 BIGINT 8 bytes -9223372036854775808 0 to to 9223372036854775807 18446744073709551615 12/02/2009 GENIZ v. 1 Update 2 85
  86. 86. 6.2.2 Floating Point Types El tipo flotante incluye FLOAT y DOUBLE. Cada uno de estos tipos son usados para representar números con parte de enteros, fracciones o ambos. •FLOAT: Es pequeño de simple precisión que soporta valores con signo , sin signo y números negativos. •DOUBLE: es de doble precisión que soporta valores con signo, sin signo y números negativos. SINTAXIS: FLOAT (tamaño, numero_decimales) DOUBLE (tamaño, numero_decimales) EJEMPLO: GNP FLOAT(10,2) 12/02/2009 GENIZ v. 1 Update 2 86
  87. 87. 6.2.2.1 Floating-Point Type Comparison Type Storage Signed range Unsigned Range Required FLOAT 4 bytes -3.402823466E+38 to - 0 y 1.175494351E-38 to 1.175494351E-38 3.402823466E+38 Double 8 bytes -1.7976931348623157E+308 to 0 y 2.2250738585072014E-308 to -2.2250738585072014E-308 1.7976931348623157E+308 12/02/2009 GENIZ v. 1 Update 2 87
  88. 88. 6.2.3 Fixed-Point Types El tipo de punto fijo es DECIMAL. Es utilizado para representar valores de números exactos, tiene que tener un a parte entera , una parte fraccional o ambas. Este tipo de valores no esta sujeto a errores de redondeo. El tipo DECIMAL es asignado utilizando la siguiente sintaxis: SINTAXIS: DECIMAL (tamaño, numero_decimales) EJEMPLO: TOTAL DECIMAL(10,2) 12/02/2009 GENIZ v. 1 Update 2 88
  89. 89. 6.3 BIT TYPES Este tipo de datos representa campos de bits. Una columna de bit puede tomar un tamaño de numero de bits por valor, de 1 a 64 bits. La siguiente columna almacena 4 y 20 bits por cada campo respectivamente. Si el valor asignado son 8 bits esto será igual a un Byte. Recuerde 8 bits = 1 Byte El tipo BIT es asignado utilizando la siguiente sintaxis: SINTAXIS: Bit_col1 BIT(4) Bit_col1 BIT(4) 12/02/2009 GENIZ v. 1 Update 2 89
  90. 90. LAB 6-A 1. En el prompt teclee: mysql> USE test; 2. teclee: mysql> CREATE TABLE integers (n SMALLINT UNSIGNED); 3.Teclee: INSERT INTO integers values(5); 4. Teclee: mysql> SELECT * FROM integers; 5.Teclee: mysql> INSERT INTO integers VALUES (-5); Error 6. Teclee: mysql> CREATE TABLE Bits (b BIT(10)); 7. Teclee: mysql>INSERT INTO bits VALUES (b’101’); 8. Teclee: mysql> SELECT * FROM bits; 12/02/2009 GENIZ v. 1 Update 2 90
  91. 91. 6.4 Character String Data Types 6.4.1 TEXT TYPES Este tipo de datos representa una secuencia de caracteres alfanuméricos. Estos son importantes e implementados en cada uno de los lenguajes de programación. La siguiente tabla es una lista de los tipos String soportados por MySQL. Comparison Type Description Values CHAR Cadena de caracteres de punto fijo TEXT VARCHAR Cadena de caracteres de longitud variable TEXT Cadena de caracteres de longitud variable INTEGER ENUM Enumeración de valores SET Consiste en colocar valores fijos 12/02/2009 GENIZ v. 1 Update 2 91
  92. 92. 6.4 Character String Data Types 6.4.1.1 TEXT TYPE Comparison Para el almacenamiento de todos estos valores, M representa la cadena máxima de una columna, L la actual cadena dada por un valor, la cual puede ser de 0 a M. Type Storage Required Maximum Length CHAR(M) M characters 255 characters VARCHAR(M) L characters plus 1 or 2 65535 characters (subject to limitations) bytes TINYTEXT L characters + 1 byte 255 characters TEXT L characters + 2 bytes 65535 characters MEDIUMTEXT L characters + 3 bytes 16777215 characters LONGTEXT L characters + 4 bytes 4294967295 characters 12/02/2009 GENIZ v. 1 Update 2 92
  93. 93. 6.4 Character String Data Types 6.4.2 INTEGER TYPES 6.4.2.1 ENUM Este tipo de datos es una enumeración( la enumeración contiene una lista de miembros definidos en una secuencia). ENUM (‘valor1’,’valor2’,…) Ejemplo de enumeración en la tabla country: Continent ENUM(‘Asia’,’Europe’,’North America’, ‘Africa’, ‘Oceania’, ‘Antarctica’,’South America’) 12/02/2009 GENIZ v. 1 Update 2 93
  94. 94. 6.4.2 INTEGER TYPES 6.4.2.1 SET Este tipo de dato es nombrado como un carácter del repertorio que incluye la codificación de la base de datos (Charset)y como van a ser utilizados los caracteres (Collation). mysql> SHOW CHARACTER SET; mysql> SHOW COLLATION LIKE ‘latin1%’; 12/02/2009 GENIZ v. 1 Update 2 94
  95. 95. LAB 6-B 1. En el prompt teclee: mysql> USE test; 2. teclee: mysql> CREATE TABLE chars (c VARCHAR (5)); 3.Teclee: mysql> INSERT INTO chars values(‘abc’); 4. Teclee: mysql> SELECT * FROM chars; 5.Teclee: mysql> INSERT INTO chars VALUES (‘abcdef’); SHOW WARNINGS; 6. Teclee: mysql> SET SQL_MODE=‘’; 7. Teclee: mysql>SELECT @@SQL_MODE; 8. Teclee: mysql> INSERT INTO chars VALUES (‘abcdef’); 9. Teclee: mysql> SELECT * FROM chars; 10. Teclee: mysql> SET SQL_MODE=‘TRADITIONAL’; v. 1 Update 2 12/02/2009 GENIZ 95
  96. 96. 6.5 TEMPORAL DATATYPES 6.5.1 TIME Almacena la hora en un rango de ‘-838:59:59’ a ‘838:59:59’ y despliega el tiempo en un formato de ‘HH:MM:SS’ 6.5.2 YEAR Este tipo de dato permite valores desde 1901 a 2155 6.5.3 DATE Este tipo de dato permite valores ‘1000-01-01’ hasta ‘9999-12-31’ 6.5.4 DATETIME Este tipo de dato permite valores en el rango de ‘1000-01-01 00:00:00’ hasta ‘9999-12-31 23:59:59’ 6.5.4 TIMESTAMP Este tipo de dato permite recordar la fecha en que se inserta o se actualiza una operación 12/02/2009 GENIZ v. 1 Update 2 96
  97. 97. 6.5 TEMPORAL DATA TYPES 6.5.5 TEMPORAL DATA TYPE COMPARISON Type Storage Required Range DATE 3 BYTES ‘1000-01-01’ TO ‘9999-12-31’ TIME 3 BYTES ‘-838:59:59’ TO ‘838:59:59’ DATETIME 8 BYTES ‘1000-01-01 00:00:00’ TO ‘9999-12-31 23:59:59’ TIMESTAMP 4 BYTES ‘1970-01-01 00:00:00’ TO MID-YEAR 2037 YEAR 1 BYTE 1901 a 2155 12/02/2009 GENIZ v. 1 Update 2 97
  98. 98. QUIZ 1-2 1. If you want to store monetary values(for example $48.99), which data type should you use to avoid rounding errors? 2. Which data type is more efficient: CHAR(100) or VARCHAR(100)? 3. In a table population, you want to store the number of inhabits of cities. Storage space is at a premium. You expect the maximum population to be 15 000 000 for a city, which data type would you use? What’s the storage requirenment for this data type? 4. You perform th following INSERT operation on table datetest, which has a single DATE column called d with a default value of NULL: INSERT INTO datetest VALUES (’12:00:00’); What data value will actually be stored in the table? Provide a short explanation. 5. Are the following statements true? The character set of a column is determined by the characters set of its table. The same holds for its collation. 6. Each character set has exactly one collation? (True or False) 12/02/2009 GENIZ v. 1 Update 2 98
  99. 99. QUIZ 2-2 7. Here’s the structure of a table continent that has only one column (name, which stores names of continents). Assume the del SQL mode has no imput data restrictions enabled. Field: name Type: enum(‘Africa’,’America’,’Antarctica’,’Asia’,’Europe’) Null: yes Key: Default: NULL Extra: INSERT INTO Continent VALUES (‘Africa’); What string value will be stored by the following INSERT operation? What integer value will be sotred internally? 12/02/2009 GENIZ v. 1 Update 2 99
  100. 100. 7. HANDLING ERRORS AND WARNINGS 12/02/2009 GENIZ v. 1 Update 2 100
  101. 101. Objetivos: • Utilizar la variable SQL_MODE •Manejar valores Inválidos •Interpretar los mensajes de error •Utilizar SHOW WARNINGS y SHOW ERRORS Statements •Invocar a la utilidad PERROR 12/02/2009 GENIZ v. 1 Update 2 101
  102. 102. 7. HANDLING ERRORS AND WARNINGS 7.1 SQL modes for Syntax Checking Esta variable controla las operaciones del servidor como por ejemplo la sintaxis SQL o lo que MySQL debería tolerar y que validación de datos checará. Nosotros podemos ver el estado actual de SQL_MODE con las siguientes Sentencias: SELECT @@global.sql_mode; SELECT @@session.sql_mode; SELECT @@sql_mode; 12/02/2009 GENIZ v. 1 Update 2 102
  103. 103. 7.2 Setting the SQL MODE Podemos colocar un valor a SQL_MODE cuando iniciamos el servidor mysqld utilizando la opción - -sql-mode=“mode_value”, también podemos cambiar el modo en tiempo de ejecución, utilizando SET SET [SESSION|GLOBAL] sql_mode=‘mode_values’ Valores que puede tomar la variable SQL_MODE: SQL_MODE=‘’ SQL_MODE=ANSI _QUOTES SQL_MODE=‘IGNORE_SPACE,ANSI_QUOTES’ ANSI ERROR_FOR_DIVISION_BY_ZERO STRICT_TRANS_TABLES, STRICT_ALL_TABLES NO_ZERO_DATE TRADITIONAL mysql> SET SQL_MODE=‘TRADITIONAL’; mysql> SELECT @@SQL_MODEG 12/02/2009 GENIZ v. 1 Update 2 103
  104. 104. 7.3 Handling Invalid Values in NON-STRICT MODE Cuando operamos en un modo NO estricto, MySQL hace una conversión basada en las constantes implicadas en la definición de las columnas, estas pueden ser aplicadas en los contextos: INSERT, REPLACE, UPDATE o LOAD DATA INFILE CREATE TABLE vals( Pal char(3), Nume INT(5) ); SET SQL_MODE=‘’; mysql>INSERT INTO vals VALUES (‘GENIZ’,’MYSQL’); mysql> SELECT * FROM vals; 12/02/2009 GENIZ v. 1 Update 2 104
  105. 105. 7.4 Interpreting Errors Messages Cuando ocurre algún problema al conectarnos al servidor MySQL o mientras un programa cliente ejecuta alguna sentencia, MySQL produce mensajes de diagnóstico. mysql>SELECT * FROM no_such_table; Este mensaje tiene tres componentes principales: • Una especificación del de Error •Un código de Error •Un mensaje de texto que describe el problema 12/02/2009 GENIZ v. 1 Update 2 105
  106. 106. 7.5 The SHOW WARNINGS Statement MySQL Server genera alertas cuando no esta hábil para comprender un requerimiento o cuando no tiene los efectos deseados. mysql> CREATE TABLE integers (i INT UNSIGNED NOT NULL); mysql> INSERT INTO integers VALUES(‘abc’),(-5),(NULL); mysql> SHOW WARNINGSG 12/02/2009 GENIZ v. 1 Update 2 106
  107. 107. 7.6 Warning Levels Las alertas generadas son disponibles para el servidor, solo por un limite de tiempo (hasta que otra sentencia es generada), las alertas que ocurren tienen niveles: • Errors: Indica problemas serios que impiden al servidor completar un requerimiento. •Warning: Indica problemas en la sentencia, pero a pesar de esto el servidor continua en el procesamiento de la consulta. •Note: Son solo mensajes de información 12/02/2009 GENIZ v. 1 Update 2 107
  108. 108. 7.7 The SHOW ERRORS Statement Este Statement es similar a SHOW WARNINGS , pero despliega en la pantalla solo mensajes de error. Esta sentencia soporta la clausula LIMIT para restringir el numero de filas retornadas., también puede ser utilizada con COUNT para obtener el numero de errores. 7.8 The PERROR Es una línea de comandos incluida en MySQL Server, esta utilidad muestra la información utilizando el código del error. shell> PERROR 13 12/02/2009 GENIZ v. 1 Update 2 108
  109. 109. QUIZ 1. Which of the following statements are true? a) The SQL mode is set for the server, so it affects all clients that connect to the server b) If you want to set two SQL modes, you must issue two SET sql_modes statements? 2. What is the syntax for changing the SQL mode to ‘STRICT_TRANS_TABLES’ y ‘PIPES_AS_CONCAT’? 3. If you attempt to store a negative value into an UNSIGNED column, MySQL converts it to __________, chich is the nearest legal value for the column. 4. The warnings and errors can be displayed with the following two statements:____________ and ______________ 5.List the three levels of severity for warnings: _________ _________ _________ 12/02/2009 GENIZ v. 1 Update 2 109
  110. 110. 8. OBTAINING METADATA 12/02/2009 GENIZ v. 1 Update 2 110
  111. 111. Objetivos: Listar los Métodos de acceso disponibles a los Metadatos Reconocer la estructura de la base de datos INFORMATION_SCHEMA Usar comandos disponibles para ver los metadatos Las diferencias entre SHOW statements y las tablas de INFORMATION_SCHEMA 12/02/2009 GENIZ v. 1 Update 2 111
  112. 112. 8. OBTAINING METADATA 8.1 Metadata Access Methods La información acerca de las bases de datos y la estructura son METADATOS. MySQL provee acceso a los metadatos de las bases de datos, tablas y otros objetos utilizando los siguientes métodos: • Usando la base de datos INFORMATION_SCHEMA •Usando SHOW y DESCRIBE •Usando MYSQLSHOW 12/02/2009 GENIZ v. 1 Update 2 112
  113. 113. 8.2 INFORMATION_SCHEMA INFORMATION_SCHEMA es la base de datos central y repositorio de los metadatos, es una base de datos virtual y no es almacenada en el disco. Esta conformada por las siguientes tablas: •CHARACTER_SET •COLLATIONS •COLUMNS •ENGINES •EVENTS •FILES •PARTITIONS •PLUGINS •SCHEMATA •ROUTINES •TRIGGERS •VIEWS •TABLES •USER_PRIVILEGES 12/02/2009 GENIZ v. 1 Update 2 113
  114. 114. 8.2 INFORMATION_SCHEMA MYSQL> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES -> WHERE TABLE_SCHEMA=‘INFORMATION_SCHEMA’ -> ORDER BY TABLE_NAME; 12/02/2009 GENIZ v. 1 Update 2 114
  115. 115. 8.2 INFORMATION_SCHEMA MYSQL> SELECT TABLE_NAME, ENGINE FROM INFORMATION_SCHEMA.TABLES -> WHERE TABLE_SCHEMA=‘world’; MYSQL> SELECT TABLE_NAME, DATA_LENGTH FROM INFORMATION_SCHEMA.TABLES -> WHERE TABLE_NAME=‘city’; 12/02/2009 GENIZ v. 1 Update 2 115
  116. 116. 8.3 SHOW Statement MySQL soporta la sentencia SHOW para retribuir metadatos, puede tener la siguientes sintaxis: • SHOW DATABASES •SHOW [FULL] TABLES •SHOW [FULL] COLUMNS •SHOW INDEX •SHOW CHARACTER SET •SHOW COLLATION mysql> SHOW TABLES FROM mysql; mysql> SHOW DATABASES; mysql> SHOW CREATE TABLE CITYG 12/02/2009 GENIZ v. 1 Update 2 116
  117. 117. 8.4 DESCRIBE Statement También despliega metadatos y es equivalente al Statement SHOW. DESCRIBE table_name; DESC table_name; SHOW COLUMNS FROM table_name; mysql> SHOW TABLES FROM mysql; mysql> SHOW DATABASES; 12/02/2009 GENIZ v. 1 Update 2 117
  118. 118. 8.5 MYSQLSHOW Client Program Es un cliente que produce información acerca de la estructura de las bases de datos y tablas, provee una interfaz de línea de comandos. Mysqlshow [options][db_name[table_name[column_name]]] shell> mysqlshow world –uroot –p shell> mysqlshow –uroot –p 12/02/2009 GENIZ v. 1 Update 2 118
  119. 119. LAB 8-A 1. Utilizando un SELECT, obtén información acerca de la base de datos test 2. Muestra las bases de datos del servidor. 3. Muestra las bases de datos que contengan la letra ‘o’ 4. Utilizando SHOW muestra los índices de la tabla country en forma horizontal 5. Muestra la estructura de la tabla Countrylanguage utilizando DESCRIBE 6. Lista todas las tablas de INFORMATION_SCHEMA 7. Utilice mysqlshow para mostrar los metadatos de la tabla Countrylanguage 12/02/2009 GENIZ v. 1 Update 2 119
  120. 120. 9. DATABASES 12/02/2009 GENIZ v. 1 Update 2 120
  121. 121. Objetivos: Comprender las propiedades de las bases de datos Emplear buenas practicas, cuando diseñamos la estructura de la base de datos Crear bases de datos Alterar bases de datos Eliminar bases de datos Obtener Metadatos de las BD 12/02/2009 GENIZ v. 1 Update 2 121
  122. 122. 9. DATABASES 9.1 Database Properties MySQL administra el almacén, los resultados y la manipulación de los datos, los registros son organizados en tablas y las tablas en bases de datos. La base de datos es almacenada en un directorio llamado ‘Data Directory’, las bases de datos y el directorio de datos tienen los siguientes recursos: •El servidor representa cada base de datos en un subdirectorio llamado ‘database directory’. •El directorio ‘database directory’ es representado con el nombre de la base de datos •El directorio contiene los archivos de las tablas y otros objetos como los triggers •Los objetos puede ser: a) Tablas y relaciones b) Stored procedures c) Triggers d) Vistas Otra palabra para llamar a una base de datos es ‘SCHEMA’ 12/02/2009 GENIZ v. 1 Update 2 122
  123. 123. 9.2 Good Design Practices Cuando nosotros diseñamos una base de datos tenemos que considerar dos cosas importantes: 1. Qué información será almacenada? 2. Qué consultas realizaremos? Nosotros podemos emplear varias técnica para hacer un buen diseño: • Keys: Sirven para identificar un dato único •Normalization: Proceso para hacer tablas eficientes •Modeling: Representación grafica de la base de datos 12/02/2009 GENIZ v. 1 Update 2 123
  124. 124. 9.3 Keys Una llave es una columna que consiste en colocar un único identificador de un registro en una tabla. Una llave candidata es una mínima columna necesaria para identificar un registro, la llave primaria es una llave diseñada o creada para una única fila, un índice también puede ser creado cuando creamos la llave primaria. Indexes? Es un recurso de la base de datos que permite el acceso rápido a registros de una tabla. (Este tema será explicado en OPTIMIZATION) BENEFICIOS •Una llave primaria no puede contener valores nulos •Forzar a tener un único identificador •Una llave puede ser un valor natural o un valor derivado. 12/02/2009 GENIZ v. 1 Update 2 124
  125. 125. 9.4 Common Diagramming System (ERD) El diagrama Entidad-Relación es un modelo de datos o un diagrama de altas descripciones de modelo de datos conceptuales, nos provee de una notación grafica para representar los modelos en forma de diagramas y sus relaciones. 12/02/2009 GENIZ v. 1 Update 2 125
  126. 126. EXTRA-- MySQL WorkBench MySQL Workbench es una interfaz grafica de usuario hecha para el diseño profesional de una base de datos. 12/02/2009 GENIZ v. 1 Update 2 126
  127. 127. 9.5 Normalization Es una técnica que permite guiarnos en el diseño de las bases de datos relacionales. Es el proceso de redefinición del diseño y asegurarnos que la información este en un lugar indicado. Nos permite: •Eliminar la redundancia de datos •Eliminar columnas no dependientes de llaves •Aislar las relaciones Desventajas •Numerosas tablas •Mantenimiento 12/02/2009 GENIZ v. 1 Update 2 127
  128. 128. 9.5 Normalization Ejemplo de normalización en la base de datos world Hay una tabla llamada Countrylanguage. Pero porque no fueron incluidos en la tabla country? 12/02/2009 GENIZ v. 1 Update 2 128
  129. 129. 9.6 Creating DATABASES Para crear una base de datos utilizaremos el Statement CREATE DATABASE; ejemplo: CREATE DATABASE mydb; Si intentamos crear una base de datos y esta ya existe, un error ocurrirá. Para que no ocurra esto seguiremos la sintaxis: CREATE DATABASE IF NOT EXISTS mydb; Al crear una base de datos podemos agregar dos clausulas opcionales, CHARACTER SET y COLLATE. Ejemplo: CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_danish_ci; Una vez que hemos creado la base de datos para hacer consultas sobre ella, debemos utilizar el Statement USE. USE mydb NOTA: la palabra DATABASE puede ser sustituida por SCHEMA 12/02/2009 GENIZ v. 1 Update 2 129
  130. 130. 9.7 Altering DATABASES Nosotros podemos cambiar las opciones de nuestra base de datos utilizando ALTER. Las opciones permitidas son para CHARACTER SET y COLLATE. ALTER DATABASE mydb COLLATE utf8_polish_ci; ALTER DATABASE mydb CHARACTER SET latin1 COLLATE latin1_swedish_ci; NOTA: la clausula IF EXISTS no puede usarse con ALTER 12/02/2009 GENIZ v. 1 Update 2 130
  131. 131. 9.8 Dropping DATABASES Esta opción sirve para cuando nosotros queremos remover una base de datos: DROP DATABASE mydb; También podemos utilizarla con la clausula IF EXISTS DROP DATABASE IF EXISTS mydb; Precaución: Cuando utilizamos este Statement el servidor elimina los directorios que identifican a la base de datos por ejemplo los archivos de datos y las estructuras de las tablas, esta acción no puede deshacerse. 12/02/2009 GENIZ v. 1 Update 2 131
  132. 132. LAB 9-A 1. Crea una base de datos llamada db_test 2. Muestra la lista de las bases de datos actuales 3. Cambia a la base de datos db_test 4. Muestra la estructura de la base de datos 5. Despliega la lista de CHARACTER SET 6. Despliega la lista de COLLATIONS 7. Usa un ALTER para cambiar el character set a keybcs2 y el collate a latin2_czech_cs E 8. Cambiar el character set a keybcs2 y el collate a keybcs2_general_ci 9. Elimina la base de datos utilizando DROP 12/02/2009 GENIZ v. 1 Update 2 132
  133. 133. 10. TABLES 12/02/2009 GENIZ v. 1 Update 2 133
  134. 134. Objetivos: Propiedades de tabla Opciones de Columna Crear tablas Alterar tablas Vaciar tablas Eliminar Tablas Asignar y utilizar llaves foráneas Obtener Metadatos 12/02/2009 GENIZ v. 1 Update 2 134
  135. 135. 10.1 Creating Tables Después de que diseñamos la estructura de una base de a datos y esta es creada, podemos agregar tablas. Usando los tipos de datos y opciones. La sintaxis para agregar una tabla es la siguiente: CREATE TABLE <table> ( <column name> <column type> [<column options>], [<column name> <column type> [<column options>],…,] [<index list>] )[<table options>]; Ejemplo: mysql> CREATE TABLE CountryLanguage -> CountryCode CHAR(3) NOT NULL, -> Language CHAR(30) NOT NULL, -> IsOfficial ENUM (‘True’, ‘False’) NOT NULL DEFAULT ‘False’, -> Percentage FLOAT (3,1) NOT NULL, -> PRIMARY KEY(Country, Language) ) -> ENGINE=MyISAM COMMENT=‘Lista de lenguajes’; 12/02/2009 GENIZ v. 1 Update 2 135
  136. 136. 10.2 Table Properties MySQL administra las tablas usando los motores de almacenamiento (Engines), los cuales manejan características diferentes de cada tabla y cada uno de ellos tiene diferentes características. Las opciones que podemos agregar a CREATE TABLE pueden ser: ENGINE={MyISAM | InnoDB | MEMORY | MERGE} COMMENT= ‘Comentarios’ CHARACTER SET=<character set> COLLATE=<collation_name> Ejemplo: CREATE TABLE Country ( … )ENGINE=MyISAM COMMENT=‘Comentarios’ CHARSET utf8 COLLATE latin1_general_cs; 12/02/2009 GENIZ v. 1 Update 2 136
  137. 137. 10.3 Column Options Una tabla debe tener una o más columnas, cada una de ellas tiene un nombre y un tipo de dato, alguna de las opciones que puede tomar la columna son: •NULL •NOT NULL •DEFAULT •AUTO_INCREMENT 10.4 Constraints Una llave simplemente es una restricción en una o más columnas de una tabla, sin ellas la base de datos no seria consistente ni estaría normalizada. Los tipos permitidos por mysql son: •PRIMARY KEY: Identifica un registro único en una tabla. •FOREIGN KEY: Es una referencia de una llave primaria a otra tabla •UNIQUE: Es similar a la llave primaria solo que esta acepta valores nulos 12/02/2009 GENIZ v. 1 Update 2 137
  138. 138. 10.5 SHOW CREATE TABLE Este Statement es utilizado para ver la composición exacta de una tabla existente y nos ayuda a comprender la estructura de la misma, aunque también nos sirve para checar la sintaxis. mysql> SHOW CREATE TABLE CityG 12/02/2009 GENIZ v. 1 Update 2 138
  139. 139. 10.6 Creating Tables Based on Existing Tables MySQL puede realizar tablas basadas en otras de dos maneras diferentes: • CREATE TABLE… SELECT crea una tabla del resultado de una operación con SELECT. • CREATE TABLE… LIKE crea una tabla vacía usando la definición de otra tabla. mysql> CREATE TABLE cityCopy1 SELECT * FROM City; mysql> CREATE TABLE cityCopy1 SELECT col1,col2 FROM City; mysql> CREATE TABLE t (i INT NOT NULL AUTO_INCREMENT, -> PRIMARY KEY(i)) -> ENGINE=InnoDB; mysql> CREATE TABLE Copia LIKE t; 12/02/2009 GENIZ v. 1 Update 2 139
  140. 140. 10.7 Temporary Tables Algunas veces usamos tablas temporales (tablas que solo están visibles para el cliente que las creó, pueden tener el mismo nombre que las reales y no habrá conflicto) , estas pueden hacerse con CREATE TEMPORARY TABLE además pueden ser renombradas solo con ALTER TABLE y no con RENAME TABLE: mysql> CREATE TEMPORARY TABLE Texas SELECT Name FROM City WHERE District=‘Texas’; 12/02/2009 GENIZ v. 1 Update 2 140
  141. 141. 10.8 Altering Tables 10.8.1 ADD Columns El comando ALTER puede modificar la estructura de una tabla, agregando más campos, eliminando o modificando lo ya existentes. ADD nos permite agregar más columnas por ejemplo: mysql> ALTER TABLE EU_Countries ADD id INT(6) NOT NULL; 10.8.2 REMOVE Columns DROP nos permite Eliminar columnas por ejemplo: mysql> ALTER TABLE EU_Countries DROP Id; 10.8.3 MODIFYING Columns MODIFY nos permite cambiar columnas por ejemplo: mysql> ALTER TABLE EU_Countries MODIFY New Population BIGINT(12) NOT NULL; 12/02/2009 GENIZ v. 1 Update 2 141
  142. 142. 10.8.4 CHANGING Columns Este comando (CHANGE) nos permite cambiar la definición de una columna, por ejemplo el nombre: mysql> ALTER TABLE tabla1 CHANGE LastName Apellido CHAR(40) NOT NULL; Utilice FIRST o AFTER col_name para especificar la posición 10.8.5 RENAMING Tables El comando RENAME sirve para renombrar a una tabla, ejemplo: mysql> ALTER TABLE t1 RENAME TO t2; mysql> RENAME TABLE t1 TO t2; mysql> RENAME TABLE t1 TO tmp, t2 TO t1, tmp TO t2; Para tablas temporales, RENAME TABLE no esta permitido, deberá usar ALTER TABLE 12/02/2009 GENIZ v. 1 Update 2 142
  143. 143. 10.9 Dropping Tables DROP TABLE elimina una o más tablas, junto con todos sus datos y sus definiciones, be careful with this Statement! DROP [TEMPORARY] TABLE [IF EXISTS] table_name; mysql> DROP TABLE tabla1; mysql> DROP TABLE IF EXISTS tabla1; mysql> DROP TEMPORARY TABLE tabla1; 12/02/2009 GENIZ v. 1 Update 2 143
  144. 144. 10.10 FOREIGN KEYS Una llave foránea es una relación que permite declarar un índice de una tabla relacionado a otra tabla, el motor INNODB soporta el uso de llaves foráneas, habilita la declaración de relaciones y mantiene la integridad. Puede contener la clausulas CASCADE o RESTRICT. CREATE TABLE CountryParent CREATE TABLE CityChild ( ( Code CHAR(3) NOT NULL, ID INT NOT NULL AUTO_INCREMENT, Name CHAR(52) NOT NULL, Name CHAR(35) NOT NULL, PRIMARY KEY (Code) CountryCode CHAR(3) NOT NULL, ) ENGINE= InnoDB; PRIMARY KEY (ID), FOREIGN KEY (CountryCode) REFERENCES CountryParent (Code) ON UPDATE CASCADE ON DELETE CASCADE ) ENGINE= MyISAM; 12/02/2009 GENIZ v. 1 Update 2 144
  145. 145. LAB 10-A 1. Crea una tabla dentro de la base de datos test llamada ‘db’ utiliza el motor InnoDB y que el charset sea latin2, con un solo campo ‘Name’ y de tipo char con una longitud de 10. 2. Crea una tabla que contenga (Code, Name y Capital)de los países de la region nórdica basados en la tabla country. Utiliza LIKE ‘Nordic%’ y nómbrala paises_nordicos. 3. Visualiza todos los registros de la tabla paises_nordicos y despues muesra sus metadatos. 4. Usa la base de datos world y teclea los ejemplos del capitulo de llaves foráneas y después muestra sus metadatos. 5. Ahora inserta en la tabla CountryParent los registros de la tabla country que pertenecen a la region nórdica, utiliza LIKE ‘Nordic%’ 6. Ahora teclea la siguiente insercion: INSERT INTO CityChild SELECT id, Name, CountryCode FROM City WHERE CountryCode IN (SELECT Code FROM Country WHERE Region LLIKE ‘Nordic%’); 7. Visualiza los contenidos de ambas tablas (CountryParent y CityChild) 12/02/2009 GENIZ v. 1 Update 2 145
  146. 146. 11. MANIPULATING TABLE DATA 12/02/2009 GENIZ v. 1 Update 2 146
  147. 147. Objetivos: Insertar datos en una tabla Reemplazar datos Actualizar Datos Eliminar datos Truncar datos 12/02/2009 GENIZ v. 1 Update 2 147
  148. 148. 11. 1 The INSERT Statement Ahora que hemos creado nuestras tablas, el siguiente paso será agregarles los datos. Usaremos el Statement INSERT para colocar datos dentro de una tabla siguiendo su sintaxis general: INSERT INTO table_name (column_list) VALUES (value_list); Ejemplo: mysql> INSERT INTO numbers VALUES (250); Para agregar valores a múltiples columnas debemos usar la coma ‘,’ para separar las columnas. El numero de columnas deberá ser el mismo numero de valores. mysql> INSERT INTO books (author, title, edition) -> VALUES (‘Bruce Eckel’, ‘Thinking in JAVA’, ‘Second Edition’); 12/02/2009 GENIZ v. 1 Update 2 148
  149. 149. 11.1.1 INSERT with SET La cláusula SET puede también ser usada para indicar los nombres de las columnas y los valores, esta puede ser escrita como sigue: mysql> INSERT INTO books SET author=‘Bruce Eckel’, title= ‘Thinking in JAVA’, -> edition=‘Second Edition’; 11.1.2 INSERT with SELECT El Statement SELECT también puede ser utilizado para copiar datos de una tabla a otra: mysql> INSERT INTO City2 SELECT * FROM City; 12/02/2009 GENIZ v. 1 Update 2 149
  150. 150. 11.1.3 INSERT with LAST_INSERT_ID Podemos hacer este tipo de inserción después de que el ultimo valor AUTO_INCREMENT fue insertado: mysql> INSERT INTO City (Name, CountryCode) -> VALUES (‘Mexico City’, ‘MEX’); mysql> SELECT LAST_INSERT_ID(); 11.1.4 INSERT with NULL values En general, si una columna no tiene valores por default, el efecto de un INSERT dependerá de si puede o NO Tomar valores nulos o del SQL_MODE: • Si la columna puede tomar valores NULL, será puesto NULL •Si la columna no puede tomar valores NULL y SQL_MODE no esta habilitado un error ocurrirá. •Si la columna es AUTO_INCREMENT, TIMESTAMP no será necesario especificarla en la lista de columnas. 12/02/2009 GENIZ v. 1 Update 2 150
  151. 151. 11. 2 The DELETE Statement Para remover los datos de una tabla usaremos DELETE, este comando permite utilizar la clausula WHERE para identificar el registro a eliminar. Para dejar una tabla vacía utilizaremos la siguiente sintaxis: DELETE FROM table_name; Para Eliminar un registro en especifico, debemos utilizar DELETE con WHERE: DELETE FROM table_name WHERE … 11. 2.1 DELETE with ORDER BY and LIMIT DELETE soporta ORDER BY y LIMIT los cuales sirven para tener un mayor control de los datos, por ejemplo LIMIT puede ser utilizado para remover algunas de las instancias de un registro duplicado, junto con ORDER BY proveen un mejor control: DELETE FROM people WHERE name=‘Javier’ ORDER BY id DESC LIMIT 4; 12/02/2009 GENIZ v. 1 Update 2 151
  152. 152. 11. 3 The UPDATE Statement Este comando nos ayuda a modificar los contenidos de los datos existentes. Debemos colocar el nombre de la tabla después la cláusula SET y a continuación la lista de columnas y valores: UPDATE table_name SET column=expression WHERE condition [options]; mysql> UPDATE Country SET Population=population*1.1; mysql> UPDATE people SET name=‘Vic’ WHERE name=‘Visctor’ LIMIT 1; NOTA: UPDATE no cambia todos los valores de las columnas porque el valor después de la expresión equivale a un valor previo. Es posible que UPDATE no tenga efectos cuando ocurra alguna de las siguientes situaciones: • Cuando no hay valore para actualizar es decir, cuando una tabla esta vacía y no hay relación con WHERE. •Cuando el valor dado corresponde con el valor anterior. 12/02/2009 GENIZ v. 1 Update 2 152
  153. 153. 11. 4 The REPLACE Statement Este comando trabaja de forma similar a INSERT excepto en la tabla que tiene el mismo valor que el nuevo registro, donde el viejo registro es eliminado antes de insertar el nuevo, este comando es parecido a un INSERT con un DELETE. Es útil cuando queremos reemplazar una columna con alguna llave primaria o un valor UNIQUE. REPLACE INTO table_name SET (column_list) VALUES (value_list); mysql> REPLACE INTO people (id, name, age) VALUES (12,’Bruce’,25); 12/02/2009 GENIZ v. 1 Update 2 153
  154. 154. 11. 4 The REPLACE Statement (EXAMPLE) 11.4.1 INSERT with ON DUPLICATE KEY mysql> CREATE TABLE users (userid int unsigned, username varchar(100), login_time timestamp, visits int unsigned DEFAULT 1, PRIMARY KEY (userid)); mysql> INSERT INTO users(userid, username) VALUES (100, ‘Tobias’); mysql> INSERT INTO users(userid, username) VALUES (100, ‘Geniz’); mysql> REPLACE INTO users(userid, username) VALUES (100, ‘Geniz’); mysql> SELECT * FROM users; 12/02/2009 GENIZ v. 1 Update 2 154
  155. 155. LAB 11-A 1. Ingresa las siguientes consultas(Usa la base de datos test): CREATE TABLE numbers (n smallint unsigned); INSERT INTO numbres values (5); SELECT * FROM numbers; 2. Usa la base de datos world y la tabla country e inserta code=SWE y name=MySQL e 3. Crea una tabla llamada City2 con las mismas definiciones de la tabla city 4. Copia todos los registros de la tabla city en City2. 5. elimina de city2 el registro con el id=3803 6. Selecciona el registro donde el id sea=3803 7. Elimina de city2 todos los registros donde el countrycode=‘SWE’ 8. Realiza una consulta (SELECT/ORDER BY) de las 3 ciudades más pobladas (Population) 9. Elimina la ciudad más poblada (DELETE/ORDER BY/LIMIT) 10. Utiliza la tabla numbers y actualiza el valor a 9 11. Cambia la ciudad ‘San jose’ agregando el 2% a la población y renombrando Distric=‘Ocean’. 12/02/2009 GENIZ v. 1 Update 2 155
  156. 156. LAB 11-A 12. Coloca SET SQL_SAFE_UPDATES=1; 13. Ingresa la sig. Consulta UPDATE City2 SET Name=‘NYC’; ¿Qué pasó? 14. realiza el ejemplo de 11.4.1 15. TECLEEA: TRUNCATE TABLE city2; TRUNCATE? 12/02/2009 GENIZ v. 1 Update 2 156
  157. 157. 12. TRANSACTIONS 12/02/2009 GENIZ v. 1 Update 2 157
  158. 158. Objetivos: Usar los comandos básicos para las transacciones Describir y utilizar el ACID Aislar una transacción de otra 12/02/2009 GENIZ v. 1 Update 2 158
  159. 159. 12.1 What is a Transaction? Es un mecanismo para agrupar múltiples sentencias en una operación atómica, donde todas se realizan o ninguna se lleva acabo. START TRANSACTION; /* Checar saldo suficiente de la cuenta 1*/ /* Depositar el dinero en la cuenta 2*/ COMMIT; /* Si todo salió bien se hacen los cambios permanentes*/ ROLLBACK; /* Si algo salió mal, se deshacen todas las operaciones */ ROLLBACK; /* Si no hay suficientes fondos, o un error se encontró durante la actualización */ /* Fin de la Transacción*/ 12/02/2009 GENIZ v. 1 Update 2 159
  160. 160. 12.2 ACID Las transacciones frecuentemente se describen y se inician con el ACID, donde ACID tiene las siguientes propiedades: Atomic Todas las sentencias son ejecutadas como una sola Consistent Cuando la transacción inicia en una base de datos y después la deja Isolated Una transacción no afecta a otra Durable Cuando los cambios se hacen de manera exitosa y no hay cambios perdidos 12/02/2009 GENIZ v. 1 Update 2 160
  161. 161. 12.3 Transactions Commands Para realizar una transacción podemos usar el tradicional motor de almacenamiento InnoDB, los siguientes comandos son usados para realizar una Transacción: START TRANSACTION Inicia la transacción or BEGIN COMMIT Hace los cambios permanentes ROLLBACK Cancela todos los cambios SET AUTOCOMMIT Habilita o deshabilita el modo autocommit para la sesión actual Para realizar una transacción debemos apagar el modo autocommit de la siguiente manera: SET AUTOCOMMIT=0; SELECT @@AUTOCOMMIT; 12/02/2009 GENIZ v. 1 Update 2 161
  162. 162. 12.4 Transaction DEMO START TRANSACTION; SELECT name FROM City WHERE id=3803; DELETE FROM CITY WHERE id=3803; ROLLBACK; SELECT name FROM City WHERE id=3803; START TRANSACTION; INSERT INTO City (Name, CountryCode, PopulationVALUES (‘SAKILA’,’SWE’,1); COMMIT; Lista d engines disponibles: mysql> SHOW ENGINESG 12/02/2009 GENIZ v. 1 Update 2 162
  163. 163. 12.5 Isolation Levels DIRTY READ NON-PETEABLE PHANTOM READ READ READ POSSIBLE POSSIBLE POSSIBLE UNCOMMITED READ COMMIT NOT POSSIBLE POSSIBLE POSSIBLE REPETEABLE READ NOT POSSIBLE NOT POSSIBLE POSSIBLE * SERIALIZABLE NOT POSSIBLE NOT POSSIBLE NOT POSSIBLE * No es posible para InnoDB 12/02/2009 GENIZ v. 1 Update 2 163
  164. 164. QUIZ 1. What is a transaction? 2. What are the implications of being no-autocommit mode? 3. What is the Acronym ACID stand for? _____________ ____________ _____________ ____________ 4. Name the four isolation levels? _____________ _____________ _____________ _____________ 4. A serializable level allows non-repeteable reads? (true or False) 12/02/2009 GENIZ v. 1 Update 2 164

×