Está en la página 1de 6

InnoDB

InnoDB es un mecanismo de almacenamiento de datos de cdigo abierto para la base de


datos MySQL, incluido como formato de tabla estndar en todas las distribuciones de MySQL AB a
partir de las versiones 4.0. Su caracterstica principal es que soporta transacciones de tipo ACID y
bloqueo de registros e integridad referencial. InnoDB ofrece una fiabilidad y consistencia muy
superior a MyISAM, la anterior tecnologa de tablas de MySQL, si bien el mejor rendimiento de
uno u otro formato depender de la aplicacin especfica.
MyISAM es la alternativa habitual a InnoDB a la hora de escoger la tecnologa de almacenamiento
de datos en MySQL. Estas son algunas de las diferencias entre los dos:

InnoDB se recupera de un problema volviendo a ejecutar sus logs, mientras que MyISAM
necesita repasar todos los ndices y tablas que hayan sido actualizados y reconstruirlos si esos
cambios no han sido escritos en disco. El primer proceso requiere ms o menos el mismo
tiempo siempre, mientras que el segundo aumenta con el tamao de la base de datos.
MyISAM deja al sistema operativo la tarea de hacer la cach de las lecturas y escrituras de los
registros, mientras que InnoDB realiza l mismo la tarea, combinando cachs de registro y de
ndice. InnoDB no enva directamente los cambios en las tablas al sistema operativo para que
las escriba, lo que puede hacerlo mucho ms rpido que MyISAM en ciertos escenarios.
InnoDB almacena fsicamente los registros en el orden de la clave primaria, mientras que
MyISAM los guarda en el orden en que fueron aadidos. Cuando la clave primaria se escoge
de acuerdo con las necesidades de las consultas ms habituales esto puede suponer una
mejora sustancial del rendimiento. Por otro lado, si los datos se insertan en un orden que
difiera sustancialmente del orden de la clave primaria, se obliga a InnoDB a reordenar mucho
los datos para mantenerlos en el orden adecuado.
InnoDB no dispone de la compresin de datos de la que disfruta MyISAM, de modo que tanto
el espacio en disco como la cach en la memoria RAM pueden ser ms grandes. Este problema
se ha reducido en MySQL 5.0, reducindolo en aproximadamente un 20%.
Cuando opera con transacciones ACID, InnoDB debe escribir en disco al menos una vez por
cada transaccin, aunque puede combinar las escrituras de varias inserciones concurrentes.
Para los discos duros tpicos, esto supone un lmite de aproximadamente 200 transacciones
por segundo, por lo que aumentarlas exige controladores de disco con cach de escritura y
sistema de alimentacin ininterrumpido para mantener la integridad. InnoDB ofrece diversos
modos de funcionamiento que reducen este efecto, pero conllevan una prdida de integridad
transaccional. MyISAM no tiene ese problema porque no soporta transacciones.

ACID

En bases de datos se denomina ACID a las caractersticas de los parmetros que permiten clasificar
las transacciones de los sistemas de gestin de bases de datos. Cuando se dice que es ACID
compliant se indica -en diversos grados- que ste permite realizar transacciones.
En concreto ACID es un acrnimo de Atomicity, Consistency, Isolation and Durability: Atomicidad,
Consistencia, Aislamiento y Durabilidad en espaol.
Definiciones

Atomicidad: Si cuando una operacin consiste en una serie de pasos, bien todos ellos se
ejecutan o bien ninguno, es decir, las transacciones son completas.

Consistencia: (Integridad). Es la propiedad que asegura que slo se empieza aquello que se
puede acabar. Por lo tanto se ejecutan aquellas operaciones que no van a romper las reglas y
directrices de Integridad de la base de datos. La propiedad de consistencia sostiene que
cualquier transaccin llevar a la base de datos desde un estado vlido a otro tambin vlido.
"La Integridad de la Base de Datos nos permite asegurar que los datos son exactos y
consistentes, es decir que estn siempre intactos, sean siempre los esperados y que de
ninguna manera cambien ni se deformen. De esta manera podemos garantizar que la
informacin que se presenta al usuario ser siempre la misma."

Aislamiento: Esta propiedad asegura que una operacin no puede afectar a otras. Esto
asegura que la realizacin de dos transacciones sobre la misma informacin sean
independientes y no generen ningn tipo de error. Esta propiedad define cmo y cundo los
cambios producidos por una operacin se hacen visibles para las dems operaciones
concurrentes. El aislamiento puede alcanzarse en distintos niveles, siendo el parmetro
esencial a la hora de seleccionar SGBDs.

Durabilidad: (Persistencia). Esta propiedad asegura que una vez realizada la operacin, sta
persistir y no se podr deshacer aunque falle el sistema y que de esta forma los datos
sobrevivan de alguna manera.
Cumpliendo estos 4 requisitos un sistema gestor de bases de datos puede ser considerado ACID
Compliant.

Integridad Referencial

CONSTRAINT DESCRIPCION

NOT NULL Especifica que una columna no puede tener valor NULO.

UNIQUE No permite un valor duplicado en una columna. Se puede usar en varias columnas.

