mysql for developers

164
MySQL for Developers v.1 Update 2 By: Domínguez Geniz Amalio Javier MySQL for Developers 12/02/2009 1 The most Popular Open Source DatabaseGENIZ v. 1 Update 2

Upload: javier-dominguez-geniz

Post on 28-Jun-2015

19.522 views

Category:

Education


8 download

DESCRIPTION

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

TRANSCRIPT

Page 1: MySQL for Developers

MySQLfor Developers v.1

Update 2

By:

Domínguez Geniz Amalio Javier

MySQL for Developers

12/02/2009 1

“The most Popular Open Source Database”

GENIZ v. 1 Update 2

Page 2: MySQL for Developers

Notas:

12/02/2009 2

Parte del presente Manual se encuentra basado en la guía del estudiante “MySQL for Developers” Presented byMySQL Training ServicesOf Sun Microsystems, INC.

GENIZ v. 1 Update 2

Este manual esta dedicado a quiensiempre me ha apoyado y motivadoen el transcurso de mi carrera, quiende además de transmitirmeconocimientos y conducirme a ellos,es ahora mi mejor amigo.

Page 3: MySQL for Developers

Índice:

12/02/2009 3

1. Introducción2. MySQL Cliente – Servidor3. Clientes MySQL4. Consultando Datos de una Tabla5. Expresiones SQL6. Tipos de Datos7. Manejo de Errores y Alertas8. Metadatos9. Bases de Datos10. Tablas11. Manipulando Datos de Tablas12. Transacciones

MySQL for Developers 1

GENIZ v. 1 Update 2

Page 4: MySQL for Developers

Indice:

12/02/2009 4

13. JOINS14. Subconsultas15. Vistas16. Consultas Preparadas17. Exportando e importando Datos18. Rutinas Almacenadas• Funciones• Procedimientos Almacenados19. Triggers (Disparadores)20. Motores de Almacenamiento (Engines)21. Optimización

MySQL for Developers 2

GENIZ v. 1 Update 2

Page 5: MySQL for Developers

1. Introduction

12/02/2009 5GENIZ v. 1 Update 2

Page 6: MySQL for Developers

Objetivos:

12/02/2009 6GENIZ v. 1 Update 2

Los detalles del Modelo de Negocios de MySQL ABProductos disponibles desde MySQL ABDefinir las diferencias entre Enterprise y CommunitySistemas Operativos SoportadosComo Instalar MySQL Server en un entorno Windows

Page 7: MySQL for Developers

1. Introduction

12/02/2009 7

1. 1 MySQL AB

MySQL es un sistema manejador de Base de Datos Relacionales (RDBMS). MySQL ABdesarrolla una familia de alto performance, servidores de base de datos yherramientas.Contribuye a construir la misión-critica , un alto volumen de sistemas y productos en lared mundial es lo que hace de MySQL la base de datos de código abierto más populardel mundo.MySQL no es tan solo la base de datos de código abierto más popular del mundo, estambién la base de datos con mayor crecimiento en la industria, con más de 8 millonesde instalaciones y 50,000 descargas por día.La compañía fue fundada en Suecia por David Axmark, Allan Larsson y Michael MontyWidenius.

The MySQL mission:To make superior database software available and affordable to all.

GENIZ v. 1 Update 2

Page 8: MySQL for Developers

12/02/2009 8

1. 2 MySQL Products

MySQL provee productos Empresariales y de usuarios de Community Server. Losproductos son reconocidos por su superior caso de uso, ejecución y rentabilidad.

Enterprise Server

Community Server

Embedded Database

Cluster

MaxDB

GENIZ v. 1 Update 2

Page 9: MySQL for Developers

1.3 MySQL GUI Tools

12/02/2009 9

MySQL Migration ToolkitMySQL AdministratorMySQL Query BrowserNetwork Enterprise Dashboard

GENIZ v. 1 Update 2

Page 10: MySQL for Developers

1.4 MySQL Drivers

12/02/2009 10

También conocidos como conectores son hechos para desarrolladores que construyenaplicaciones en el lenguaje que prefieran. Además una librería nativa de C que permiteembeber MySQL directamente dentro de sus aplicaciones de C. MySQL provee lossiguientes drivers.

MySQL Connector/ODBC

MySQL Connector/J

MySQL Connector/Net

MySQL Connector/MXJ

MySQL Connector/PHP

GENIZ v. 1 Update 2

Page 11: MySQL for Developers

1.5 Supported Operating Systems

12/02/2009 11

• Windows•Linux•Solaris•FreeBSD•Mac OS•HP-UX•IBM AIX•QNX•SCO•Open BSD•SGI Irix•Novell NetWare

GENIZ v. 1 Update 2

Page 12: MySQL for Developers

Lab 1

•Installing MySQL

• Installing the ‘world’ Database

12/02/2009 12

1. Teclea en la línea de comandos:mysql> CREATE DATABASE world;

2. Teclea:mysql> USE world;

3. Teclea: mysql> SOURCE C:/world.sql;

GENIZ v. 1 Update 2

Page 13: MySQL for Developers

2. MySQL Client/Server

12/02/2009 13GENIZ v. 1 Update 2

Page 14: MySQL for Developers

Objetivos:

12/02/2009 14GENIZ v. 1 Update 2

Describir Modelo de MySQL Client ServerComprender como el servidor soporta distintos Motores de AlmacenamientoExplicar el uso básico de Memoria y Disco

Page 15: MySQL for Developers

2. MySQL Client/Server

12/02/2009 15

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 variosprogramas clientes se conectan al servidor haciendo diferentes peticiones. Unainstalación de MySQL incluye los siguientes componentes:

•MySQL Server•Clients Programs•MySQl nonclient utilities

GENIZ v. 1 Update 2

Page 16: MySQL for Developers

2.2 MySQL Server

12/02/2009 16

El servidor MySQL o mysqld, es el programa servidor de la base de datos. El servidoradministra el acceso a la base de datos actual en disco o en memoria. MySQL Serveres 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 dela 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 ydirecciones de red.

GENIZ v. 1 Update 2

Page 17: MySQL for Developers

2.3 Client Programs

12/02/2009 17

Estos son programas usados para la comunicación con el servidor para manipular lasbases de datos administradas por el servidor. MySQL AB provee varios clientes, acontinuación se describen algunos de ellos:

• MySQL Query Browser y MySQL Administrator, son interfaces gráficas de elservidor.

•Mysql: es un programa de línea de comandos basado en texto, utilizado paraemitir consultas y ver los resultados interactivamente en una terminal de Windowso una Shell de UNIX.

•Otros clientes de línea de comandos son: mysqlimport para importar archivos dedatos, mysqldump para realizar copias de seguridad, mysqladmin para laadministración del servidor y mysqlcheck para la integridad de los archivos de labase de datos.

GENIZ v. 1 Update 2

Page 18: MySQL for Developers

2.4 MySQL Client/Server Model

12/02/2009 18

Dat

abas

e

MySQL Server Process

ClientProcess

ClientProcess

Windows

Linux

PHP

ODBC

mysqld

localhostSocketTCP/IP

TCP/IP

TCP/IP

mysql PHP

GENIZ v. 1 Update 2

Page 19: MySQL for Developers

2.5 MySQL Non-Client Utilities

12/02/2009 19

Estos son programas independientes del servidor. Por ejemplo myisamchk que seencarga de checar y reparar operaciones de tablas. Otro programa en esta categoríaes myisampack el cual crea y comprime versiones de tablas MyISAM.

