You are on page 1of 22

1. POR QU UTILIZAR MYSQL?

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 Multiplataforma: Para Sistemas Operativos como Windows, Linux y Mac se


dispone de una versin de esta para trabajar de manera libre.

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.

Menos caractersticas / mantenimiento: Aunque parezca una desventaja


realmente esto permite que cualquier programador pueda aprender
rpidamente cmo debe mantener la base de datos para sus aplicaciones. Sin
necesidad de ser un experto Administrador en Base de Datos (DBA).

El costo es mnimo: A comparacin de Oracle o Microsoft SQL Server. Poder


empezar a utilizar MySql en la nube resulta ser econmico a que podemos
encontrarlo en multitud de distribuidores al ser libre.

Soporte para la transacciones: Una de las grandes ventajas de utilizar MySQL


es la gestin de las transacciones. Las transacciones en MySQL son Atmicas,
consistentes, aisladas y durable; ACID.
2. ARQUITECTURA DE MYSQL
La siguiente figura es una visin abstracta de la arquitectura lgica de MySQL. La
figura hace una divisin entre los componentes que conforman el servidor, las
aplicaciones cliente que lo utilizan y las partes del sistema operativo en las que se
basa el almacenamiento fsico.

Los conectores: Son bibliotecas en diferentes lenguajes de programacin que


permiten la conexin (remota o local) con servidores MySQL y la ejecucin de
consultas. Por ejemplo, el conector Connector/J permite conectarse a MySQL
desde cualquier aplicacin programada en lenguaje Java, y utilizando el Java
Database Connectivity (JDBC) API.

Las utilidades y herramientas: Son los programas y aplicaciones que se


incluyen con la distribucin del gestor, o que pueden instalarse como
aplicaciones adicionales. Estas incluyen las herramientas de backup, el
navegador de consultas (QueryBrowser), las aplicaciones administrativas de
interfaz grfico y la herramienta de diseo MySQL Workbench, entre otras.

Motores de almacenamiento: El elemento ms notable de la arquitectura de


MySQL es la denominada arquitectura de motores de almacenamiento
reemplazables (pluggable storage engine architecture). Esto permite utilizar el
motor de almacenamiento ms adecuado para cada necesidad concreta.
Tambin permite que terceros puedan implementar motores de
almacenamiento nuevos para necesidades especficas, o adaptar el cdigo de
los existentes a ciertos requisitos de almacenamiento.
En consecuencia, una primera tarea de diseo fsico en MySQL es la de decidir
el motor de almacenamiento ms apropiado.

El gestor de conexiones: Es la responsable de mantener las mltiples


conexiones de los clientes. Un gestor de conexiones inexistente o laxo
simplemente creara una conexin por cada cliente conectado. No obstante, las
conexiones consumen recursos de mquina, y crearlas y destruirlas son
tambin procesos costosos. Por eso, el gestor de conexiones de MySQL puede
configurarse para limitar el nmero de conexiones concurrentes.

El procesamiento y optimizacin de consultas: Cada vez que una consulta llega


al gestor de MySQL, se analiza sintcticamente y se produce una
representacin intermedia de la misma. A partir de esa representacin, MySQL
toma una serie de decisiones, que pueden incluir el determinar el orden de
lectura de las tablas, el uso de ciertos ndices, o la re-escritura de la consulta
en una forma ms eficiente.

La cach de consultas: MySQL implementa un cach de consultas, donde


guarda consultas y sus resultados enteros. De este modo, el procesador de
consultas, antes ni siquiera de plantear la optimizacin, busca la consulta en la
cach, para evitarse realizar el trabajo en el caso de que tenga suerte y
encuentre la consulta en la cach.

El Control de Concurrencia: En un gestor de bases de datos es simplemente el


mecanismo que se utiliza para evitar que lecturas o escrituras simultneas a la
misma porcin de datos terminen en inconsistencias o efectos no deseados. El
mecanismo que se utiliza para controlar este acceso es el de los bloqueos
(locks).

La gestin de recuperacin y transacciones : La gestin de transacciones


permite dotar de semntica todo o nada a una consulta o a un conjunto de
consultas que se declaran como una sola transaccin. Es decir, si hay algn
problema y parte de la consulta o algunas de las consultas no consiguen
llevarse a cabo, el servidor anular el efecto parcial de la parte que ya haya
sido ejecutada. La recuperacin permite volver hacia atras (rollback) partes
de una transaccin.

3. INSTALACIN DE MYSQL Y MYSQLWORKBENCH


4. TIPOS DE DATOS Y TIPOS DE COMANDOS

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.

