Professional Documents
Culture Documents
A la hora de realizar una aplicacin una parte importante para nuestro desarrollo son
las bases de datos y para ello tenemos a disposicin diversas alternativas.
A continuacin daremos una breve explicacin de las razones que hacen potente a
MySql y los motivos por el cual deberamos tomarla como una opcin muy favorable.
MySQL es la base de datos de cdigo abierto nmero uno del mundo, es la base de
datos nmero uno para Web y es una excelente base de datos embebida. Ms de 17
de los 20 principales proveedores de software de todo el mundo confan en MySQL
como base de datos de sus productos.
Es fcil encontrar ayuda: Al ser una base de datos que se utiliza en multitud de
aplicaciones web existen multitud de foros, videotutoriales, artculos, etc.
TIPOS DE DATOS
Al crear una tabla la eleccin correcta de un formato de dato para cada columna de la
tabla har que nuestra BBDD tenga un rendimiento ptimo a medio largo plazo.
Tipos de dato numrico
Tipos
de
dato
cadena
Tipos de dato fecha
DATE: Vlido para almacenar una fecha con ao, mes y da.
DATETIME: Almacena una fecha (ao-mes-da) y una hora (horas-minutos-
segundos).
TIME: Vlido para almacenar una hora (horas-minutos-segundos).
TIMESTAMP: Almacena una fecha y hora UTC.
YEAR: Almacena un ao dado con 2 o 4 dgitos de longitud, por defecto son 4.
TIPOS DE COMANDOS
DDL (Data Definition Language): Su sigla se traduce como lenguaje de definicin de
datos, estos tipos de comandos permiten crear bases de datos, vistas, tablas, objetos,
as como tambin permite la edicin y eliminacin de los mismos.
CREATE se utiliza para crear una nueva base de datos o una nueva tabla
vaca.
DROP se utiliza para eliminar completamente una base de datos o una tabla
existente.
ALTER TABLE se utiliza para modificar una tabla ya existente.
DML (Data Manipulation Language): Su sigla se traduce como lenguaje de
manipulacin de datos, los cuales permiten manipular los datos contenidos en tablas,
bases de datos. De igual forma permiten realizar operaciones como seleccin,
modificacin, eliminacin, insercin.
SELECT se utiliza cuando quieres leer (o seleccionar) tus datos.
INSERT se utiliza cuando quieres aadir (o insertar) nuevos datos.
UPDATE se utiliza cuando quieres cambiar (o actualizar) datos existentes.
DELETE se utiliza cuando quieres eliminar (o borrar) datos existentes.
REPLACE se utiliza cuando quieres aadir o cambiar (o reemplazar) datos
nuevos o ya existentes.
TRUNCATE se utiliza cuando quieres vaciar (o borrar) todos los datos de la
plantilla.
5. CREACIN DE TABLAS Y TIPOS DE RESTRICCIONES
CREACIN DE TABLAS
Las tablas componen la estructura de tus bases de datos MySQL. Ellas contienen la
informacin que se ingresa en la base de datos y pueden crearse para satisfacer
bsicamente cualquier necesidad de almacenamiento.
TRUNCATE TABLE
DROP TABLE
MySQL SELECT
ALTER TABLE
MySQL INSERT
RENAME TABLE
Vamos a ir viendo las sintaxis de los diferentes tipos de columnas que puede pueden tener
las tablas en MySQL:
IF NOT EXISTS: Esta clusula permite verificar si una tabla a sido creada
anteriormente con el mismo nombre para evitar errores.
DEFINICIN DE COLUMNAS
Vamos revisar la sintaxis de las definiciones de columna de la sentencia CREATE TABLE
en MySql.
TIPOS DE RESTRICCIONES
Primary Key: Solo se puede crear una primary key por tabla, es la clave primaria
que identifica de manera nica cada registro/fila de la tabla. Por ejemplo el
documento de identidad DNI de una persona.
Index | Key: Ambas son sinnimas, puede haber una o varias. Establecen los
ndices de la tabla con los cuales se pueden agilizar las bsquedas en la base de
datos. De esta manera se evita la bsqueda de un parmetro por cada columna de
la tabla. Es como un ndice de un libro con el que nos evitamos recorrer cada
pgina.
Unique: Es una restriccin por la cual el valor de dicha columna debe ser nico y
diferente al del valor de dicha columna de resto de registros. Por ejemplo se suele
usar con las columnas declaradas como primary key.
Fulltext: Es un ndice que solo funciona con las columnas con formato char,
varchar, text y con almacenamiento MyISAM. Este ndice facilita las grandes
bsquedas sobre texto y realiza automticamente comparaciones de texto sobre
una cadena dada. Realiza bsquedas ms afinadas que la sentencia LIKE. Se
ignoran las palabras con menos de 4 letras y las palabras que aparezcan en ms
del 50% de los registros.
Foreign Key: Clave fornea, es un ndice por el cual podemos relacionar 2 tablas.
Este valor debe existir en ambas tablas, por ejemplo el cdigo postal de la tabla
usuarios y la tabla poblacion.
Relacionan con otras entidades. Hay varias maneras de mostrar las cardinalidades:
Poner etiquetas en las lneas que unen las relaciones con las entidades, consiste en un mnimo
y mximo que contiene un cero (varios a varios) y lo usual es poner una M en un
Existen 4 tipos de relaciones que pueden establecerse entre entidades, las cuales establecen
con cuantas ocurrencias de entidad de tipo B se puede relacionar una ocurrencia de entidad de
tipo A:
Estas relaciones no pueden ser llevadas a cabo con simples claves forneas ya
que necesitaramos una por cada registro, cosa completamente inviable. Para
este tipo de relaciones debemos crear una tercera tabla, conocida como tabla
pivote, que por convencin su nombre suele ser usuarios_peliculas para
nuestro caso, es decir, los nombres de las dos tablas separados por guiones.
Estas tablas deben contener como mnimo dos campos, usuario_id y pelicula_id
que harn referencia a las claves primarias de sus respectivas tablas.
La sentencia DELETE por defecto elimina todas las filas de la tabla o de las tablas que
se especifican y devuelve un recuento del nmero de las filas afectadas.
IGNORE: El modificador hace que MySQL ignore los errores durante el proceso
de eliminacin de filas.
Cuando se busca eliminar los registros de ms de una tabla, la clusula WHERE puede
apoyar la sentencia estableciendo la condicin; caso contrario las clausulas ORDER
BY, LIMIT no pueden ser utilizadas.
2. INSERT SYNTAX
2.1. INSERT ... SELECT
assignment:
col_name = value
assignment_list:
assignment [, assignment] ...
Con INSERT ... SELECT, se puede insertar rpidamente muchas filas en una tabla
a partir del resultado de una sentencia SELECT, que puede seleccionar entre una o
varias tablas. Por ejemplo:
IGNORE: Especifica que ignore las filas que podran causar violaciones de
clave duplicada.
Al seleccionar e insertar en la misma tabla, MySQL crea una tabla temporal interna
para contener las filas de SELECT y luego insertar esas filas en la tabla de destino. Sin
embargo, no se puede utilizar la sentencia cuando es una tabla TEMPORARY.
La sentencia DELAYED es una extensin de MySQL a SQL estndar, la cual es muy til
si tienes clientes que no pueden o no necesitan esperar para que se complete una
sentencia INSERT. Esta es una situacin comn cuando se utiliza MySQL para el
registro y cuando tambin se ejecutan peridicamente SELECT y las declaraciones
UPDATE las cuales tardan mucho tiempo en completarse.
Cuando un cliente utiliza INSERT DELAYED, obtiene una autorizacin del servidor a
la vez, y la fila se pone en cola para insertarse cuando la tabla no est en uso por
ningn otro subproceso.
La sentencia LOAD XML lee los datos de un archivo XML y los inserta en una tabla.
<row>
<column1>value1</column1>
<column2>value2</column2>
</row>
Los nombres de columna son los atributos name de las etiquetas <field> y los
valores son el contenido de estas etiquetas:
<row>
<field name='column1'>value1</field>
<field name='column2'>value2</field>
</row>
Los tres formatos se pueden utilizar en el mismo archivo XML. La rutina de importacin
detecta automticamente el formato de cada fila e interpreta correctamente. Las
etiquetas se emparejan en funcin del nombre de la etiqueta o del atributo y del
nombre de la columna.
Supongamos que tenemos una tabla nombrada person:
USE test;
<list>
<person person_id="1" fname="Kapek" lname="Sainnouine"/>
<person person_id="2" fname="Sajon" lname="Rondela"/>
<person
person_id="3"><fname>Likame</fname><lname>Orrtmons</lname></perso
n>
<person
person_id="4"><fname>Slar</fname><lname>Manlanth</lname></person>
<person><field name="person_id">5</field><field
name="fname">Stoma</field>
<field name="lname">Milu</field></person>
<person><field name="person_id">6</field><field
name="fname">Nirtam</field>
<field name="lname">Sklod</field></person>
<person
person_id="7"><fname>Sungam</fname><lname>Dulbad</lname></person>
<person person_id="8" fname="Sraref" lname="Encmelt"/>
</list>
Cada uno de los formatos XML permitidos discutidos anteriormente est representado
en este archivo de ejemplo.
Para importar los datos de person.xml, a la tabla persona puede utilizar esta
declaracin:
Esto muestra, como se indic anteriormente en esta seccin, que cualquiera o todos
los 3 formatos XML permitidos pueden aparecer en un solo archivo y ser ledos
usando LOAD XML.
4. REPLACE SYNTAX
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
[(col_name [, col_name] ...)]
{VALUES | VALUE} (value_list) [, (value_list)] ...
value:
{expr | DEFAULT}
value_list:
value [, value] ...
assignment:
col_name = value
assignment_list:
assignment [, assignment] ...
REPLACE funciona exactamente igual que un INSERT, excepto que, si una fila
antigua en la tabla tiene el mismo valor que una nueva fila para un PRIMARY KEY o
un UNIQUE, la fila antigua se elimina antes de que se inserte la nueva fila (inserta, o
elimina e inserta).
Observacin: La sentencia REPLACE tiene sentido slo si una tabla tiene un ndice
PRIMARY KEY o UNIQUE. De lo contrario, se convierte en equivalente a INSERT,
porque no hay ningn ndice que se utilizar para determinar si una nueva fila duplica
a otra.
MySQL utiliza el siguiente algoritmo para REPLACE (LOAD DATA ... REPLACE):
1. Trata de insertar la nueva fila en la tabla.
5. SELECT SYNTAX
5.1. SELECT ... INTO
La sentencia SELECT ... INTO permite que un resultado de consulta se almacene
en variables o se escriba en archivos.
SELECT ... INTO var_list: Selecciona valores de las columnas y los
almacena en variables.
SELECT ... INTO DUMPFILE: Escribe una sola fila de un archivo sin
ningn formato.
La clusula INTO puede nombrar una lista de una o ms variables, que pueden ser
variables definidas por el usuario, parmetros de funcin o variables locales del
programa. (Dentro de una declaracin SELECT ... INTO OUTFILE preparada,
slo se permiten las variables definidas por el usuario).
Los valores seleccionados se asignan a las variables. El nmero de variables debe
coincidir con el nmero de columnas. La consulta debe devolver una sola fila. Si la
consulta no devuelve ninguna fila, aparece una advertencia con el cdigo de error
1329 (No data), y los valores de la variable permanecen sin cambios. Si la consulta
devuelve varias filas, se produce el error 1172 (Result consisted of more than one
row). Si es posible que la instruccin pueda recuperar varias filas, puede utilizar
LIMIT 1 para limitar el conjunto de resultados a una sola fila.
5.2. JOIN
Los JOINs en SQL sirven para combinar filas de dos o ms tablas basndose en un
campo comn entre ellas, devolviendo por tanto datos de diferentes tablas. Un JOIN
se produce cuando dos o ms tablas se juntan en una sentencia SQL.
Existen ms tipos de joins en SQL que los que aqu se explican, como CROSS JOIN,
O SELF JOIN, pero no todos ellos estn soportados por todos los sistemas de bases
de datos. Los ms importantes son los siguientes:
1. INNER JOIN.
2. LEFT JOIN.
3. RIGHT JOIN.
4. OUTER JOIN.
INNER JOIN selecciona todas las filas de las dos columnas siempre y cuando haya
una coincidencia entre las columnas en ambas tablas. Es el tipo de JOIN ms comn.
LEFT JOIN mantiene todas las filas de la tabla izquierda (tabla 1). Las filas de la tabla
derecha se mostrarn si hay una coincidencia con las de la izquierda. Si existen
valores en la tabla izquierda pero no en la tabla derecha, sta mostrar null.
Es lo inverso a LEFT JOIN. Ahora se mantienen todas las filas de la tabla derecha
(tabla 2). Las filas de la tabla izquierda se mostrarn si hay una coincidencia con las
de la derecha. Si existen valores en la tabla derecha pero no en la tabla izquierda, sta
se mostrar null.
4. OUTER JOIN
OUTER JOIN o FULL OUTER JOIN devuelve todas las filas de la tabla izquierda (tabla
1) y de la tabla derecha (tabla 2). Combina el resultado de los joins LEFT y RIGHT.
Aparecer null en cada una de las tablas alternativamente cuando no haya una
coincidencia.
SELECT nombreColumna(s)
FROM tabla1
OUTER JOIN tabla2
ON tabla1.nombreColumna=tabla2.nombreColumna;
La imagen que representa el OUTER JOIN es la siguiente:
UNION
5.3. UNION
6. UPDATE SYNTAX
8. CREACIN DE PROCEDIMIENTOS ALMACENADOS Y
FUNCIONES
9. TRIGGERS