Las utilidades antes mencionadas acceden a los archivos de tablas MyISAMdirectamente, son independientes de el servidor mysqld.

GENIZ v. 1 Update 2

Page 20: MySQL for Developers

2.5 Disk Space and uses Memory

12/02/2009 20

MySQL utiliza espacio en diferentes formas, principalmente para directorios y archivosque se encuentran bajo una localización conocida como “Directorio de datos”, elservidor 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á paraestablecer la comunicación con los clientes y los procesos contenidos en la base dedatos.Memory Stored EngineTemporary tables

GENIZ v. 1 Update 2

Page 21: MySQL for Developers

Quiz:

12/02/2009 21

1. All of the MySQL client programs and utilities communicate with the mysqlserver. (True or False)

2. When running a MySQL server under windows, clients programs accesing thatserver also must run under windows. (True or False)

3. A command line program commonly used to communicate with the server iscalled mysqld. (True or False)

4. Every table has its own _________ file(containing a description of tablestructure ) , 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 ________ _________

GENIZ v. 1 Update 2

Page 22: MySQL for Developers

3. MySQL Clients

12/02/2009 22GENIZ v. 1 Update 2

Page 23: MySQL for Developers

Objetivos:

12/02/2009 23GENIZ v. 1 Update 2

Invocar los programas clientes con la arquitectura MySQL Client/Server Usar algunos de los recursos del cliente mysqlDescargar y utilizar MySQL Query BrowserDescribir las interfaces clientes provistas por MySQL ABClientes provistos por terceros

Page 24: MySQL for Developers

3. MySQL Clients

12/02/2009 24

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 programacliente, debemos especificar el nombre de las opciones que el programa ejecutará.También podemos dar opciones de archivos.

shell> mysql –helpshell> 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 - - versionshell> mysql -V

shell> mysql - - host=myhost.example.comshell> mysql -h myhost.example.comshell> mysql -hmyhost.example.comGENIZ v. 1 Update 2

Page 25: MySQL for Developers

12/02/2009 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:TCPTodosSocketUnixPipeWindowsMemoryWindows

Opciones de Usuario:--user=user_name or –u user_name--password=pass_value or –ppass_value

Ejemplo:shell> mysql –h localhost –p –u rootshell> mysql –protocol=memoryshell> mysql –host=192.168.1.10 –user=myname –password=mypassshell> mysql –host=localhost –compress –uroot -pXXXXXX

GENIZ v. 1 Update 2

Page 26: MySQL for Developers

Lab 3-A

12/02/2009 26

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

GENIZ v. 1 Update 2

Page 27: MySQL for Developers

3.2 Using Option Files

12/02/2009 27

Una alternativa para especificar opciones en la línea de comandos, es realizar unarchivo 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=123456user=rootsafe-updatescompress

GENIZ v. 1 Update 2

Page 28: MySQL for Developers

Lab 3-B

12/02/2009 28

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.

GENIZ v. 1 Update 2

Page 29: MySQL for Developers

3.3 Using mysql Interactively

12/02/2009 29

El cliente mysql puede habilitar el envío de consultas al servidor y recibir losresultados. Puede ser utilizado interactivamente para poder leer entradas de lasconsultas.

También puede ejecutar Statements directamente desde la línea de comandosusando –e or - - execute

shell> mysql –uroot –pXXXXXX –e “SELECT VERSION()”

GENIZ v. 1 Update 2

Page 30: MySQL for Developers

3.4 Statements Terminators

12/02/2009 30

Son utilizados para finalizar una sentencia. Dos de ellos terminan la sentencia yarrojan resultados en forma vertical:;mysql> SELECT VERSION(), DATABASE();

\gmysql> SELECT VERSION(), DATABASE()\g

Pero si desea que los resultados le aparezcan en forma de fila utilice:

\Gmysql> SELECT VERSION(), DATABASE()\G

GENIZ v. 1 Update 2

Page 31: MySQL for Developers

3.5 The mysql Prompts

12/02/2009 31

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]\>

GENIZ v. 1 Update 2

Page 32: MySQL for Developers

LAB 3-C

12/02/2009 32

1. Invoca cliente mysql interactively usando la opción - - execute para mostrar lahora actual. Utiliza la función CURRENT_TIME()

2. En la prompt ingresa una sentencia múltiple para ver la fecha y hora actual, utilizaCURRENT_DATE para ver el tiempo actual.

3. Utiliza la sentencia del paso 2 pero visualiza la salida directamente en formavertical.

4. Ingresa la siguiente Sentencia: SELECT Name, Population FROM City WHERECountryCode=‘IND

5. Cambia la prompt mysql> colocando tu Nombre:, después regresa a la prompt dedefault.

6. Cambia mysql> prompt por el tiempo y la base de datos actual, después regresaal prompt.

7. Cierra la sesión de mysql utilizando \q

GENIZ v. 1 Update 2

Page 33: MySQL for Developers

3.6 MySQL Output Formats (HTML y XML)

12/02/2009 33

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.

shell> mysql –uroot –p -H

--html or -H Produce una salida en formato HTML

- -xml or -X Produce la salida en formato XML

GENIZ v. 1 Update 2

Page 34: MySQL for Developers

LAB 3-D

12/02/2009 34

1. Invoca al cliente mysql interactively con una sentencia que muestre la fecha yhora, 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ócaloen la unidad C. utiliza la opción tee

4. Teclea SHOW DATABASES;5. Dentro del cliente visualiza los contenidos de ayuda utilizando HELP Contents6. Ingresa mysql>HELP SHOW COLLATION7. Deshabilita el archivo t1.txt. Utiliza notee8. Abre el archivo t1.txt y visualiza su contenido

GENIZ v. 1 Update 2

Page 35: MySQL for Developers

3.6 MySQL Query Browser

12/02/2009 35

Es una interfaz gráfica de usuario del programa cliente mysql, es intuitivo y fácil deusar, provee una interfaz grafica del servidor mysql para ingresar consultas y analizardatos.

1. Instala y configura MySQL Query Browser

LAB 3-D

GENIZ v. 1 Update 2

Page 36: MySQL for Developers

3.7 MySQL Connectors

12/02/2009 36

MySQL provee de Interfaz de Programa de Aplicación (API) para acceder al servidorMySQL , algunas son usadas para escribir programas y otras son solo drivers. Algunasson puentes para programas clientes que quieran acceder utilizando un protocolo enparticular.Los conectores soportados oficialmente por MySQL son:

•Native “C : Viene incluido en MySQL•MySQL Connector/ODBC : Es un puente entre el servidor MySQL y aplicacionescliente utilizando el estándar ODBC.•MySQL Connector/J : Es similar a ODBC, pero es usado por programas JAVA basadosen JDBC. Escrito en JAVA e implementa la arquitectura cliente-Servidor.•MySQL Connector/NET : Esta hecho para aplicaciones .NET, y no esta basado enlibrerí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 Basesde datos MySQL.

GENIZ v. 1 Update 2

Page 37: MySQL for Developers

Quiz:

12/02/2009 37

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 ABd. 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)GENIZ v. 1 Update 2

Page 38: MySQL for Developers

4. Querying forTable data

12/02/2009 38GENIZ v. 1 Update 2

Page 39: MySQL for Developers

Objetivos:

12/02/2009 39GENIZ v. 1 Update 2

Ejecutar consultas en una tabla utilizando el Statement SELECTUtilizar funciones de AgregaciónUtilizar la UNION para concatenar resultados

Page 40: MySQL for Developers

4. Querying for Table data

12/02/2009 40

4.1 The SELECT Statement