Otras sentencias para trabajar con tablas son:

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:

CREATE TABLE [IF NOT EXISTS] nombre_tabla;

La sentencia CREATE TABLE soporta el siguiente modificador:

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.

tipo_dato [NOT NULL | NULL] [DEFAULT valor_defecto]


[AUTO_INCREMENT] [UNIQUE [KEY] | PRIMARY [KEY]]
[COMMNET string] [COLUMN_FORMAT{FIXED|DYNAMIC|DEFAUKT}]
[STORAGE];

Dentro de la definicin de columnas podemos implementar las siguientes clusulas:

NOT NULL | NULL: Establecemos si el valor de la columna debe rellenarse


obligatoriamente o no.

AUTO_INCREMENT: Establece un valor inicial para un incremento posterior con la


insercin de cada nuevo registro.

COMMENT: Comentario a modo informativo de la columna.


COLUMN_FORMAT: Establece la ocupacin de la columna, FIXED para un valor
fijo, DYNAMIC para un valor variable y DEFAULT para una ocupacin por defecto.

STORAGE: Posibilidad de almacenamiento en memoria o disco.

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.

CONSTRAINT: Es una restriccin, el nombre de la restriccin debe ser nica en la


base de datos. Estas exigen la integridad de los datos de las columnas de la tabla.

Vamos a revisar la sintaxis de la cual podemos realizar una restriccin en MySql.


CREATE TABLE persona(
id INT NOT NULL PRIMARY KEY
)

CREATE TABLE persona(


id INT NOT NULL,
PRIMARY KEY (id)
)

CREATE TABLE persona(


id INT NOT NULL,
CONSTRAINT pk_persona PRIMARY KEY (id)
)

CREATE TABLE persona(


id INT NOT NULL
)
ALTER TABLE persona ADD PRIMARY KEY (id);

EJEMPLO PARA CREAR UNA TABLA EN MYSQL


Aqu os pongo un ejemplo de una sentencia SQL para crear la tabla en una base de datos
MySQL:

CREATE TABLE IF NOT EXISTS persona(


id INT NOT NULL AUTO_INCREMENTE,
nombre VARCHAR (50) NOT NULL,
dni INT (10) NOT NULL,
sexo CHAR (1) NOT NULL,
fecha DATE NOT NULL,
UNIQUE KEY (dni),
CONSTRAINT pk_persona PRIMARY KEY (id)
)

6. RELACIN ENTRE TABLAS Y CARDINALIDAD


CARDINALIDAD

Es Simplemente la forma en que se relacionan las Entidades, o expresa cuantas entidades se

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:

4. Relacin uno a uno.

5. Relacin uno a varios (n).


3. Relacin varios (n) a uno.

4. Relacin varios a varios (n)- (n)

RELACIN ENTRE TABLAS


Para que los datos de las tablas se puedan seleccionar, encontrar y procesar de forma
rpida y eficaz, es necesario que las tablas no se encuentren aisladas unas de otras. Las
tablas tienen que estar relacionadas con otras formando estructuras relacionales. La
relacin es una asociacin establecida entre campos comunes (columnas) en dos tablas.
Los campos que entran en relacin pueden llamarse de distinta manera, pero tienen que
ser del mismo tipo de datos.

Relaciones de uno a uno


Estas relaciones existen por ejemplo en el caso de una persona y su dni, una
persona slo puede tener un dni, y un dni slo puede pertenecer a una persona.

Para llevar a cabo esta relacin en nuestra base de datos simplemente


debemos crear nuestra tabla usuarios y nuestra tabla dnis, para hacer
referencia al dni de cada usuario nos basta con crear un campo en la tabla dnis
el cual actuar como clave fornea haciendo referencia al usuario a travs de
su id.

Relaciones de uno a muchos


El ejemplo perfecto para estas relaciones es entre usuarios y posts de un blog,
un usuario puede tener muchos posts, pero un post slo puede pertenecer a un
usuario, sirve lo mismo que en la relacin de uno a uno. La nica diferencia
entre estas dos relaciones en este aspecto, es que la clave fornea entre
usuarios y dnis puede estar tanto en la tabla usuarios con un campo id_dni
como en la tabla dnis con un campo id_usuario.
En cambio, en una relacin de uno a muchos la clave fornea siempre debe
estar en la tabla que hace la relacin de muchos, en este caso sera la tabla
posts.

Relaciones de muchos a muchos


