You are on page 1of 11
MySQL Motores BD InnoDB es un mecanismo de almacenamiento transaccional -con caracteristicas ACID- para MySQL. Esto aumenta la seguridad de los datos. Realiza bloqueo a nivel de filas y lecturas no bloqueantes MVCC tipo Oracle que aumentan la concurrencia y las prestaciones. InnoDB pertenece a Oracle Corporation, se distribuye bajo licencia GPL, pero también se licencia a empresas que la quieran incluir en su software. Sigue el modelo ACID con COMMIT, ROLLBACK y recuperacién de caidas. Bloquea a nivel de fila (tupla), y proporciona concurrencia multiusuario para lectura. Organiza los datos en disco para optimizar el uso de claves primarias. Mantiene la integridad de datos mediante restricciones FOREIGN KEY, que se aplican en INSERT, UPDATE y DELETE. MyISAM: Implementacién de MySQL del original ISAM. implementa el almacenamiento de datos de manera sencilla y robusta, y proporciona una alta velocidad de acceso y un tamajio pequefio de ficheros. El mecanismo MylSAM almacena cada tabla en tres ficheros: frm con el formato de la tabla -MYD con los datos -MYI con los indices Rapido pero con bajo control de integridad. Para crear la Base de datos podemos ejecutar: create database Restaurante; *No hay go. *El ; es obligatorio Para elegirla como Base de datos actual: *Los comentarios con deben llevar espacio detras use Restaurante; Podemos eliminar las tablas cuando existen mediante: drop table if exists DetalleComida; drop table if exists Comida; drop table if exists Mesa; drop table if exists Plato; drop table if exists TipoPlato; Para crear las tablas create table Mesa (CodMesa char(3) primary key); create table Plato (CodPlato integer primary key, Plato varchar(150) not null, Precio numeric (6,2) not null check(Precio >0), CodTipoPlato integer not null); create table TipoPlato (CodTipoPlato integer primary key, TipoPlato varchar(100) not null, Agrupa varchar(10) not null check(Agrupa in (‘Plato’,'Bebida’))); create table Comida (IdComida integer auto_increment primary key, -- cambiado identity a autoincrement Fecha datetime not null, CodMesa char(3) not null, Pagado char(1) not null check(Pagado in ('S','N')) ) engine=innodb default charset=utf8; . ses Permite especificar el quitado default('N') motor y el conjunto de caracteres create table DetalleComida {IdDetalle integer auto_increment primary key, -- cambiado identity a autoincrement IdComida integer not null, CodPlato integer not null, PrecioPlato numeric (6,2) not null check(PrecioPlato >0), Servido char(1) not null check(Servido in ('S','N’))); quitado default ('N') Lo permite en innodb Admite la sintaxis check pero no lo valida. También admite darle valor a la columna auto_increment insert into Comida values (8,'2012-02-19','A03',"X'); Para que genere el nimero hay que poner la lista de columnas insert into Comida (Fecha , CodMesa, Pagado) values ('2012-02-19','A03",'N'); Foreign key admite la sintaxis, pero no lo valida en el motor myisam. Si enm el Innodb. alter table Plato add constraint Fk_Plato_TipoPlato foreign key (CodTipoPlato) references TipoPlato(CodTipoPlato); alter table Comida add constraint Fk_Comida_Mesa foreign key (CodMesa) references Mesa(CodMesa); alter table DetalleComida add constraint Fk_Detallecomida_Comida foreign key (IdComida) references Comida(IdComida); alter table DetalleComida add constraint Fk_DetalleComida_Plato foreign key (CodPlato) references Plato(CodPlato); Insertar Datos insert into Mesa values ('A01'); insert into Mesa values ('A02’); insert into Mesa values ('A03'); insert into Mesa values ('A04'); El formato de un valor DATE es 'YYYY-MM-DD‘ De acuerdo al estandar SQL ningun otro formato se permite. Deberia usar este formato en las sentencias UPDATE y en la clausula WHERE de las sentencias SELECT. Ademis no necesita DECLARE para la variable que recibe el valor de la clave generada para Comida. insert into Comida (Fecha , CodMesa, Pagado) values ('2012-02-18','A01),'S'); set @identity =LAST_INSERT_ID(); insert into DetalleComida ( IdComida,CodPlato,PrecioPlato,Servido) values (@identity,0,1,'S'); insert into DetalleComida ( |dComida,CodPlato,PrecioPlato,Servido) values (@identity,0,1,'S'); insert into DetalleComida ( IdComida,CodPlato,PrecioPlato,Servido) values (@identity,0,1,'S'); insert into DetalleComida ( |dComida,CodPlato,PrecioPlato,Servido) values (@identity,2,9,'S'); insert into DetalleComida ( IdComida,CodPlato,PrecioPlato,Servido) values (@identity,5,12,'S'); insert into DetalleComida ( IdComida,CodPlato,PrecioPlato,Servido) values (@identity,9,6,'S'); Se mantiene idéntica la consulta con INNER JOIN select c.idcomida,c.fecha,c.codmesa,c.pagado, d.IdDetalle,d.IdComida,d.CodPlato,d.PrecioPlato,d.Se rvido, m.CodMesa, p.CodPlato,p.CodTipoPlato,p.Plato,p.Precio, t.CodTipoPlato,t.TipoPlato,t.Agrupa from comida as c inner join DetalleComida as d on c.ldComida=d.IdComida inner join Mesa as m on m.CodMesa=c.CodMesa inner join Plato as p on p.CodPlato=d.CodPlato inner join TipoPlato as t on t.CodTipoPlato=p.CodTipoPlato El formato de un valor DATE es 'YYYY-MM-DD‘ De acuerdo al estandar SQL ningtin otro formato se permite. Deberia usar este formato en las sentencias UPDATE y en la clausula WHERE de las sentencias SELECT. select p.Plato from comida as c inner join DetalleComida as d on c.ldComida=d.IdComida inner join Plato as p on p.CodPlato=d.CodPlato where c.Fecha='2012-02-19' group by p.plato

You might also like