El Statement SELECT es principalmente usado para retribuir cero o más registros de unao más tablas en una base de datos, pertenece al DML (Data Manipulation Language ).

EJEMPLO

mysql> SELECT Name FROM Country;mysql> SELECT 1+2;

SINTAXIS

mysql> SELECT[<clause options>] <colum list> [FROM] <table> [<clause options>];

GENIZ v. 1 Update 2

Page 41: MySQL for Developers

12/02/2009 41

4.1.1 Usos básicos del SELECT

EJEMPLOmysql> SELECT Continent FROM Country;mysql> SELECT DISTINCT Continent FROM Country;

SINTAXISSELECT DISTINCT values_to_displayFROM table_nameWHERE expressionORDER BY how_to_sortLIMIT row_count;

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

GENIZ v. 1 Update 2

Page 42: MySQL for Developers

12/02/2009 42

4.1.2 SELECT with WHERE

EJEMPLOmysql> SELECT 1+2 AS suma;

Operador Definición

+ Suma

- Resta

* Multiplicación

/ División

% Modulo

Operadores Aritméticos

GENIZ v. 1 Update 2

Page 43: MySQL for Developers

12/02/2009 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

GENIZ v. 1 Update 2

Page 44: MySQL for Developers

12/02/2009 44

4.1.2 SELECT with WHERE

Operadores Lógicos

GENIZ v. 1 Update 2

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.

Page 45: MySQL for Developers

12/02/2009 45

4.1.2 SELECT with WHERE

EJEMPLOS

GENIZ v. 1 Update 2

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’);

Page 46: MySQL for Developers

LAB 4-A

12/02/2009 46

1. Realiza un Statement SELECT el cual muestre solo la columna Continent de latabla Country.

2. Realiza un Statement SELECT el cual muestre la columna Continent y Name de latabla Country.

3. Realiza un Statement SELECT el cual muestre solo la columna Region de la tablaCountry.

4. Repite la consulta del paso 3, pero utiliza un DISTINCT para eliminar los registrosRepetidos.

5. Realiza un SELECT /WHERE y que muestre todas las columnas de la tabla Citydonde el ID sea el numero 3875.

6. Realiza un SELECT /WHERE y que muestre la columna Name de la tabla Countrydonde la población (Population) sea menor a 1000.

7. Realiza un SELECT/ORDER BY que muestre el nombre(Name) de todas lasciudades 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 yordene el resultado por el campo population en orden descendente.

GENIZ v. 1 Update 2

Page 47: MySQL for Developers

12/02/2009 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.

GENIZ v. 1 Update 2

SINTAXIS•LIMIT row_count;•LIMIT posicion_inicial,contador;

EJEMPLOmysql> 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;

Page 48: MySQL for Developers

12/02/2009 48

4.2 SELECT with MYSQL Query Browser

MySQL Query Browser nos provee una interfaz Grafica de Usuario que nos permite hacerconsultas a las tablas. Todas las consultas SELECT pueden ser realizadas desde la interfazgrafica de MySQL Query Browser.

GENIZ v. 1 Update 2

Page 49: MySQL for Developers

LAB 4-B

12/02/2009 49

1. Realiza un SELECT/LIMIT el cual muestre el nombre de la ciudad, los ordene pornombre y solo muestre 10.

2. Realiza un SELECT/LIMIT el cual muestre Name y Population de la tabla city , losordene descendentemente y limitado a 5.

3. Realiza un SELECT/LIMIT el cual muestre todas las columnas de la tabla Countrydonde GNP sea mayor a GNPOLD, en orden del nombre del país, limitado a tresregistros 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;

GENIZ v. 1 Update 2

Page 50: MySQL for Developers

12/02/2009 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.

GENIZ v. 1 Update 2

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;

Page 51: MySQL for Developers

12/02/2009 51

4.4 GROUP BY

Una función de agregación puede ser o no utilizada con GROUP BY. Con GROUP BY losgrupos son ordenados. Los grupos son basados en valores de una o más columnas.

GENIZ v. 1 Update 2

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

Page 52: MySQL for Developers

12/02/2009 52

4.4.2 GROUP BY with ROLLUP

El Modificador ROLLUP es utilizado con GROUP BY para realizar una sumatoria total de losvalores, por ejemplo, si necesitáramos una lista de la población de cada continente y un eltotal de la población de todos los continentes usaríamos la clausula WITH ROLLUP:

GENIZ v. 1 Update 2

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 ContinentHAVING SUM(Population)>10000000;

Page 53: MySQL for Developers

LAB 4-C

12/02/2009 53

1. Realiza un SELECT/GROUP BY el cual muestre el nombre de todos los continentesde la tabla Country y el Numero de países por continente

SELECT Continent, COUNT(*) AS TOTAL_PAISES FROM Country GROUP BYContinent;

2. Realiza un SELECT/GROUP BY/GROUP_CONCAT que muestre el nombre de todoslos continentes de la tabla Country y sus correspondientes países, Muéstralos porfilas.

SELECT Continent, GROUP_CONCAT(Name) FROM Country GROUP BY Continent\G

3. Realiza un SELECT/GROUP BY/ROLLUP que liste los nombres de todos loscontinentes 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 30ciudades.

SELECT District, Count(*) AS NumCities FROM City GROUP BY District HAVINGNumcities>=30;

GENIZ v. 1 Update 2

Page 54: MySQL for Developers

12/02/2009 54

4.5 UNION

La UNION habilita la concatenación de los resultados de uno o más SELECT. La sintaxis es lasiguiente:

GENIZ v. 1 Update 2

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 ;

Page 55: MySQL for Developers

5. SQL Expressions

12/02/2009 55GENIZ v. 1 Update 2

Page 56: MySQL for Developers

Objetivos:

12/02/2009 56GENIZ v. 1 Update 2

Usar componentes de expresionesUsar valores numéricos, cadenas y de tiempo en las expresiones Tipos de funciones que pueden utilizar las expresionesEscribir comentarios en las consultas SQL

Page 57: MySQL for Developers

5. SQL Expressions

12/02/2009 57

5.1 Components of SQL Expressions

Una Expresión SQL es la parte de una sentencia SQL que define como serán retribuidoslos datos. Los términos de una expresión consisten en literales, cadenas, fechas ytiempos. Los valores pueden ser referenciados a columnas de tablas y llamadas afunciones. 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;

GENIZ v. 1 Update 2

Page 58: MySQL for Developers

12/02/2009 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 noproducir errores. Los valores numéricos son enteros, valores con punto decimal ovalores con partes fraccionales.

EJEMPLO

mysql> SELECT 1.1+2.2=3.3, 1.1E0 +2.2E0=3.3E0;

mysql> SELECT 1+ ‘1’,1=‘1’;

GENIZ v. 1 Update 2

Page 59: MySQL for Developers

12/02/2009 59

5.3 String Expressions

Las expresiones de cadenas son escritas entre comillas. Pueden ser utilizadas lascomillas 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 serinterpretadas. 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’;

GENIZ v. 1 Update 2

Page 60: MySQL for Developers

12/02/2009 60

5.4 Using LIKE

El operador = y != son utilizados para encontrar valores iguales o NO Iguales que sonespecíficos exactamente durante la comparación. Podemos usar el Operador LIKE pararelacionar 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%’;

GENIZ v. 1 Update 2

Page 61: MySQL for Developers

12/02/2009 61

5.5 Temporal ExpressionsEste tipo de expresiones incluyen fechas, tiempos o valores de fecha y tiempo. Este tipode expresiones también pueden utilizar los operadores de comparación.