Este tipo de relaciones vienen a ser las ms complicadas, aunque realmente no
lo son, para el ejemplo podemos decir que la relacin entre usuarios y
pelculas(alquileres de un videoclub), un usuario puede alquilar muchas
pelculas, y una pelcula puede ser alquilada por muchos usuarios.

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 funcin de esta tabla es la de poder enlazar a los usuarios y las pelculas a


travs de sus claves primarias, es decir, si tenemos un usuario con id 1 y una
pelcula con id 120 en sus respectivas tablas, para poder unirlos, deberamos
crear un nuevo registro en la tabla usuarios_peliculas con esos datos.

Para tenerlo ms claro, veamos un sencillo diagrama sobre las relaciones de


las que hemos hablado y cmo debemos interpretarlas en nuestra base de
datos.
7. MANIPULACIN DE DATOS Y CONSULTAS
1. DELETE SYNTAX
Sintaxis para una sola tabla:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

Sintaxis para varias tablas:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]


tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
[WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]


FROM tbl_name[.*] [, tbl_name[.*]] ...
USING table_references
[WHERE where_condition]

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.

La sentencia DELETE admite los siguientes modificadores:

LOW_PRIORITY: El servidor retrasa la ejecucin de DELETE hasta que no


haya ningn usuario leyenda datos de la tabla.

QUICK: El motor de almacenamiento no fusiona hojas de ndice durante la


eliminacin, lo que puede acelerar algunos tipos de operaciones de
eliminacin.

IGNORE: El modificador hace que MySQL ignore los errores durante el proceso
de eliminacin de filas.

La estructura DELETE tambin se puede apoyar en otras clusulas para ejecutarse


con mayor efectividad.
WHERE: Especifica las condiciones que se deben identificar para poder eliminar
los registros.

ORDER BY: Especifica el orden en que se deben eliminar los registros.

LIMIT: Establece el lmite de filas que se pueden eliminar.

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

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]


[INTO] tbl_name
[(col_name [, col_name] ...)]
SELECT ...
[ON DUPLICATE KEY UPDATE assignment_list]
value:
{expr | DEFAULT}

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:

INSERT INTO empleado (idEmpleado)


SELECT persona.idPersona
FROM persona WHERE persona.idPersona > 100;

Las siguientes condiciones son vlidas para INSERT ... SELECT:

LOW_PRIORITY: El servidor retrasa la ejecucin hasta que no haya ningn


usuario leyenda datos de la tabla.

HIGH_PRIORITY: El servidor realiza la ejecucin, aunque hubiera usuarios


leyenda datos de la tabla.

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.

2.2. INSERT ... ON DUPLICATE KEY UPDATE

INSERT INTO t1 (a,b,c) VALUES (1,2,3)


ON DUPLICATE KEY UPDATE c=c+1;

UPDATE t1 SET c=c+1 WHERE a=1;


Si se especifica la clusula ON DUPLICATE KEY UPDATE y una fila a insertar
provocar un valor duplicado en un ndice UNIQUE o PRIMARY KEY, se produce una
actualizacin de la fila antigua. Por ejemplo, si la columna a se declara como UNIQUE
y contiene el valor 1, las dos instrucciones siguientes tienen un efecto similar:

INSERT INTO t1 (a,b,c) VALUES (1,2,3)


ON DUPLICATE KEY UPDATE c=c+1;

2.3. INSERT DELAYED

INSERT DELAYED ...

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.

Una ventaja es que las inserciones de muchos clientes se agrupan y se escriben en un


bloque. Esto es mucho ms rpido que realizar muchas inserciones separadas.

Observacin: INSERT DELAYED es una sentencia ms lenta que un INSERT


normal si la tabla no est en uso. Tambin hay la sobrecarga adicional porque el
servidor debe manejar un hilo separado para cada tabla para la cual hay filas
retrasadas.

3. LOAD XML SYNTAX


