Загрузка данных
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`Client`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Client` (
`id_client` INT NOT NULL AUTO_INCREMENT,
`pasport` VARCHAR(45) NULL,
PRIMARY KEY (`id_client`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Category`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Category` (
`id_category` INT NOT NULL AUTO_INCREMENT,
`name_device` VARCHAR(45) NULL,
PRIMARY KEY (`id_category`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Device`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Device` (
`id_device` INT NOT NULL AUTO_INCREMENT,
`id_inventory` VARCHAR(45) NULL,
`id_category_device` INT NULL,
`name` VARCHAR(45) NULL,
`cost` DECIMAL(10,2) NULL,
`status` VARCHAR(45) NULL,
PRIMARY KEY (`id_device`),
INDEX `id_category_idx` (`id_category_device` ASC) VISIBLE,
CONSTRAINT `id_category`
FOREIGN KEY (`id_category_device`)
REFERENCES `mydb`.`Category` (`id_category`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Zakazi`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Zakazi` (
`id_zakazi` INT NOT NULL AUTO_INCREMENT,
`data_vidachi` DATETIME NULL,
`data_vozvrata` DATETIME NULL,
`id_client_zakazi` INT NULL,
`payment` DECIMAL(10,2) NULL,
`id_device_topay` INT NULL,
PRIMARY KEY (`id_zakazi`),
INDEX `id_client_idx` (`id_client_zakazi` ASC) VISIBLE,
INDEX `id_device_to_client_idx` (`id_device_topay` ASC) VISIBLE,
CONSTRAINT `id_client`
FOREIGN KEY (`id_client_zakazi`)
REFERENCES `mydb`.`Client` (`id_client`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `id_device_to_client`
FOREIGN KEY (`id_device_topay`)
REFERENCES `mydb`.`Device` (`id_device`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Create view session_not_vozvrat as
Select
pasport,
id_inventory,
`name`,
data_vidachi,
payment,
TIMESTAMPDIFF(HOUR, z.data_vidachi, NOW()) AS hours_in_use
from zakazi z
join device d on d.id_device = z.id_device_topay
left join client c on c.id_client = z.id_client_zakazi
left join category ct on ct.id_category = d.id_category_device
where name_device = 'Высокое напряжение'
and payment = 'не оплачено'
and data_vozvrata is null;
Select * from session_not_vozvrat;
DELIMITER //
CREATE TRIGGER update_device_status_on_return
AFTER UPDATE ON Zakazi
FOR EACH ROW
BEGIN
IF NEW.data_vozvrata IS NOT NULL THEN
UPDATE Device d
JOIN Category c ON c.id_category = d.id_category_device
SET d.status = CASE
WHEN c.name_device = 'Высокое напряжение' THEN 'разрядка'
ELSE 'доступен'
END
WHERE d.id_device = NEW.id_device_topay;
END IF;
END //
DELIMITER ;