GENIZ v. 1 Update 2

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

Page 62: MySQL for Developers

12/02/2009 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;

GENIZ v. 1 Update 2

Page 63: MySQL for Developers

LAB 5-A

12/02/2009 63

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 5registros.

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;

GENIZ v. 1 Update 2

Page 64: MySQL for Developers

12/02/2009 64

5.6 Functions in SQL ExpressionsLas funciones pueden ser invocadas con expresiones y regresar valores cuando lafunción es evaluada. Es posible utilizar IGNORE_SPACE SQL mode para que los espaciosde una función sean eliminados.

GENIZ v. 1 Update 2

EJEMPLO

mysql> SELECT PI ();

mysql> SET SQL_MODE=‘IGNORE_SPACE’;

Page 65: MySQL for Developers

12/02/2009 65

5.6.1 Comparison FunctionsSon utilizadas para habilitar pruebas relativas a valores de uno o más de ellos. LEAST() yGREATEST() tiene cadenas o números como argumentos y regresa el valor máspequeño o el más grande respectivamente.

GENIZ v. 1 Update 2

EJEMPLO

mysql> SELECT LEAST(4,3,8,-15), LEAST(‘abc’,’ab’,’ghi’);

mysql> SELECT GREATEST(4,3,8,-15), GREATEST(‘abc’,’ab’,’ghi’);

Page 66: MySQL for Developers

12/02/2009 66

5.6.2 Control Flow Functions5.6.2.1 IF

Se utilizan para escoger entre diferentes valores basados en el resultado de unaexpresión.

GENIZ v. 1 Update 2

EJEMPLOmysql> 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);

Page 67: MySQL for Developers

12/02/2009 67

5.6.2.2 CASEEste es un constructor y no una función, pero también sirve para el control, la sintaxises la siguiente:

GENIZ v. 1 Update 2

EJEMPLOmysql> SELECT Name FROM Country ORDER BY

-> CASE code-> WHEN ‘MEX’ THEN 1-> WHEN ‘CAN’ THEN 2-> WHEN ‘USA’ THEN 3-> ELSE 4 END, Name;

SINTAXIS CASECASE case_expr

WHEN when_expr THEN resultWHEN when_expr THEN result

ELSE resultEND

Page 68: MySQL for Developers

12/02/2009 68

5.6.2.2 CASEEste es otro tipo de CASE, pero no tiene algún parámetro que evaluar.

GENIZ v. 1 Update 2

EJEMPLOmysql> 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 CASECASE

WHEN when_expr THEN resultWHEN when_expr THEN result

ELSE resultEND

Page 69: MySQL for Developers

12/02/2009 69

5.6.3 Numeric FunctionsEstas nos ayudan a Realizar operaciones matemáticas como redondeo, truncar,funciones trigonométricas o generar números aleatorios.

GENIZ v. 1 Update 2

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);

Page 70: MySQL for Developers

12/02/2009 70

5.6.3 Numeric Functions

GENIZ v. 1 Update 2

5.6.3.2 FUNCION FLOOR(): Sirve para aproximar valores al próximo entero haciaabajo. Puede utilizar TRUNCATE (<numero>,<decimales>), sin embargo no regresarávalores negativos.

mysql> SELECT FLOOR (-14.7), FLOOR(14.7);

mysql> SELECT CEILING (-14.7), CEILING(14.7);

5.6.3.3 FUNCION CEILING(): Sirve para aproximar valores al próximo entero hacia arriba.

Page 71: MySQL for Developers

12/02/2009 71

5.6.3 Numeric Functions

GENIZ v. 1 Update 2

5.6.3.4 FUNCION ABS(): Sirve para extraer el valor absoluto de un numero

mysql> SELECT ABS (-14.7), ABS(14.7);

mysql> SELECT SIGN(-14.7), SIGN(14.7), SIGN(0);

5.6.3.5 FUNCION SIGN(): Sirve para extraer el signo de un número

Page 72: MySQL for Developers

12/02/2009 72

5.6.3 Numeric Functions

GENIZ v. 1 Update 2

5.6.3.6 FUNCION SIN(), COS() y TAN(): Calculan el valor de las funcionestrigonométricas SENO, COSENO y TANGENTE

mysql> SELECT SIN(0), COS(0),TAN(0);

mysql> SELECT PI(), DEGREES(PI()), RADIANS (180);

5.6.3.7 FUNCION PI(), DEGREES (), RADIANS(): Sirve para extraer el valor de PI,convertir grados y radianes.

5.6.3.8 FUNCION RAND (): Genera Números aleatorios

mysql> SELECT RAND(), RAND(), RAND();

Page 73: MySQL for Developers

12/02/2009 73

5.6.4 String FunctionsCalculan longitudes de cadenas, extraen subcadenas y hacen conversiones.

GENIZ v. 1 Update 2

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;

Page 74: MySQL for Developers

12/02/2009 74

5.6.4 String Functions

GENIZ v. 1 Update 2

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’);

Page 75: MySQL for Developers

12/02/2009 75

5.6.4 String Functions

GENIZ v. 1 Update 2

5.6.4.4 FUNCION USER(): Devuelve el nombre del usuario actual

mysql> SELECT USER(), CHARSET(USER()), COLLATION(USER());

5.6.4.5 FUNCION CHARSET(): Muestra el juego de caracteres que utiliza

5.6.4.6 FUNCION COLLATION(): Muestra el collation usado

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’);

Page 76: MySQL for Developers

12/02/2009 76

5.6.5 Temporal Functions

GENIZ v. 1 Update 2

Estas realizan operaciones para extraer partes de fechas y horas, además de convertirvalores. 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

GET_FORMAT() Retorna el formato de la fecha en cadena

Page 77: MySQL for Developers

12/02/2009 77

5.6.5 Temporal Functions

GENIZ v. 1 Update 2

EJEMPLOS:

mysql> SELECT NOW();

GET_FORMAT (DATE|TIME|DATETIME, ‘EUR’|’USA’,’JIS’,’ISO’|’INTERNAL’)

mysql> SELECT GET_FORMAT(DATE,’EUR’);

mysql> SELECT YEAR(‘2010-04-15’), MONTH(‘2010-04-15’), DAYOFMONTH(‘2010-04-15’);

mysql> SELECT CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP;

Page 78: MySQL for Developers

12/02/2009 78

5.6.5 Temporal Functions

GENIZ v. 1 Update 2

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);

Page 79: MySQL for Developers

LAB 5-B

12/02/2009 79

1. Utilice un IF() y la función SUM() para calcular la población del continenteAfricano, asigne un alias llamado Poblacion_Africa, de la tabla country.

2. Utilice un la función IF() para especificar el orden de la lista decódigos(Countrycode) y lenguajes(language) de la tabla countrylanguage, utilizael valor del código ‘NOR’ y coloca primero los de Noruega. Limita los resultados a10 y ordénalos por lenguaje.

3. Redondea 3.75 hacia el valor más cercano a un entero4. 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.

GENIZ v. 1 Update 2

Page 80: MySQL for Developers

12/02/2009 80

5.7 Comments in SQL Statements

GENIZ v. 1 Update 2

MySQL soporta tres tipos de comentarios. Una de estas formas tiene variantes quepermiten ejecutar instrucciones especiales.

mysql> # Esto es un Comentario de una sola línea

mysql> SHOW /*! 50002 FULL*/ TABLES;

mysql> /* Esto es un /*> también */

Esto es un comentario especial

