Está en la página 1de 15

INDEX,

CONSTRAINT,
JOIN
DROP DATABASE IF EXISTS Tienda;
CREATE DATABASE Tienda DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE Tienda;

-- -----------------------------------------------------
-- Table `Tienda`.`Fabricante`
-- -----------------------------------------------------
CREATE TABLE Fabricante(CodFabricante INT NOT NULL AUTO_INCREMENT,
nombreFabricante VARCHAR(45) NOT NULL ,
PRIMARY KEY (CodFabricante))ENGINE = InnoDB;

INSERT INTO Fabricante VALUES (1, 'Kingston'),


(2, 'Adata'),
(3, 'Logitech'),
(4, 'Lexar'),
(5, 'Seagate');
-- -----------------------------------------------------
-- Table `Tienda`.`Articulo`
-- -----------------------------------------------------
CREATE TABLE Articulo (CodArticulo INT NOT NULL AUTO_INCREMENT ,
nombreArticulo VARCHAR(45) NOT NULL ,
precio INT NOT NULL,
PRIMARY KEY (`CodArticulo`))ENGINE = InnoDB;

INSERT INTO Articulo VALUES (1 , 'Teclado' , 180),


(2 , 'Disco duro 300 Gb' , 550),
(3 , 'Mouse' , 220),
(4 , 'Memoria USB' , 230),
(5 , 'Memoria RAM' , 285),
(6 , 'Disco Duro extraible 250Gb‘ , 657),
(7 , 'Memoria USB' , 729),
(8 , 'DVD Rom' , 257),
(9 , 'CD Rom' , 450),
(10 , 'Tarjeta de red' , 990);
CREATE TABLE FabricanteArticulo (`CodFabricante` INT, CodArticulo INT,
CONSTRAINT `CodFabricante`
FOREIGN KEY (`CodFabricante`)
REFERENCES `Tienda`.`Fabricante` (`CodFabricante`)
ON DELETE CASCADE
ON UPDATE CASCADE,

CONSTRAINT `CodArticulo`
FOREIGN KEY (`CodArticulo`)
REFERENCES `Tienda`.`Articulo` (`CodArticulo`)
ON DELETE CASCADE
ON UPDATE CASCADE)ENGINE = InnoDB;
INSERT INTO FabricanteArticulo VALUES (5, 3),
(4, 4),
(2, 5),
(2, 6),
(1, 7),
(4, 8),
(3, 9),
(2,10),
(1, 1),
(5, 2);
Index
Los índices en MySQL permiten localizar y devolver registros
de una forma sencilla y rápida. Son especialmente útiles cuando
queremos buscar elementos de entre los millones y hasta
billones de registros que puede contener una tabla en un
momento dado.
En un indice puedes tener valores repetidos sin problemas, lo
ideal es que los campos que son indexados sean con valores
muy variables para evitar que se pierda el objetivo de un indice
(por ejemplo si indexas un nombre seria alfabeticamente y
cuando buscas algo con G se iria a la seccion correspondiente
ignorando todos los que estan delante
Index
Un índice común se crea con "index", los valores no necesariamente son
únicos y aceptan valores "null". Puede haber varios por tabla.
CREATE TABLE libros ( codigo INT UNSIGNED AUTO_INCREMENT,
titulo VARCHAR(40) NOT NULL, autor VARCHAR(30),
editorial VARCHAR(15), PRIMARY KEY(codigo),
INDEX id_editorial (editorial));

CREATE TABLE libros(codigo INT UNSIGNED AUTO_INCREMENT,


titulo VARCHAR(40) NOT NULL, autor VARCHAR(30),
editorial VARCHAR(15),
INDEX i_tituloEditorial (titulo, editorial));

NOTA: existe una tabla llamada editorial con los atributos id_Editorial, titulo, editorial
Index
ALTER TABLE `tienda`.`articulo`
ADD COLUMN `Cod_Fabricante` INT(11) AFTER `precio`,
ADD INDEX `codFabricante_idx` (`cod_Fabricante` ASC);
Indices asociados a las
restricciones
”CONSTRAINT”
Cuando se establece una restriccion de clave externa, debe existir un índice en la
tabla principal para el campo (o campos) referenciado. En el ejemplo, la tabla
principal es la tabla ‘clientes’, y el campo referenciado es el campo ‘id’. Como este
campo es la clave primaria de la tabla, en este caso no es necesario crear
explícitamente un índice.
Por otra parte, también debe existir un índice en la tabla dependiente para los
campos que hacen referencia a campos de la tabla principal. Si no existía
previamente, se crea. Así, si examinamos la definición de la tabla ‘pedidos’ después
de haber creado la restricción:
Índices asociados a las
restricciones
”CONSTRAINT”

CREATE TABLE `pedidos` ( `id` INT(11) NOT NULL, `idcliente` iNT(11) NOT NULL,
`idproducto` INT(11) NOT NULL, PRIMARY KEY (`id`),
KEY `idcliente` (`idcliente`),
CONSTRAINT `pedidos_ibfk_1`
FOREIGN KEY (`idcliente`)
REFERENCES `clientes` (`id`)) ENGINE=InnoDB;

NOTA: "INDEX" es sinónimo de "KEY"


Índices asociados a las
restricciones
”CONSTRAINT”

ALTER TABLE `tienda`.`articulo`


ADD CONSTRAINT `cod_Fabricante`
FOREIGN KEY (`cod_Fabricante`)
REFERENCES `tienda`.`Fabricante` (`CodFabricante`)
ON DELETE CASCADE
ON UPDATE CASCADE;

NOTA: "INDEX" es sinónimo de "KEY"


Insertar Datos de otra tabla
ALTER TABLE `tienda`.`articulo`
ADD COLUMN `Cod_Fabricante` INT(11) AFTER `precio`,
ADD INDEX `codFabricante_idx` (`cod_Fabricante` ASC);

La instrucción SQL JOIN (unión) se utiliza para combinar dos o más tablas, tomando un
campo común de las dos
UPDATE articulo
JOIN fabricantearticulo
ON articulo.CodArticulo = fabricanteArticulo.CodArticulo
SET articulo.Cod_Fabricante = fabricantearticulo.CodFabricante;
SELECT *
FROM Fabricante, articulo
WHERE articulo.Cod_Fabricante = Fabricante.Codfabricante;
CREATE TABLE CLIENTE (
CodigoCliente INT(11) NOT NULL AUTO_INCREMENT,
Nombre VARCHAR(25) NOT NULL,
Apellido VARCHAR(25) NOT NULL,
FechaNac DATE NOT NULL,
PRIMARY KEY (`CodigoCliente`) )ENGINE = InnoDB;

CREATE TABLE CLIENTE_has_PRODUCTO` ( `


Cod_Cliente INT(11) NOT NULL,
Cod_Producto INT(11) NOT NULL,
PRIMARY KEY (Cod_Cliente, Cod_Producto) ,
INDEX fk_Cod_Cliente_idx (Cod_Producto ASC) ,
INDEX fk_Cod_Producto_idx (Cod_Cliente ASC) ,
CONSTRAINT `fk_Cod_Cliente` FOREIGN KEY (Cod_Cliente)
REFERENCES EjercicioMR.CLIENTE (CodigoCliente)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_Cod_Producto FOREIGN KEY (Cod_Producto)
REFERENCES EjercicioMR.PRODUCTO (CodigoProducto)
ON DELETE CASCADE ON UPDATE CASCADE)ENGINE = InnoDB;
CREATE TABLE PROVEEDOR (
CodigoProveedor INT(11) NOT NULL AUTO_INCREMENT,
NombreProveedor VARCHAR(50) NOT NULL,
Direccion TINYTEXT NOT NULL,
PRIMARY KEY (CodigoProveedor) )ENGINE = InnoDB;
CREATE TABLE PRODUCTO (
CodigoProducto` INT(11) NOT NULL AUTO_INCREMENT,
NombreProducto` VARCHAR(45) NOT NULL,
Descripcion` VARCHAR(45) NOT NULL,
Precio` DOUBLE NOT NULL,
Cod_Proveedor` INT(11) NOT NULL,
PRIMARY KEY (`CodigoProducto`) ,
INDEX `Cod_Proveedor_idx` (`Cod_Proveedor` ASC) ,
CONSTRAINT `Cod_Proveedor`
FOREIGN KEY (`Cod_Proveedor`)
REFERENCES PROVEEDOR (`CodigoProveedor`)
ON DELETE CASCADE ON UPDATE CASCADE)ENGINE = InnoDB;

También podría gustarte