LOAD XML [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE [db_name.]tbl_name
[CHARACTER SET charset_name]
[ROWS IDENTIFIED BY '<tagname>']
[IGNORE number {LINES | ROWS}]
[(field_name_or_user_var
[, field_name_or_user_var] ...)]
[SET col_name={expr | DEFAULT},
[, col_name={expr | DEFAULT}] ...]

La sentencia LOAD XML lee los datos de un archivo XML y los inserta en una tabla.

Esta declaracin admite tres formatos XML diferentes:


Nombres de columna como atributos y valores de columna como valores de
atributo:

<row column1="value1" column2="value2" .../>

Nombres de columna como etiquetas y valores de columna como el contenido


de estas etiquetas:

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

CREATE TABLE person (


person_id INT NOT NULL PRIMARY KEY,
fname VARCHAR(40) NULL,
lname VARCHAR(40) NULL,
created TIMESTAMP
);

Adems, tambin definimos que esta tabla est inicialmente vaca.


Ahora supongamos que tenemos un archivo XML simple person.xml, cuyo contenido
es como se muestra aqu:

<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:

mysql> LOAD XML LOCAL INFILE 'person.xml'


-> INTO TABLE person
-> ROWS IDENTIFIED BY '<person>';

Query OK, 8 rows affected (0.00 sec)


Records: 8 Deleted: 0 Skipped: 0 Warnings: 0

Aqu, suponemos que person.xml se encuentra en el directorio de datos de MySQL. Si


no se puede encontrar el archivo, se produce el siguiente error:

ERROR 2 (HY000): File '/person.xml' not found (Errcode: 2)

La clusula ROWS IDENTIFIED BY '<person>' significa que cada elemento


<person> del archivo XML se considera equivalente a una fila de la tabla en la que se
van a importar los datos.
Como puede verse por la respuesta del servidor, se importaron 8 filas en la tabla
person. Esto puede ser verificado con una simple sentencia SELECT:

mysql> SELECT * FROM person;


+-----------+--------+------------+---------------------+
| person_id | fname | lname | created |
+-----------+--------+------------+---------------------+
| 1 | Kapek | Sainnouine | 2007-07-13 16:18:47 |
| 2 | Sajon | Rondela | 2007-07-13 16:18:47 |
| 3 | Likame | rrtmons | 2007-07-13 16:18:47 |
| 4 | Slar | Manlanth | 2007-07-13 16:18:47 |
| 5 | Stoma | Nilu | 2007-07-13 16:18:47 |
| 6 | Nirtam | Skld | 2007-07-13 16:18:47 |
| 7 | Sungam | Dulbd | 2007-07-13 16:18:47 |
| 8 | Sreraf | Encmelt | 2007-07-13 16:18:47 |
+-----------+--------+------------+---------------------+
8 rows in set (0.00 sec)

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)] ...

REPLACE [LOW_PRIORITY | DELAYED]


[INTO] tbl_name
SET assignment_list

REPLACE [LOW_PRIORITY | DELAYED]


[INTO] tbl_name
[(col_name [, col_name] ...)]
SELECT ...

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.

2. Mientras la insercin falla porque se produce un error de clave duplicada para


una clave principal o un ndice nico:

a. Eliminar de la tabla la fila en conflicto que tiene el valor de clave


duplicada.

b. Intente de nuevo 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 OUTFILE: Escribe las filas seleccionadas en un


archivo. Los terminadores de columna y de lnea se pueden especificar para
producir un formato de salida especfico.

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.

5.2.1. INNER 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.

SELECT colum_name FROM table_name1 INNER JOIN table_name2


ON table_name1.colum_name = table_name2.colum_name;
5.2.2. LEFT JOIN

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.

SELECT colum_name FROM table_name1 LEFT JOIN table_name2


ON table_name1.colum_name = table_name2.colum_name;

3.2.3. RIGHT JOIN

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.

SELECT colum_name FROM table_name1 RIGHT JOIN table_name2


ON table_name1.colum_name = table_name2.colum_name;

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:

Vamos a obtener todas las filas de las tablas Clientes y Pedidos:


SELECT Clientes.NombreCliente, Pedidos.PedidoID
FROM Clientes OUTER JOIN Pedidos
ON Clientes.ClienteID=Pedidos.ClienteID
ORDER BY Clientes.NombreCliente;
La sentencia devolver todos los Clientes y todos los Pedidos, si un cliente no tiene
pedidos mostrar null en PedidoID, y si un pedido no tuviera un cliente mostrara null
en NombreCliente (en este ejemplo no sera lgico que un Pedido no tuviera un
cliente).
La sintaxis de OUTER JOIN o FULL OUTER JOIN no existen en MySQL, pero se
puede conseguir el mismo resultado de diferentes formas, esta es una:
SELECT Clientes.NombreCliente, Pedidos.PedidoID
FROM Clientes
LEFT JOIN Pedidos ON Clientes.ClienteID=Pedidos.ClienteID

UNION

SELECT Clientes.NombreCliente, Pedidos.PedidoID


FROM Clientes
RIGHT JOIN Pedidos ON Clientes.ClienteID=Pedidos.ClienteID;

SELECT * FROM t1 LEFT JOIN (t2, t3, t4)


ON (t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c)

5.3. UNION

6. UPDATE SYNTAX
8. CREACIN DE PROCEDIMIENTOS ALMACENADOS Y
FUNCIONES

9. TRIGGERS

10. VISTAS E NDICES

You might also like