mysql> CREATE TABLE t (i int) /*! ENGINE=MEMORY*/;

CREATE TABLE ‘CountryLanguage’ (…) ENGINE=MyISAM COMMENT ‘Lista de lenguages’;

Page 81: MySQL for Developers

6. DATA TYPES

12/02/2009 81GENIZ v. 1 Update 2

Page 82: MySQL for Developers

Objetivos:

12/02/2009 82GENIZ v. 1 Update 2

Describir las categorías de tipos de datosComprender los juegos de caracteres y columnasAsignar el tipo de dato apropiado

Page 83: MySQL for Developers

6. DATA TYPES

12/02/2009 83

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 Texto3. Binary: Cadenas binarias de datos.4. Temporal: Hora y Fecha

GENIZ v. 1 Update 2

6.1.2 Creating tables with data typeCuando creamos una tabla, la declaración de las columnas debe incluir un nombre y untipo de dato

CREATE TABLE people(Id INT,First_name CHAR(30),date DATATIME);

Page 84: MySQL for Developers

12/02/2009 84

6.2 Numeric data types

Estos almacenan datos numéricos, MySQL provee de datos enteros, flotantes, puntofijo y bit.

GENIZ v. 1 Update 2

6.2.1 INTEGER

Abarcan todos los números, este tipo de datos no abarca fracciones, a continuación semuestra 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),

Page 85: MySQL for Developers

12/02/2009 85

6.2.1.1 Integer Data Type Comparison

GENIZ v. 1 Update 2

Type StoregRequired

Signed Range Unsigned Range

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 to2147483647

0 to 4294967295

BIGINT 8 bytes -9223372036854775808to 9223372036854775807

0 to18446744073709551615

Page 86: MySQL for Developers

12/02/2009 86GENIZ v. 1 Update 2

6.2.2 Floating Point Types

El tipo flotante incluye FLOAT y DOUBLE. Cada uno de estos tipos son usados pararepresentar números con parte de enteros, fracciones o ambos.

•FLOAT: Es pequeño de simple precisión que soporta valores con signo , sin signo ynúmeros negativos.•DOUBLE: es de doble precisión que soporta valores con signo, sin signo ynúmeros negativos.

SINTAXIS:FLOAT (tamaño, numero_decimales)DOUBLE (tamaño, numero_decimales)

EJEMPLO:GNP FLOAT(10,2)

Page 87: MySQL for Developers

12/02/2009 87

6.2.2.1 Floating-Point Type Comparison

GENIZ v. 1 Update 2

Type Storage Required

Signed range Unsigned Range

FLOAT 4 bytes -3.402823466E+38 to -1.175494351E-38

0 y 1.175494351E-38 to3.402823466E+38

Double 8 bytes -1.7976931348623157E+308 to-2.2250738585072014E-308

0 y 2.2250738585072014E-308 to1.7976931348623157E+308

Page 88: MySQL for Developers

12/02/2009 88GENIZ v. 1 Update 2

6.2.3 Fixed-Point Types

El tipo de punto fijo es DECIMAL. Es utilizado para representar valores de númerosexactos, tiene que tener un a parte entera , una parte fraccional o ambas. Este tipo devalores 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)

Page 89: MySQL for Developers

12/02/2009 89GENIZ v. 1 Update 2

6.3 BIT TYPES

Este tipo de datos representa campos de bits. Una columna de bit puede tomar untamaño de numero de bits por valor, de 1 a 64 bits. La siguiente columna almacena 4 y20 bits por cada campo respectivamente. Si el valor asignado son 8 bits esto será igual aun Byte.Recuerde 8 bits = 1 Byte

El tipo BIT es asignado utilizando la siguiente sintaxis:SINTAXIS:

Bit_col1 BIT(4)Bit_col1 BIT(4)

Page 90: MySQL for Developers

LAB 6-A

12/02/2009 90

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); Error6. Teclee:mysql> CREATE TABLE Bits (b BIT(10));7. Teclee:mysql>INSERT INTO bits VALUES (b’101’);8. Teclee:mysql> SELECT * FROM bits;

GENIZ v. 1 Update 2

Page 91: MySQL for Developers

12/02/2009 91

6.4 Character String Data Types

GENIZ v. 1 Update 2

6.4.1 TEXT TYPES

Este tipo de datos representa una secuencia de caracteres alfanuméricos. Estos sonimportantes e implementados en cada uno de los lenguajes de programación.

La siguiente tabla es una lista de los tipos String soportados por MySQL.

ComparisonValues

Type Description

TEXTCHAR Cadena de caracteres de punto fijo

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

Page 92: MySQL for Developers

12/02/2009 92

6.4 Character String Data Types

GENIZ v. 1 Update 2

6.4.1.1 TEXT TYPE Comparison

Para el almacenamiento de todos estos valores, M representa la cadena máxima de unacolumna, 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 bytes

65535 characters (subject to limitations)

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

Page 93: MySQL for Developers

12/02/2009 93

6.4 Character String Data Types

GENIZ v. 1 Update 2

6.4.2 INTEGER TYPES6.4.2.1 ENUM

Este tipo de datos es una enumeración( la enumeración contiene una lista de miembrosdefinidos 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’)

Page 94: MySQL for Developers

12/02/2009 94GENIZ v. 1 Update 2

6.4.2 INTEGER TYPES6.4.2.1 SET

Este tipo de dato es nombrado como un carácter del repertorio que incluye lacodificació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%’;

Page 95: MySQL for Developers

LAB 6-B

12/02/2009 95

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’;GENIZ v. 1 Update 2

Page 96: MySQL for Developers

12/02/2009 96

6.5 TEMPORAL DATATYPES

GENIZ v. 1 Update 2

6.5.1 TIMEAlmacena la hora en un rango de ‘-838:59:59’ a ‘838:59:59’ y despliega el tiempo en unformato de ‘HH:MM:SS’

6.5.2 YEAREste tipo de dato permite valores desde 1901 a 2155

6.5.3 DATE

6.5.4 DATETIME

Este tipo de dato permite valores ‘1000-01-01’ hasta ‘9999-12-31’

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 TIMESTAMPEste tipo de dato permite recordar la fecha en que se inserta o se actualiza unaoperación

Page 97: MySQL for Developers

12/02/2009 97

6.5 TEMPORAL DATA TYPES

GENIZ v. 1 Update 2

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

Page 98: MySQL for Developers

QUIZ 1-2

12/02/2009 98

1. If you want to store monetary values(for example $48.99), which data typeshould 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 fora city, which data type would you use? What’s the storage requirenment for thisdata type?

4. You perform th following INSERT operation on table datetest, which has a singleDATE 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)

GENIZ v. 1 Update 2

Page 99: MySQL for Developers

QUIZ 2-2

12/02/2009 99

7. Here’s the structure of a table continent that has only one column (name, whichstores names of continents). Assume the del SQL mode has no imput datarestrictions enabled.

Field: nameType: enum(‘Africa’,’America’,’Antarctica’,’Asia’,’Europe’)Null: yesKey:Default: NULLExtra:

INSERT INTO Continent VALUES (‘Africa’);

What string value will be stored by the following INSERT operation?What integer value will be sotred internally?

GENIZ v. 1 Update 2

Page 100: MySQL for Developers

7. HANDLING ERRORS AND WARNINGS

12/02/2009 100GENIZ v. 1 Update 2

Page 101: MySQL for Developers

Objetivos:

12/02/2009 101GENIZ v. 1 Update 2

• 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

Page 102: MySQL for Developers

7. HANDLING ERRORS AND WARNINGS

