mysql for developers
DESCRIPTION
Manual para desarrolladores de bases de datos MySQL , muestra desde el levantamniento del servicio hasta configuraciones, bd, transacciones,etcTRANSCRIPT
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
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.
Í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
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
1. Introduction
12/02/2009 5GENIZ v. 1 Update 2
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
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
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
1.3 MySQL GUI Tools
12/02/2009 9
MySQL Migration ToolkitMySQL AdministratorMySQL Query BrowserNetwork Enterprise Dashboard
GENIZ v. 1 Update 2
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
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
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
2. MySQL Client/Server
12/02/2009 13GENIZ v. 1 Update 2
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
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
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
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
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
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
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
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
3. MySQL Clients
12/02/2009 22GENIZ v. 1 Update 2
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
4. Querying forTable data
12/02/2009 38GENIZ v. 1 Update 2
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
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
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
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
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
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.
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’);
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
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;
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
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
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;
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
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;
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
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 ;
5. SQL Expressions
12/02/2009 55GENIZ v. 1 Update 2
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
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
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
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
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
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
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
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
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’;
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’);
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);
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
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
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);
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.
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
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();
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;
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’);
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’);
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
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;
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);
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
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’;
6. DATA TYPES
12/02/2009 81GENIZ v. 1 Update 2
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
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);
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),
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
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)
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
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)
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)
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
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
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
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’)
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%’;
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
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
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
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
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
7. HANDLING ERRORS AND WARNINGS
12/02/2009 100GENIZ v. 1 Update 2
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
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;
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
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;
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
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
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
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
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
8. OBTAINING METADATA
12/02/2009 110GENIZ v. 1 Update 2
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
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
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
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;
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’;
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
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;
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
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
9. DATABASES
12/02/2009 120GENIZ v. 1 Update 2
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
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’
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
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.
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
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
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
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
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
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
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
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
10. TABLES
12/02/2009 133GENIZ v. 1 Update 2
Objetivos:
12/02/2009 134GENIZ v. 1 Update 2
Propiedades de tablaOpciones de ColumnaCrear tablasAlterar tablasVaciar tablasEliminar TablasAsignar y utilizar llaves foráneasObtener Metadatos
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’;
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;
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
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
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;
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’;
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;
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
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
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;
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
11. MANIPULATING TABLE DATA
12/02/2009 146GENIZ v. 1 Update 2
Objetivos:
12/02/2009 147GENIZ v. 1 Update 2
Insertar datos en una tablaReemplazar datosActualizar DatosEliminar datosTruncar datos
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’);
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
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
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;
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.
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);
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
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
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?
12. TRANSACTIONS
12/02/2009 157GENIZ v. 1 Update 2
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
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*/
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
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;
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
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
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)