PRIMARY KEY Hace que un campo sea unico y crea un indice.

FOREIGN KEY Crea un enlace entre dos tablas a traves de un campo especifico de ambas tablas

CHECK Controla los valores en la columna asociada. Determina si el valor es valido o no


desde una expresin logica

DEFAULT Asigna un valor por DEFAULT a un campo al cual no se ha asignado valor.


Ejemplos:

CHECK

CREATE TABLE ALUMNOS (cdigo varchar(6), nombre varchar(50), eap varchar(3)


CHECK (eap=201 OR eap=202),
PRIMARY KEY (codigo)
)

UNIQUE(codigo) crea un ndice que almacena un solo valor, que no se puede repetir

CREATE TABLE ALUMNOS (cdigo varchar(6), nombre varchar(50), eap varchar(3)


UNIQUE (nombre),
PRIMARY KEY (codigo)
)

INDICES

CREATE TABLE cliente


( id_cliente INT NOT NULL,
nombre VARCHAR(30),
PRIMARY KEY (id_cliente)
) TYPE = INNODB;

CREATE TABLE venta


(
id_factura INT NOT NULL,
id_cliente INT NOT NULL,
cantidad INT,
PRIMARY KEY(id_factura),
INDEX (id_cliente),
FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente)
) TYPE = INNODB;

DDL Extendido
Crear una tabla a partir de una consulta:

CREATE nuevo as (SELECT codigo, edad FROM alumnos)

Actualizar una table desde un SELECT

1) UPDATE tabla1 aa
LEFT JOIN tabla2 bb ON aa.codigo = bb.codigo
SET aa.nombre = bb.nombre
2) UPDATE tabla1 aa, (SELECT * FROM tabla2) bb
SET aa.dato = bb.dato
WHERE aa.codigo = bb.codigo

Vaciar una tabla

TRUNCATE tabla1

Insertar registros de un Select

INSERT INTO Tabla1 SELECT * FROM TABLA2

INSERT INTO Tabla1(codigo, nombre)


SELECT cdigo, nombre from TABLA2 WHERE cdigo=1001

Eliminar registros desde un Select

DELETE FROM Tabla1 WHERE clave IN (SELECT cdigo FROM Tabla2)

Funciones de Sistema:
LENGTH Longitud de una cadena
CONCAT Concatenar Cadena
MAX Maximo
MIN Minimo
AVG Promedio
UPPER Convertir a Mayuscula
LOWER Convertir a Minuscula
SQRT
ROUND(dato, num_decimales)
RAND() Valor aleatorio entre 0 y 1
CURDATE() Fecha Actual
CURTIME() Hora Actual

LABORATORIO

Sistema de Registro Academico

Definicion de Reglas de Integridad Referencial

CHECK: Edad minima de alumno = 15 aos


Especificacion de llaves forneas
Especificacion de valores DEFAULT
Especificacion de reglas CHECK
Especificacion de creacin de INDICES / INDEX
DML Extendido

1. Uso de Alias en campos de nombres y tablas.

2. UNION
Select cdigo, nombres
From Tabla1
UNION
Select cdigo, nombres
From Tabla2

3. JOINS
LEFT JOIN
Select aa.codigo, aa.nombres, mm.nmb_curso
From alumno aa
Left join matricula mm on aa.codigo=mm.codigo

RIGHT JOIN
Select aa.codigo, aa.nombres, mm.nmb_curso
From alumno aa
Right join matricula mm on aa.codigo=mm.codigo

INNER JOIN
Select mm.cod_alu, pp.cod_cur
From matricula mm
Inner join cursos pp on aa.cod_cur = pp.cod_cur

OUTER JOIN
Select mm.cod_alu, pp.cod_cur
From matricula mm
Outer join cursos pp on aa.cod_cur = pp.cod_cur

En MySQL no es directamente compatible, pero se puede implementar con un


UNION

Select cod_cur
From matricula
UNION
Select cod_cur
From cursos
4. Uso de distinct
5. Creacion de Vistas
CREATE VIEW nombrevista AS
SELECT *
FROM TABLA1
LABORATORIO 05 SETIEMBRE

1. CREAR VISTA REPORTE CON LOS SIGUIENTES CAMPOS


Cdigo_alumno
Nombre_Curso
Credito_Curso

2. Usando la vista REPORTE crear la vista CONSOLIDADO, la cual muestra


Cdigo_alumno, Total_Creditos

3. Crear una tabla TEMPORAL que tenga informacin de los alumnos que llevan el curso de
Base de Datos 1 o Base de Datos2, los campos a considerar son:
Cdigo_alumno, nombre_alumno, Codigo_curso (Esta tabla se crea usando un select)

4. Usando JOIN implementar (escoger 2):


a) Cursos que no tienen alumnos matriculados
b) Alumnos que no tienen profesor asignado en alguno de sus cursos
c) Profesores sin carga academica
5. Realizar la siguiente consulta: cod_curso, total_alumnos, mximo_promediofinal

ENVIAR AL CORREO

jruben961@gmail.com
Asunto: Laboratorio BD2
Contenido: Nombres y Apellidos
Archivo con el SQL de las definiciones y CONSTRAINT