12/02/2009 102

7.1 SQL modes for Syntax Checking

Esta variable controla las operaciones del servidor como por ejemplo la sintaxis SQL olo que MySQL debería tolerar y que validación de datos checará.

GENIZ v. 1 Update 2

Nosotros podemos ver el estado actual de SQL_MODE con las siguientes Sentencias:

SELECT @@global.sql_mode;SELECT @@session.sql_mode;SELECT @@sql_mode;

Page 103: MySQL for Developers

12/02/2009 103

7.2 Setting the SQL MODE

Podemos colocar un valor a SQL_MODE cuando iniciamos el servidor mysqld utilizandola opción - -sql-mode=“mode_value”, también podemos cambiar el modo en tiempode ejecución, utilizando SETSET [SESSION|GLOBAL] sql_mode=‘mode_values’

GENIZ v. 1 Update 2

Valores que puede tomar la variable SQL_MODE:SQL_MODE=‘’SQL_MODE=ANSI _QUOTESSQL_MODE=‘IGNORE_SPACE,ANSI_QUOTES’

ANSIERROR_FOR_DIVISION_BY_ZEROSTRICT_TRANS_TABLES, STRICT_ALL_TABLESNO_ZERO_DATETRADITIONAL

mysql> SET SQL_MODE=‘TRADITIONAL’; mysql> SELECT @@SQL_MODE\G

Page 104: MySQL for Developers

12/02/2009 104

7.3 Handling Invalid Values in NON-STRICT MODE

Cuando operamos en un modo NO estricto, MySQL hace una conversión basada en lasconstantes implicadas en la definición de las columnas, estas pueden ser aplicadas enlos contextos: INSERT, REPLACE, UPDATE o LOAD DATA INFILE

GENIZ v. 1 Update 2

CREATE TABLE vals(Pal char(3),Nume INT(5));SET SQL_MODE=‘’;

mysql>INSERT INTO vals VALUES (‘GENIZ’,’MYSQL’);

mysql> SELECT * FROM vals;

Page 105: MySQL for Developers

12/02/2009 105

7.4 Interpreting Errors Messages

Cuando ocurre algún problema al conectarnos al servidor MySQL o mientras unprograma cliente ejecuta alguna sentencia, MySQL produce mensajes de diagnóstico.

GENIZ v. 1 Update 2

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

Page 106: MySQL for Developers

12/02/2009 106

7.5 The SHOW WARNINGS Statement

MySQL Server genera alertas cuando no esta hábil para comprender un requerimientoo cuando no tiene los efectos deseados.

GENIZ v. 1 Update 2

mysql> CREATE TABLE integers (i INT UNSIGNED NOT NULL);mysql> INSERT INTO integers VALUES(‘abc’),(-5),(NULL);

mysql> SHOW WARNINGS\G

Page 107: MySQL for Developers

12/02/2009 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 continuaen el procesamiento de la consulta.

•Note: Son solo mensajes de información

GENIZ v. 1 Update 2

Page 108: MySQL for Developers

12/02/2009 108

7.7 The SHOW ERRORS Statement

Este Statement es similar a SHOW WARNINGS , pero despliega en la pantalla solomensajes de error. Esta sentencia soporta la clausula LIMIT para restringir el numerode filas retornadas., también puede ser utilizada con COUNT para obtener el numerode errores.

GENIZ v. 1 Update 2

7.8 The PERROREs una línea de comandos incluida en MySQL Server, esta utilidad muestra lainformación utilizando el código del error.

shell> PERROR 13

Page 109: MySQL for Developers

QUIZ

12/02/2009 109

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 serverb) 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:___________________________

GENIZ v. 1 Update 2

Page 110: MySQL for Developers

8. OBTAINING METADATA

12/02/2009 110GENIZ v. 1 Update 2

Page 111: MySQL for Developers

Objetivos:

12/02/2009 111GENIZ v. 1 Update 2

Listar los Métodos de acceso disponibles a los MetadatosReconocer la estructura de la base de datos INFORMATION_SCHEMAUsar comandos disponibles para ver los metadatosLas diferencias entre SHOW statements y las tablas de INFORMATION_SCHEMA

Page 112: MySQL for Developers

8. OBTAINING METADATA

12/02/2009 112

8.1 Metadata Access Methods

La información acerca de las bases de datos y la estructura son METADATOS. MySQLprovee acceso a los metadatos de las bases de datos, tablas y otros objetos utilizandolos siguientes métodos:

GENIZ v. 1 Update 2

• Usando la base de datos INFORMATION_SCHEMA•Usando SHOW y DESCRIBE•Usando MYSQLSHOW

Page 113: MySQL for Developers

12/02/2009 113

8.2 INFORMATION_SCHEMA

INFORMATION_SCHEMA es la base de datos central y repositorio de los metadatos, esuna base de datos virtual y no es almacenada en el disco. Esta conformada por lassiguientes tablas:

GENIZ v. 1 Update 2

•CHARACTER_SET•COLLATIONS•COLUMNS•ENGINES•EVENTS•FILES•PARTITIONS•PLUGINS•SCHEMATA•ROUTINES•TRIGGERS•VIEWS•TABLES•USER_PRIVILEGES

Page 114: MySQL for Developers

12/02/2009 114

8.2 INFORMATION_SCHEMA

GENIZ v. 1 Update 2

MYSQL> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-> WHERE TABLE_SCHEMA=‘INFORMATION_SCHEMA’-> ORDER BY TABLE_NAME;

Page 115: MySQL for Developers

12/02/2009 115

8.2 INFORMATION_SCHEMA

GENIZ v. 1 Update 2

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’;

Page 116: MySQL for Developers

12/02/2009 116

8.3 SHOW Statement

MySQL soporta la sentencia SHOW para retribuir metadatos, puede tener la siguientessintaxis:

GENIZ v. 1 Update 2

• 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 CITY\G

Page 117: MySQL for Developers

12/02/2009 117

8.4 DESCRIBE Statement

También despliega metadatos y es equivalente al Statement SHOW.

GENIZ v. 1 Update 2

DESCRIBE table_name;DESC table_name;SHOW COLUMNS FROM table_name;

mysql> SHOW TABLES FROM mysql;

mysql> SHOW DATABASES;

Page 118: MySQL for Developers

12/02/2009 118

8.5 MYSQLSHOW Client Program

Es un cliente que produce información acerca de la estructura de las bases de datos ytablas, provee una interfaz de línea de comandos.

GENIZ v. 1 Update 2

Mysqlshow [options][db_name[table_name[column_name]]]

shell> mysqlshow world –uroot –p

shell> mysqlshow –uroot –p

Page 119: MySQL for Developers

LAB 8-A

12/02/2009 119

1. Utilizando un SELECT, obtén información acerca de la base de datos test2. 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 horizontal5. Muestra la estructura de la tabla Countrylanguage utilizando DESCRIBE6. Lista todas las tablas de INFORMATION_SCHEMA7. Utilice mysqlshow para mostrar los metadatos de la tabla Countrylanguage

GENIZ v. 1 Update 2

Page 120: MySQL for Developers

9. DATABASES

12/02/2009 120GENIZ v. 1 Update 2

Page 121: MySQL for Developers

Objetivos:

12/02/2009 121GENIZ v. 1 Update 2

Comprender las propiedades de las bases de datosEmplear buenas practicas, cuando diseñamos la estructura de la base de datosCrear bases de datosAlterar bases de datosEliminar bases de datosObtener Metadatos de las BD

Page 122: MySQL for Developers

9. DATABASES

