NRPC/nrpc_db/reserve/pc_parts_new 20210513 2327.sql
2021-06-28 01:45:20 +03:00

768 lines
No EOL
18 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--
-- Скрипт сгенерирован Devart dbForge Studio 2019 for MySQL, Версия 8.1.22.0
-- Домашняя страница продукта: http://www.devart.com/ru/dbforge/mysql/studio
-- Дата скрипта: 13.05.2021 23:27:33
-- Версия сервера: 5.7.25
-- Версия клиента: 4.1
--
--
-- Отключение внешних ключей
--
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
--
-- Установить режим SQL (SQL mode)
--
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
--
-- Установка кодировки, с использованием которой клиент будет посылать запросы на сервер
--
SET NAMES 'utf8';
--
-- Удалить функцию `addNewUser`
--
DROP FUNCTION IF EXISTS addNewUser;
--
-- Удалить функцию `handleLogin`
--
DROP FUNCTION IF EXISTS handleLogin;
--
-- Удалить функцию `isUserAdmin`
--
DROP FUNCTION IF EXISTS isUserAdmin;
--
-- Удалить таблицу `ord`
--
DROP TABLE IF EXISTS ord;
--
-- Удалить процедуру `partStock`
--
DROP PROCEDURE IF EXISTS partStock;
--
-- Удалить функцию `addNewOrd`
--
DROP FUNCTION IF EXISTS addNewOrd;
--
-- Удалить функцию `addNewPart`
--
DROP FUNCTION IF EXISTS addNewPart;
--
-- Удалить функцию `modifySupply`
--
DROP FUNCTION IF EXISTS modifySupply;
--
-- Удалить таблицу `part_shop`
--
DROP TABLE IF EXISTS part_shop;
--
-- Удалить таблицу `shop`
--
DROP TABLE IF EXISTS shop;
--
-- Удалить процедуру `partInfo`
--
DROP PROCEDURE IF EXISTS partInfo;
--
-- Удалить функцию `modifyPart`
--
DROP FUNCTION IF EXISTS modifyPart;
--
-- Удалить таблицу `part`
--
DROP TABLE IF EXISTS part;
--
-- Удалить процедуру `selectParts`
--
DROP PROCEDURE IF EXISTS selectParts;
--
-- Удалить таблицу `category`
--
DROP TABLE IF EXISTS category;
--
-- Удалить таблицу `order_info`
--
DROP TABLE IF EXISTS order_info;
--
-- Удалить таблицу `status`
--
DROP TABLE IF EXISTS status;
--
-- Удалить таблицу `user`
--
DROP TABLE IF EXISTS user;
--
-- Удалить таблицу `supplier`
--
DROP TABLE IF EXISTS supplier;
--
-- Создать таблицу `supplier`
--
CREATE TABLE supplier (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
address varchar(255) NOT NULL,
phone varchar(255) NOT NULL,
email varchar(255) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 3,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `name` для объекта типа таблица `supplier`
--
ALTER TABLE supplier
ADD UNIQUE INDEX name (name);
--
-- Создать таблицу `user`
--
CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT,
login varchar(255) NOT NULL,
password varchar(255) NOT NULL,
name varchar(255) NOT NULL,
surname varchar(255) NOT NULL,
phone bigint(12) NOT NULL,
email varchar(50) NOT NULL,
address varchar(255) NOT NULL,
is_admin tinyint(1) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 11,
AVG_ROW_LENGTH = 1820,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `email` для объекта типа таблица `user`
--
ALTER TABLE user
ADD UNIQUE INDEX email (email);
--
-- Создать индекс `login` для объекта типа таблица `user`
--
ALTER TABLE user
ADD UNIQUE INDEX login (login);
--
-- Создать индекс `phone` для объекта типа таблица `user`
--
ALTER TABLE user
ADD UNIQUE INDEX phone (phone);
--
-- Создать таблицу `status`
--
CREATE TABLE status (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 4,
AVG_ROW_LENGTH = 8192,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `name` для объекта типа таблица `status`
--
ALTER TABLE status
ADD UNIQUE INDEX name (name);
--
-- Создать таблицу `order_info`
--
CREATE TABLE order_info (
id int(11) NOT NULL AUTO_INCREMENT,
id_user int(11) NOT NULL,
id_status int(11) NOT NULL,
date datetime NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 4,
AVG_ROW_LENGTH = 16384,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать внешний ключ
--
ALTER TABLE order_info
ADD CONSTRAINT FK_ord_status_id FOREIGN KEY (id_status)
REFERENCES status (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Создать внешний ключ
--
ALTER TABLE order_info
ADD CONSTRAINT FK_ord_user_id FOREIGN KEY (id_user)
REFERENCES user (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Создать таблицу `category`
--
CREATE TABLE category (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 8,
AVG_ROW_LENGTH = 2340,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `name` для объекта типа таблица `category`
--
ALTER TABLE category
ADD UNIQUE INDEX name (name);
DELIMITER $$
--
-- Создать процедуру `selectParts`
--
CREATE PROCEDURE selectParts (upc varchar(255) CHARSET utf8, name varchar(255) CHARSET utf8, price_bottom dec(19, 2), price_upper dec(19, 2), categorys varchar(255) CHARSET utf8, suppliers varchar(255) CHARSET utf8)
BEGIN
SELECT
p.id,
p.upc,
p.name,
p.price,
c.id AS 'category',
s.id AS 'supplier'
FROM part p
JOIN category c
ON p.id_category = c.id
JOIN supplier s
ON p.id_supplier = s.id
WHERE (upc = ''
OR upc IS NULL
OR p.upc LIKE CONCAT('%', upc, '%'))
AND (name = ''
OR name IS NULL
OR p.name LIKE CONCAT('%', NAME, '%'))
AND (p.price >= price_bottom
AND p.price <= price_upper)
AND (categorys = ''
OR categorys IS NULL
OR categorys LIKE CONCAT('%', CONVERT(p.id_category, char), '%'))
AND (suppliers = ''
OR suppliers IS NULL
OR suppliers LIKE CONCAT('%', CONVERT(p.id_supplier, char), '%'));
END
$$
DELIMITER ;
--
-- Создать таблицу `part`
--
CREATE TABLE part (
id int(11) NOT NULL AUTO_INCREMENT,
upc varchar(255) NOT NULL,
name varchar(255) NOT NULL,
price decimal(19, 2) NOT NULL,
id_category int(11) NOT NULL,
id_supplier int(11) NOT NULL,
description text DEFAULT NULL,
image varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 22,
AVG_ROW_LENGTH = 2340,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `upc` для объекта типа таблица `part`
--
ALTER TABLE part
ADD UNIQUE INDEX upc (upc);
--
-- Создать внешний ключ
--
ALTER TABLE part
ADD CONSTRAINT FK_part_category_id FOREIGN KEY (id_category)
REFERENCES category (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Создать внешний ключ
--
ALTER TABLE part
ADD CONSTRAINT FK_part_supplier_id FOREIGN KEY (id_supplier)
REFERENCES supplier (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
DELIMITER $$
--
-- Создать функцию `modifyPart`
--
CREATE FUNCTION modifyPart (id int, upc varchar(255) CHARSET utf8, name varchar(255) CHARSET utf8, price dec(19, 2), category_id varchar(255) CHARSET utf8, supplier_id varchar(255) CHARSET utf8)
RETURNS int(11)
BEGIN
UPDATE part p
SET p.upc = upc,
p.name = name,
p.price = price,
p.id_category = category_id,
p.id_supplier = supplier_id
WHERE p.id = id;
RETURN 1;
END
$$
--
-- Создать процедуру `partInfo`
--
CREATE PROCEDURE partInfo (id int)
BEGIN
SELECT
p.upc,
p.name,
p.price,
c.name AS 'category',
s.name AS 'supplier',
p.description,
p.image
FROM part p
JOIN category c
ON p.id_category = c.id
JOIN supplier s
ON p.id_supplier = s.id
WHERE p.id = id;
END
$$
DELIMITER ;
--
-- Создать таблицу `shop`
--
CREATE TABLE shop (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
address varchar(255) NOT NULL,
phone varchar(255) NOT NULL,
email varchar(255) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 3,
AVG_ROW_LENGTH = 8192,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `UK_shop` для объекта типа таблица `shop`
--
ALTER TABLE shop
ADD UNIQUE INDEX UK_shop (name, address);
--
-- Создать таблицу `part_shop`
--
CREATE TABLE part_shop (
id int(11) NOT NULL AUTO_INCREMENT,
id_part int(11) NOT NULL,
id_shop int(11) NOT NULL,
count int(11) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 15,
AVG_ROW_LENGTH = 2048,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `UK_stock` для объекта типа таблица `part_shop`
--
ALTER TABLE part_shop
ADD UNIQUE INDEX UK_stock (id_part, id_shop);
--
-- Создать внешний ключ
--
ALTER TABLE part_shop
ADD CONSTRAINT FK_part_shop_shop_id FOREIGN KEY (id_shop)
REFERENCES shop (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Создать внешний ключ
--
ALTER TABLE part_shop
ADD CONSTRAINT FK_stock_part_id FOREIGN KEY (id_part)
REFERENCES part (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
DELIMITER $$
--
-- Создать функцию `modifySupply`
--
CREATE FUNCTION modifySupply (part_id int, shop_id int, supply int)
RETURNS int(11)
BEGIN
UPDATE part_shop ps
SET ps.count = ps.count + supply
WHERE ps.id_part = part_id
AND ps.id_shop = shop_id;
RETURN 1;
END
$$
--
-- Создать функцию `addNewPart`
--
CREATE FUNCTION addNewPart (upc varchar(255) CHARSET utf8, name varchar(255) CHARSET utf8, price dec(19, 2), category_id int, supplier_id int)
RETURNS int(11)
BEGIN
DECLARE part_id int;
DECLARE shop_id int;
DECLARE n int;
DECLARE i int;
INSERT IGNORE INTO part
VALUES (NULL, upc, name, price, category_id, supplier_id);
SELECT
LAST_INSERT_ID() INTO part_id;
SELECT
COUNT(*)
FROM shop s INTO n;
SET i = 1;
WHILE i <= n DO
INSERT IGNORE INTO part_shop
VALUES (NULL, part_id, i, 0);
SET i = i + 1;
END WHILE;
RETURN 1;
END
$$
--
-- Создать функцию `addNewOrd`
--
CREATE FUNCTION addNewOrd (user_id int, part_id int, shop_id int, ord_count int)
RETURNS int(11)
BEGIN
DECLARE order_info_id int;
DECLARE part_shop_id int;
DECLARE part_count int;
SELECT
ps.id,
ps.count INTO part_shop_id, part_count
FROM part_shop ps
WHERE ps.id_part = part_id
AND ps.id_shop = shop_id;
IF (part_count < ord_count) THEN
RETURN 0;
END IF;
INSERT IGNORE INTO order_info
VALUES (NULL, user_id, 1, CURDATE());
SELECT
LAST_INSERT_ID() INTO order_info_id;
UPDATE part_shop ps
SET ps.count = ps.count - ord_count
WHERE ps.id = part_shop_id;
INSERT IGNORE INTO ord
VALUE (NULL, order_info_id, part_shop_id, ord_count);
RETURN 1;
END
$$
--
-- Создать процедуру `partStock`
--
CREATE PROCEDURE partStock (id int)
BEGIN
SELECT
s.name,
ps.count
FROM part p
JOIN part_shop ps
ON p.id = ps.id_part
JOIN shop s
ON ps.id_shop = s.id
WHERE ps.id_part = id;
END
$$
DELIMITER ;
--
-- Создать таблицу `ord`
--
CREATE TABLE ord (
id int(11) NOT NULL AUTO_INCREMENT,
id_order_info int(11) NOT NULL,
id_part_shop int(11) NOT NULL,
count int(11) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 2,
CHARACTER SET utf8,
COLLATE utf8_general_ci;
--
-- Создать индекс `FK_ord_parts_ord_id` для объекта типа таблица `ord`
--
ALTER TABLE ord
ADD INDEX FK_ord_parts_ord_id (id_order_info);
--
-- Создать индекс `FK_ord_parts_part_id` для объекта типа таблица `ord`
--
ALTER TABLE ord
ADD INDEX FK_ord_parts_part_id (id_part_shop);
--
-- Создать индекс `UK_ord` для объекта типа таблица `ord`
--
ALTER TABLE ord
ADD UNIQUE INDEX UK_ord (id_order_info, id_part_shop);
--
-- Создать внешний ключ
--
ALTER TABLE ord
ADD CONSTRAINT FK_ord_order_info_id FOREIGN KEY (id_order_info)
REFERENCES order_info (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
--
-- Создать внешний ключ
--
ALTER TABLE ord
ADD CONSTRAINT FK_ord_part_shop_id FOREIGN KEY (id_part_shop)
REFERENCES part_shop (id) ON DELETE NO ACTION ON UPDATE NO ACTION;
DELIMITER $$
--
-- Создать функцию `isUserAdmin`
--
CREATE FUNCTION isUserAdmin (login varchar(255) CHARSET utf8)
RETURNS tinyint(1)
BEGIN
DECLARE is_user_admin bool;
SELECT
is_admin INTO is_user_admin
FROM user u
WHERE u.login = login;
RETURN is_user_admin;
END
$$
--
-- Создать функцию `handleLogin`
--
CREATE FUNCTION handleLogin (login varchar(255) CHARSET utf8, password varchar(255) CHARSET utf8)
RETURNS int(11)
BEGIN
DECLARE existing_users int;
SELECT
COUNT(*) INTO existing_users
FROM user u
WHERE u.login = login
AND u.PASSWORD = password;
IF (existing_users > 0) THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END
$$
--
-- Создать функцию `addNewUser`
--
CREATE FUNCTION addNewUser (login varchar(255) CHARSET utf8, password varchar(255) CHARSET utf8, name varchar(255) CHARSET utf8, surname varchar(255) CHARSET utf8, phone varchar(255) CHARSET utf8, email varchar(255) CHARSET utf8, address varchar(255) CHARSET utf8)
RETURNS int(11)
BEGIN
DECLARE loginCount int;
DECLARE phoneCount int;
DECLARE emailCount int;
SELECT
COUNT(*) INTO loginCount
FROM user u
WHERE u.login = login;
IF (loginCount > 0) THEN
RETURN 0;
END IF;
SELECT
COUNT(*) INTO phoneCount
FROM user u
WHERE u.phone = phone;
IF (phoneCount > 0) THEN
RETURN 1;
END IF;
SELECT
COUNT(*) INTO emailCount
FROM user u
WHERE u.email = email;
IF (emailCount > 0) THEN
RETURN 2;
END IF;
INSERT IGNORE INTO user
VALUES (NULL, login, password, name, surname, phone, email, address, 0);
RETURN 3;
END
$$
DELIMITER ;
--
-- Вывод данных для таблицы supplier
--
INSERT INTO supplier VALUES
(1, 'Compart', 'ул. Гидротехников, д. 155', '+7 (911) 324-03-22', 'office@comp.ru'),
(2, 'WalrusTorg', 'ул. Пролетарская, д. 154', '+7 (905) 259-21-89', 'office@waltorg.ru');
--
-- Вывод данных для таблицы category
--
INSERT INTO category VALUES
(5, 'Блок питания'),
(2, 'Видеокарта'),
(7, 'Жесткий диск'),
(6, 'Корпус'),
(4, 'Материнская плата'),
(3, 'Оперативная память'),
(1, 'Процессор');
--
-- Вывод данных для таблицы shop
--
INSERT INTO shop VALUES
(1, 'Магазин в ТК Алоха', 'ул. Тютчевская, д. 2', '+7 (932) 139-73-10', 'tutchevskaya15@novparts.ru'),
(2, 'Магазин у ст. м. Чёрная речка', 'ул. Савушкина, д. 56', '+7 (924) 098-32-12', 'savushkina56@novparts.ru');
--
-- Вывод данных для таблицы part
--
INSERT INTO part VALUES
(15, '75764839123', 'AMD Ryzen 5 3600 OEM', 15990.99, 1, 2, NULL, NULL),
(16, '321981321321', 'Gigabyte GeForce GTX 1050Ti', 15990.99, 2, 2, NULL, NULL),
(17, '123453289123', 'Palit Gaming Pro GeForce RTX 3070', 119000.99, 2, 1, NULL, NULL),
(18, '987654321321', 'MSI X470 AM4 Gaming Plus Max', 7990.99, 4, 2, NULL, NULL),
(19, '541269041211', 'norm', 1999.99, 7, 1, NULL, NULL),
(20, '123456543214', 'eee', 199.12, 4, 2, NULL, NULL),
(21, '999999999999', 'test', 1234.99, 4, 1, NULL, NULL);
--
-- Вывод данных для таблицы user
--
INSERT INTO user VALUES
(1, 'erius', 'Roge2003', 'Егор', 'Капралов', 89052592189, 'egor_kapralov2003@mail.ru', 'ул. Рогожский Поселок, д. 113', 1),
(2, 'WalrusYT', 'LubluMamy2003', 'Илья', 'Тат', 89630899425, 'taytsev@mail.ru', 'ул. Дружбы, д. 7', 0),
(3, 'arcwarden', 'pudgemom', 'Стэко', 'Слэйв', 89577366567, 'xrenxrenxrenxren@mail.ru', 'ул. Ращупкина, д. 21', 0),
(4, 'pupkin', 'vasya123', 'Вася', 'Пупкин', 89113451232, 'vasya_pupkin@mail.ru', 'ул. Ясеневая, д. 77', 0),
(5, 'erius1', 'wasd123', 'egor', 'karpov', 89052592169, 'wasd@mail.ru', 'ул. Пушкина, д. 1', 0),
(6, 'black', 'bigpig', 'слэкос', 'на бабках', 822813371488, 'xrenxrenxrenxren@yandex.dot', 'не скажу', 0),
(7, 'ernest', 'wasd', 'Ерог', 'Карпов', 89052592117, 'egor_kapralov1993@mail.ru', 'нет', 0),
(9, 'elka', '123', 'Елена', 'Комарова', 1111111111, 'ekom@yandex.ru', 'не скажу', 0),
(10, 'erius123', 'wasd', 'Егор', 'Капралов', 8888888888, 'egor_kapralov321312@mail.ru', 'не скажу', 0);
--
-- Вывод данных для таблицы status
--
INSERT INTO status VALUES
(2, 'Можно забрать'),
(1, 'Ожидает прибытия'),
(3, 'Отменен');
--
-- Вывод данных для таблицы part_shop
--
INSERT INTO part_shop VALUES
(1, 15, 1, 0),
(2, 15, 2, 0),
(3, 16, 1, 8),
(4, 16, 2, 0),
(5, 17, 1, 0),
(6, 17, 2, 0),
(7, 18, 1, 0),
(8, 18, 2, 0),
(9, 19, 1, 0),
(10, 19, 2, 0),
(11, 20, 1, 0),
(12, 20, 2, 0),
(13, 21, 1, 0),
(14, 21, 2, 0);
--
-- Вывод данных для таблицы order_info
--
INSERT INTO order_info VALUES
(3, 1, 1, '2021-04-07 00:00:00');
--
-- Вывод данных для таблицы ord
--
INSERT INTO ord VALUES
(1, 3, 3, 2);
--
-- Восстановить предыдущий режим SQL (SQL mode)
--
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
--
-- Включение внешних ключей
--
/*!40014 SET FOREIGN_KEY_CHECKS = @OLD_FOREIGN_KEY_CHECKS */;