Documente Academic
Documente Profesional
Documente Cultură
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
ENUM
///usando check
CREATE TABLE parts (
part_no VARCHAR(18) PRIMARY KEY,
description VARCHAR(40),
cost DECIMAL(10,2 ) NOT NULL CHECK (cost >= 0),
price DECIMAL(10,2) NOT NULL CHECK (price >= 0),
CONSTRAINT parts_chk_price_gt_cost
CHECK(price >= cost)
);
// para ver como se crea la tabla
show create table parts;
// probando la restriccion
INSERT INTO parts(part_no, description,cost,price)
VALUES('A‐001','Cooler',0,‐100);
// otra prueba
INSERT INTO parts(part_no, description,cost,price)
VALUES('A‐001','Cooler',200,100);
//fecha con valor por default
fecha_dos TIMESTAMP DEFAULT CURRENT_TIMESTAMP
//agregar un atributo
ALTER TABLE `mitabla` ADD `fecha` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
//UNIQUE
CREATE TABLE suppliers (
supplier_id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
phone VARCHAR(15) NOT NULL UNIQUE,
address VARCHAR(255) NOT NULL,
PRIMARY KEY (supplier_id),
CONSTRAINT uc_name_address UNIQUE (name , address)
);
//AGREGANDO CONSTRAINT UNIQUE
ALTER TABLE suppliers
ADD CONSTRAINT uc_name_address
UNIQUE (name,address);
//USANDO ENUM
//POR DEFECTO SE GUARDA EL PRIMER VALOR DE LA LISTA ENUM
create table postulantes(
numero int unsigned auto_increment,
documento char(8),
nombre varchar(30),
sexo char(1),
estudios enum('ninguno','primario','secundario', 'terciario','universitario') not null,
primary key(numero)
);
//USANDO SET
// CUANDO QUEREMOS ALMACENAR VARIAS OPCIONES
Tampoco importa si se repite algún valor, cada elemento repetido, se ignora y se guarda una vez y
en el orden que ha sido definido:
Si ingresamos un valor que no está en la lista "set", se ignora y se almacena una cadena vacía:
create table postulantes(
numero int unsigned auto_increment,
documento char(8),
nombre varchar(30),
idioma set('ingles','italiano','portuges'),
primary key(numero)
);
On delete on update
En este primer ejercicio no se van a aplicar las opciones CASCADE para visualizar el error que
nos devolverá cuando queramos manipular la información.
CREATE TABLE IF NOT EXISTS `CASCADE`.`CLIENTES` (
`dni` INT NOT NULL COMMENT '',
`nombre` VARCHAR(45) NOT NULL COMMENT '',
PRIMARY KEY (`dni`) COMMENT '')
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `CASCADE`.`CUENTAS`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `CASCADE`.`CUENTAS` ;
CREATE TABLE IF NOT EXISTS `CASCADE`.`CUENTAS` (
`id_cuenta` INT NOT NULL COMMENT '',
`saldo` FLOAT NOT NULL COMMENT '',
`CLIENTES_dni` INT NOT NULL COMMENT '',
PRIMARY KEY (`id_cuenta`) COMMENT '',
INDEX `fk_CUENTAS_CLIENTES1_idx` (`CLIENTES_dni` ASC) COMMENT '',
CONSTRAINT `fk_CUENTAS_CLIENTES1`
FOREIGN KEY (`CLIENTES_dni`)
REFERENCES `CASCADE`.`CLIENTES` (`dni`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `CASCADE`.`COMPRAS`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `CASCADE`.`COMPRAS` ;
CREATE TABLE IF NOT EXISTS `CASCADE`.`COMPRAS` (
`idcompra` INT NOT NULL COMMENT '',
`articulo` VARCHAR(45) NOT NULL COMMENT '',
`precio` FLOAT NOT NULL COMMENT '',
`CUENTAS_id_cuenta` INT NOT NULL COMMENT '',
PRIMARY KEY (`idcompra`) COMMENT '',
INDEX `fk_COMPRAS_CUENTAS_idx` (`CUENTAS_id_cuenta` ASC) COMMENT '',
CONSTRAINT `fk_COMPRAS_CUENTAS`
FOREIGN KEY (`CUENTAS_id_cuenta`)
REFERENCES `CASCADE`.`CUENTAS` (`id_cuenta`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
En cuentas
REFERENCES `CASCADE`.`CLIENTES` (`dni`)
ON DELETE CASCADE
ON UPDATE CASCADE)
En compras
REFERENCES `CASCADE`.`CUENTAS` (`id_cuenta`)
ON DELETE CASCADE
ON UPDATE CASCADE)
Ahora si elimnamos un cliente se eliminan sus cuentas y sus compras…..