12/02/2009 122

9.1 Database Properties

MySQL administra el almacén, los resultados y la manipulación de los datos, losregistros son organizados en tablas y las tablas en bases de datos. La base de datos esalmacenada en un directorio llamado ‘Data Directory’, las bases de datos y el directoriode datos tienen los siguientes recursos:

GENIZ v. 1 Update 2

•El servidor representa cada base de datos en un subdirectorio llamado ‘databasedirectory’.•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 relacionesb) Stored proceduresc) Triggersd) Vistas

Otra palabra para llamar a una base de datos es ‘SCHEMA’

Page 123: MySQL for Developers

12/02/2009 123

9.2 Good Design Practices

Cuando nosotros diseñamos una base de datos tenemos que considerar dos cosasimportantes:

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

GENIZ v. 1 Update 2

Page 124: MySQL for Developers

12/02/2009 124

9.3 Keys

Una llave es una columna que consiste en colocar un único identificador de un registroen una tabla. Una llave candidata es una mínima columna necesaria para identificar unregistro, la llave primaria es una llave diseñada o creada para una única fila, un índicetambién puede ser creado cuando creamos la llave primaria.

GENIZ v. 1 Update 2

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.

Page 125: MySQL for Developers

12/02/2009 125

9.4 Common Diagramming System (ERD)

El diagrama Entidad-Relación es un modelo de datos o un diagrama de altasdescripciones de modelo de datos conceptuales, nos provee de una notación graficapara representar los modelos en forma de diagramas y sus relaciones.

GENIZ v. 1 Update 2

Page 126: MySQL for Developers

12/02/2009 126

EXTRA-- MySQL WorkBench

MySQL Workbench es una interfaz grafica de usuario hecha para el diseño profesionalde una base de datos.

GENIZ v. 1 Update 2

Page 127: MySQL for Developers

12/02/2009 127

9.5 Normalization

Es una técnica que permite guiarnos en el diseño de las bases de datos relacionales. Esel proceso de redefinición del diseño y asegurarnos que la información este en un lugarindicado.

Nos permite:

•Eliminar la redundancia de datos•Eliminar columnas no dependientes de llaves•Aislar las relaciones

Desventajas

•Numerosas tablas•Mantenimiento

GENIZ v. 1 Update 2

Page 128: MySQL for Developers

12/02/2009 128

9.5 Normalization

Ejemplo de normalización en la base de datos worldHay una tabla llamada Countrylanguage. Pero porque no fueron incluidos en la tablacountry?

GENIZ v. 1 Update 2

Page 129: MySQL for Developers

12/02/2009 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 noocurra esto seguiremos la sintaxis:CREATE DATABASE IF NOT EXISTS mydb;

Al crear una base de datos podemos agregar dos clausulas opcionales, CHARACTER SETy 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, debemosutilizar el Statement USE.USE mydb

NOTA: la palabra DATABASE puede ser sustituida por SCHEMA

GENIZ v. 1 Update 2

Page 130: MySQL for Developers

12/02/2009 130

9.7 Altering DATABASES

Nosotros podemos cambiar las opciones de nuestra base de datos utilizando ALTER. Lasopciones 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

GENIZ v. 1 Update 2

Page 131: MySQL for Developers

12/02/2009 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 queidentifican a la base de datos por ejemplo los archivos de datos y las estructuras de lastablas, esta acción no puede deshacerse.

GENIZ v. 1 Update 2

Page 132: MySQL for Developers

LAB 9-A

12/02/2009 132

1. Crea una base de datos llamada db_test2. Muestra la lista de las bases de datos actuales3. Cambia a la base de datos db_test4. Muestra la estructura de la base de datos5. Despliega la lista de CHARACTER SET6. Despliega la lista de COLLATIONS7. Usa un ALTER para cambiar el character set a keybcs2 y el collate a latin2_czech_csE

8. Cambiar el character set a keybcs2 y el collate a keybcs2_general_ci9. Elimina la base de datos utilizando DROP

GENIZ v. 1 Update 2

Page 133: MySQL for Developers

10. TABLES

12/02/2009 133GENIZ v. 1 Update 2

Page 134: MySQL for Developers

Objetivos:

12/02/2009 134GENIZ v. 1 Update 2

Propiedades de tablaOpciones de ColumnaCrear tablasAlterar tablasVaciar tablasEliminar TablasAsignar y utilizar llaves foráneasObtener Metadatos

Page 135: MySQL for Developers

12/02/2009 135

10.1 Creating TablesDespué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 agregaruna tabla es la siguiente:

GENIZ v. 1 Update 2

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’;

Page 136: MySQL for Developers

12/02/2009 136

10.2 Table PropertiesMySQL administra las tablas usando los motores de almacenamiento (Engines), loscuales manejan características diferentes de cada tabla y cada uno de ellos tienediferentes características.

Las opciones que podemos agregar a CREATE TABLE pueden ser:

GENIZ v. 1 Update 2

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;

Page 137: MySQL for Developers

12/02/2009 137

10.3 Column OptionsUna tabla debe tener una o más columnas, cada una de ellas tiene un nombre y un tipode dato, alguna de las opciones que puede tomar la columna son:•NULL•NOT NULL•DEFAULT•AUTO_INCREMENT

GENIZ v. 1 Update 2

10.4 Constraints

Una llave simplemente es una restricción en una o más columnas de una tabla, sin ellasla base de datos no seria consistente ni estaría normalizada. Los tipos permitidos pormysql 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

Page 138: MySQL for Developers

12/02/2009 138

10.5 SHOW CREATE TABLEEste Statement es utilizado para ver la composición exacta de una tabla existente y nosayuda a comprender la estructura de la misma, aunque también nos sirve para checarla sintaxis.

mysql> SHOW CREATE TABLE City\G

GENIZ v. 1 Update 2

Page 139: MySQL for Developers

12/02/2009 139

10.6 Creating Tables Based on Existing TablesMySQL 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.

GENIZ v. 1 Update 2

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;

Page 140: MySQL for Developers

12/02/2009 140

10.7 Temporary TablesAlgunas veces usamos tablas temporales (tablas que solo están visibles para el clienteque las creó, pueden tener el mismo nombre que las reales y no habrá conflicto) , estaspueden hacerse con CREATE TEMPORARY TABLE además pueden ser renombradas solocon ALTER TABLE y no con RENAME TABLE:

GENIZ v. 1 Update 2

mysql> CREATE TEMPORARY TABLE Texas SELECT Name FROM City WHERE District=‘Texas’;

Page 141: MySQL for Developers

12/02/2009 141

10.8 Altering Tables10.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:

GENIZ v. 1 Update 2

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) NOTNULL;

Page 142: MySQL for Developers

12/02/2009 142

Este comando (CHANGE) nos permite cambiar la definición de una columna, porejemplo el nombre:mysql> ALTER TABLE tabla1 CHANGE LastName Apellido CHAR(40) NOT NULL;

Utilice FIRST o AFTER col_name para especificar la posición

GENIZ v. 1 Update 2

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;

10.8.4 CHANGING Columns

Para tablas temporales, RENAME TABLE no esta permitido, deberá usar ALTER TABLE

Page 143: MySQL for Developers

12/02/2009 143

DROP TABLE elimina una o más tablas, junto con todos sus datos y sus definiciones, becareful 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;

GENIZ v. 1 Update 2

10.9 Dropping Tables

Page 144: MySQL for Developers

12/02/2009 144

Una llave foránea es una relación que permite declarar un índice de una tablarelacionado a otra tabla, el motor INNODB soporta el uso de llaves foráneas, habilita ladeclaración de relaciones y mantiene la integridad. Puede contener la clausulasCASCADE o RESTRICT.

CREATE TABLE CountryParent(Code CHAR(3) NOT NULL,Name CHAR(52) NOT NULL,PRIMARY KEY (Code)) ENGINE= InnoDB;

GENIZ v. 1 Update 2

10.10 FOREIGN KEYS

CREATE TABLE CityChild(ID INT NOT NULL AUTO_INCREMENT,Name CHAR(35) NOT NULL,CountryCode CHAR(3) NOT NULL,PRIMARY KEY (ID),FOREIGN KEY (CountryCode)

REFERENCES CountryParent (Code)ON UPDATE CASCADEON DELETE CASCADE

) ENGINE= MyISAM;

Page 145: MySQL for Developers

LAB 10-A

12/02/2009 145

1. Crea una tabla dentro de la base de datos test llamada ‘db’ utiliza el motor InnoDB yque el charset sea latin2, con un solo campo ‘Name’ y de tipo char con una longitudde 10.

2. Crea una tabla que contenga (Code, Name y Capital)de los países de la regionnórdica basados en la tabla country. Utiliza LIKE ‘Nordic%’ y nómbralapaises_nordicos.

3. Visualiza todos los registros de la tabla paises_nordicos y despues muesra susmetadatos.

4. Usa la base de datos world y teclea los ejemplos del capitulo de llaves foráneas ydespués muestra sus metadatos.

5. Ahora inserta en la tabla CountryParent los registros de la tabla country quepertenecen 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)

GENIZ v. 1 Update 2

Page 146: MySQL for Developers

11. MANIPULATING TABLE DATA

12/02/2009 146GENIZ v. 1 Update 2

Page 147: MySQL for Developers

Objetivos:

12/02/2009 147GENIZ v. 1 Update 2

Insertar datos en una tablaReemplazar datosActualizar DatosEliminar datosTruncar datos

Page 148: MySQL for Developers

12/02/2009 148

11. 1 The INSERT StatementAhora que hemos creado nuestras tablas, el siguiente paso será agregarles los datos.Usaremos el Statement INSERT para colocar datos dentro de una tabla siguiendo susintaxis general:

GENIZ v. 1 Update 2

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’);

Page 149: MySQL for Developers

12/02/2009 149

11.1.1 INSERT with SET

La cláusula SET puede también ser usada para indicar los nombres de las columnas y losvalores, esta puede ser escrita como sigue:

GENIZ v. 1 Update 2

mysql> INSERT INTO books SET author=‘Bruce Eckel’, title= ‘Thinking in JAVA’,-> edition=‘Second Edition’;

El Statement SELECT también puede ser utilizado para copiar datos de una tabla aotra:

mysql> INSERT INTO City2 SELECT * FROM City;

11.1.2 INSERT with SELECT

Page 150: MySQL for Developers

12/02/2009 150

11.1.3 INSERT with LAST_INSERT_ID

Podemos hacer este tipo de inserción después de que el ultimo valorAUTO_INCREMENT fue insertado:

GENIZ v. 1 Update 2

mysql> INSERT INTO City (Name, CountryCode)-> VALUES (‘Mexico City’, ‘MEX’);

mysql> SELECT LAST_INSERT_ID();

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.

11.1.4 INSERT with NULL values

Page 151: MySQL for Developers

12/02/2009 151

11. 2 The DELETE StatementPara remover los datos de una tabla usaremos DELETE, este comando permite utilizar laclausula WHERE para identificar el registro a eliminar. Para dejar una tabla vacíautilizaremos la siguiente sintaxis:

GENIZ v. 1 Update 2

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 losdatos, por ejemplo LIMIT puede ser utilizado para remover algunas de las instancias deun registro duplicado, junto con ORDER BY proveen un mejor control:

DELETE FROM people WHERE name=‘Javier’ ORDER BY id DESC LIMIT 4;

Page 152: MySQL for Developers

12/02/2009 152

11. 3 The UPDATE StatementEste comando nos ayuda a modificar los contenidos de los datos existentes. Debemoscolocar el nombre de la tabla después la cláusula SET y a continuación la lista decolumnas y valores:

GENIZ v. 1 Update 2

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 siguientessituaciones:• Cuando no hay valore para actualizar es decir, cuando una tabla esta vacía y no hayrelación con WHERE.•Cuando el valor dado corresponde con el valor anterior.

Page 153: MySQL for Developers

12/02/2009 153

11. 4 The REPLACE Statement

Este comando trabaja de forma similar a INSERT excepto en la tabla que tiene el mismovalor que el nuevo registro, donde el viejo registro es eliminado antes de insertar elnuevo, este comando es parecido a un INSERT con un DELETE. Es útil cuando queremosreemplazar una columna con alguna llave primaria o un valor UNIQUE.

GENIZ v. 1 Update 2

REPLACE INTO table_name SET (column_list) VALUES (value_list);

mysql> REPLACE INTO people (id, name, age) VALUES (12,’Bruce’,25);

Page 154: MySQL for Developers

12/02/2009 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_timetimestamp, 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;

GENIZ v. 1 Update 2

Page 155: MySQL for Developers

LAB 11-A

12/02/2009 155

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 e3. Crea una tabla llamada City2 con las mismas definiciones de la tabla city4. Copia todos los registros de la tabla city en City2.5. elimina de city2 el registro con el id=38036. Selecciona el registro donde el id sea=38037. 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 911. Cambia la ciudad ‘San jose’ agregando el 2% a la población y renombrando

Distric=‘Ocean’.

GENIZ v. 1 Update 2

Page 156: MySQL for Developers

LAB 11-A

12/02/2009 156

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.115. TECLEEA:TRUNCATE TABLE city2;

GENIZ v. 1 Update 2

TRUNCATE?

Page 157: MySQL for Developers

12. TRANSACTIONS

12/02/2009 157GENIZ v. 1 Update 2

Page 158: MySQL for Developers

Objetivos:

12/02/2009 158GENIZ v. 1 Update 2

Usar los comandos básicos para las transaccionesDescribir y utilizar el ACIDAislar una transacción de otra

Page 159: MySQL for Developers

12/02/2009 159

12.1 What is a Transaction?Es un mecanismo para agrupar múltiples sentencias en una operación atómica, dondetodas se realizan o ninguna se lleva acabo.

GENIZ v. 1 Update 2

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*/

Page 160: MySQL for Developers

12/02/2009 160

12.2 ACIDLas transacciones frecuentemente se describen y se inician con el ACID, donde ACIDtiene las siguientes propiedades:

GENIZ v. 1 Update 2

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

Page 161: MySQL for Developers

12/02/2009 161

12.3 Transactions CommandsPara realizar una transacción podemos usar el tradicional motor de almacenamientoInnoDB, los siguientes comandos son usados para realizar una Transacción:

GENIZ v. 1 Update 2

START TRANSACTION or BEGIN

Inicia la transacción

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;

Page 162: MySQL for Developers

12/02/2009 162

12.4 Transaction DEMO

GENIZ v. 1 Update 2

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 ENGINES\G

Page 163: MySQL for Developers

12/02/2009 163

12.5 Isolation Levels

GENIZ v. 1 Update 2

DIRTY READ NON-PETEABLE READ

PHANTOM READ

READ UNCOMMITED

POSSIBLE POSSIBLE POSSIBLE

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

Page 164: MySQL for Developers

12/02/2009 164

QUIZ

GENIZ v. 1 Update 2

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)