parent
d3542313c3
commit
5bd577b396
@ -0,0 +1,305 @@
|
||||
create table drugs (
|
||||
drug_id int not null auto_increment,
|
||||
class_id int not null,
|
||||
class_name varchar(128) null,
|
||||
drug_name varchar(128) not null,
|
||||
efficacy TEXT null,
|
||||
price decimal(10, 2) null,
|
||||
validity int null,
|
||||
inventory int null,
|
||||
is_deleted tinyint(4) null default 0,
|
||||
create_time datetime default now(),
|
||||
update_time datetime default now(),
|
||||
primary key (drug_id),
|
||||
foreign key (class_id) references drug_classification(class_id),
|
||||
index class_id_index (class_id asc)
|
||||
) engine = innodb default charset = utf8mb4;
|
||||
|
||||
create table users (
|
||||
user_id int not null auto_increment,
|
||||
user_name varchar(128) not null,
|
||||
password varchar(128) not null,
|
||||
identity tinyint(4) not null,
|
||||
is_deleted tinyint(4) not null default 0,
|
||||
create_time datetime default now(),
|
||||
update_time datetime default now(),
|
||||
primary key (user_id),
|
||||
unique index user_name_UNIQUE (user_name asc)
|
||||
)engine = innodb default character set = utf8mb4;
|
||||
|
||||
create table orders (
|
||||
order_id int not null auto_increment,
|
||||
user_id int not null,
|
||||
consignee varchar(128) null,
|
||||
tele varchar(11) null,
|
||||
address varchar(128) null,
|
||||
total_amount decimal(10, 2) null,
|
||||
order_status varchar(128) default 0,
|
||||
is_deleted tinyint(4) not null default 0,
|
||||
create_time datetime default now(),
|
||||
update_time datetime default now(),
|
||||
primary key (order_id),
|
||||
foreign key (user_id) references users(user_id),
|
||||
index user_id_index (user_id asc)
|
||||
) engine = innodb default charset = utf8mb4;
|
||||
|
||||
create table drug_classification(
|
||||
class_id int not null auto_increment,
|
||||
class_name varchar(128) not null,
|
||||
is_deleted tinyint(4) not null default 0,
|
||||
create_time datetime default now(),
|
||||
update_time datetime default now(),
|
||||
primary key (class_id)
|
||||
) engine = innodb default charset = utf8mb4;
|
||||
|
||||
|
||||
create table order_items (
|
||||
order_item_id int not null auto_increment,
|
||||
order_id int not null,
|
||||
drug_id int not null,
|
||||
quantity int null,
|
||||
is_deleted tinyint(4) not null default 0,
|
||||
create_time datetime default now(),
|
||||
update_time datetime default now(),
|
||||
primary key (order_item_id),
|
||||
foreign key (order_id) references orders(order_id),
|
||||
foreign key (drug_id) references drugs(drug_id),
|
||||
index order_id_index (order_id asc)
|
||||
) engine = innodb default charset = utf8mb4;
|
||||
|
||||
create table cart (
|
||||
cart_id int not null auto_increment,
|
||||
user_id int not null,
|
||||
drug_id int not null,
|
||||
num int not null default 1,
|
||||
is_deleted tinyint(4) not null default 0,
|
||||
create_time datetime default now(),
|
||||
update_time datetime default now(),
|
||||
primary key (cart_id),
|
||||
foreign key (user_id) references users(user_id),
|
||||
foreign key (drug_id) references drugs(drug_id)
|
||||
) engine = innodb default charset = utf8mb4;
|
||||
|
||||
insert into users (user_id,user_name,password,identity) values
|
||||
(1,'张三',1398,0),(2,'李四',1542,1),(3,'赵五',1397,1),(4,'王六',1271,1),
|
||||
(5,'许七',4569,1),(6,'一一',1284,1),(7,'宋二',1594,1),(8,'乌龟',1478,1),
|
||||
(9,'苹果',1369,1),(0,'空空',1258,1);
|
||||
|
||||
insert into drug_classification (class_id,class_name)values
|
||||
(1,'感冒药'),(2,'解热镇痛药'),(3,'镇咳药'),(4,'消化系统用药'),(5,'抗生素'),
|
||||
(6,'外用消炎药'),(7,'抗病毒药'),(8,'抗过敏药');
|
||||
|
||||
insert into drugs
|
||||
(class_id,drug_name,efficacy,price,validity,inventory,picture,class_name)
|
||||
values(1,'板蓝根颗粒','用于抗感冒',13.56,18,100,"images\\1.jpg",'感冒药'),
|
||||
(1,'双黄连口服液','用于缓解感冒症状',25.89,18,100,"images\\1.2.jpg",'感冒药'),
|
||||
(2,'布洛芬','用于缓解轻度至中度的疼痛,如头痛、关节痛,也可以用于缓解发热',45.23,18,100,"images\\2.1.jpg",'解热镇痛药'),
|
||||
(2,'对乙酰氨基酚','常用于退烧和缓解轻度疼痛',12.89,18,100,"images\\2.2.jpg",'解热镇痛药'),
|
||||
(3,'鲜竹沥口服液','用于止咳化痰',28.45,36,100,"images\\3.1.jpg",'镇咳药'),
|
||||
(3,'右美沙芬','用于干咳无痰的情况',46.12,36,100,"images\\3.2.jpg",'镇咳药'),
|
||||
(4,'蒙脱石散','用于治疗腹泻',13.46,36,100,"images\\4.1.jpg",'消化系统用药'),
|
||||
(4,'多潘立酮','促进胃肠蠕动的药物,帮助缓解消化不良',29.84,36,100,"images\\4.2.jpg",'消化系统用药'),
|
||||
(5,'阿奇霉素分散片','用于治疗各种细菌感染',39.47,36,100,"images\\5.1.jpg",'抗生素'),
|
||||
(5,'阿莫西林胶囊','青霉素类抗生素,广泛用于治疗多种细菌感染',23.84,24,100,"images\\5.2.jpg",'抗生素'),
|
||||
(6,'红霉素软膏','用于皮肤感染',17.56,24,100,"images\\6.1.jpg",'外用消炎药'),
|
||||
(6,'夫西地酸乳膏','用于治疗皮肤感染及炎症',9.56,24,100,"images\\6.2.jpg",'外用消炎药'),
|
||||
(7,'氯雷他定片','用于治疗过敏症状,如过敏性鼻炎、皮肤瘙痒等',53.49,24,100,"images\\7.1.jpg",'抗病毒药'),
|
||||
(7,'盐酸西替利嗪片','用于缓解过敏症状',16.79,24,100,"images\\7.2.jpg",'抗病毒药'),
|
||||
(8,'奥司他韦','用于治疗流感病毒引起的症状',46.58,24,100,"images\\8.jpg",'抗过敏药');
|
||||
|
||||
insert into orders
|
||||
(user_id,consignee,tele,address,total_amount,order_status)
|
||||
values(1,'公瑞',15632165486,'北京市朝阳区林萃西里15号楼4单元201室',39.45,'已付款未发货'),
|
||||
(2,'吴菲',12356231254,'上海市浦东新区世纪公园路88号金茂大厦12层',58.12,'已付款未发货'),
|
||||
(2,'李四',14545681235,'广州市天河区珠江新城华夏路49号津滨腾越大厦B座902室',74.57,'已付款未发货'),
|
||||
(4,'依依',15064352013,'深圳市福田区福华三路88号时代科技大厦7楼705室',43.3,'已付款未发货'),
|
||||
(6,'一一',17856491235,'成都市武侯区高新南区天府大道中段666号希顿国际广场C座1801室',63.31,'已付款未发货'),
|
||||
(6,'谷谷',13578546456,'天津市南开区红旗南路251号增1号新技术产业园区华苑产业区海泰信息广场D座402室',27.12,'已付款未发货'),
|
||||
(7,'艳艳',18946571258,'杭州市西湖区文三路90号东部软件园3号楼5层',70.28,'已付款未发货'),
|
||||
(8,'萌萌',15679562345,'重庆市渝北区金开大道100号爱都会3幢1单元9-2',57.03,'已付款未发货'),
|
||||
(9,'作业本',10356894678,'南京市鼓楼区中山路300号德基广场二期28楼',59.58,'已付款未发货'),
|
||||
(10,'酷爱香水',18956782345,'苏州市工业园区星海街200号湖邑16幢202室',46.58,'已付款未发货');
|
||||
|
||||
insert into order_items (order_id,drug_id,quantity) values
|
||||
(1,2,1),(1,1,1),(2,3,1),(2,4,1),(3,5,1),(3,6,1),(4,7,1),(4,8,1),(5,11,1),
|
||||
(5,12,1),(6,9,1),(6,10,1),(7,13,1),(7,14,1),(8,9,1),(8,11,1),(9,6,1),(9,7,1),
|
||||
(10,15,1);
|
||||
|
||||
select drug_name from drugs where drug_name like '%口服液%';
|
||||
select drug_name from drugs where drug_name like '%膏%';
|
||||
Select * from orders where consignee LIKE '张%';
|
||||
select a.order_id, a.total_amount, b.order_item_id, c.drug_name, b.quantity from orders a left join order_items b on a.order_id = b.order_id left join drugs c on b.drug_id = c.drug_id where a.user_id = 2;
|
||||
select a.drug_name from drugs a left join drug_classification b on a.class_id = b.class_id where b.class_name = '感冒药';
|
||||
Select o.order_id, u.user_name from orders o JOIN users u ON o.user_id = u.user_id;
|
||||
select drug_name from drugs where price > ALL(select price from drugs a left join drug_classification b on a.class_id = b.class_id where b.class_name ='感冒药');
|
||||
select drug_name from drugs where price > ALL(select price from drugs a left join drug_classification b on a.class_id = b.class_id where b.class_name ='感冒药');
|
||||
Select a.drug_name, a.price from drugs a join drug_classification b on a.class_id = b.class_id where b.class_name IN ('感冒药', '抗生素');
|
||||
select a.user_id, COUNT(*) orders_num from users a join orders b on a.user_id = b.user_id GROUP BY b.user_id HAVING COUNT(*) >= 2;
|
||||
select drug_id, drug_name from drugs where price > 50;
|
||||
select drug_name, inventory from drugs where inventory < 10;
|
||||
select * from orders where order_id between 4 and 9;
|
||||
select a.drug_id, a.drug_name, b.class_name from drugs a join drug_classification b on a.class_id = b.class_id where b.class_name NOT IN ('感冒药', '抗生素');
|
||||
Select * from drugs where price BETWEEN 30 AND 50;
|
||||
select * from drugs limit 5, 5;
|
||||
select * from orders where user_id = 1 limit 0, 5;
|
||||
select a.user_id, a.user_name from users a join orders c on a.user_id = c.user_id join order_items d on c.order_id = d.order_id join drugs b on b.drug_id = d.drug_id where b.class_id IN (select class_id from drug_classification where class_name = '感冒药') GROUP BY a.user_id, a.user_name;
|
||||
select d.drug_id, d.drug_name, c.class_name from drugs d join drug_classification c on d.class_id = c.class_id where d.price < (select AVG(d.price) from drugs d join drug_classification c on d.class_id = c.class_id where c.class_name = '感冒药') and c.class_name != '感冒药';
|
||||
select user_id, user_name from users u where NOT EXISTS (select 1 from orders o where o.user_id = u.user_id);
|
||||
|
||||
update users set user_name='哈哈' where user_id=1;
|
||||
update users set password=1234 where user_name='李四';
|
||||
update orders set tele=15666796023 where consignee='吴菲';
|
||||
update drugs set price=19.60 where drug_name='板蓝根颗粒';
|
||||
update drugs set validity=12 where drug_name='对乙酰氨基酚';
|
||||
update drugs set inventory=88 where drug_name='阿奇霉素分散片';
|
||||
update drug_classification set class_name='抗生素类药品' where class_id in(select class_id from drugs where drug_name='阿奇霉素分散片');
|
||||
update drugs set efficacy='奥司他韦是一种抗病毒药物,主要用于治疗和预防甲型和乙型流感' where drug_name='奥司他韦';
|
||||
|
||||
delete from orders where user_id in (select user_id from users where user_name='空空');
|
||||
delete from users where user_name=’乌龟’;
|
||||
delete from drugs where drug_name='多潘立酮';
|
||||
|
||||
create view low_stock_drug_view as select d.drug_name, c.class_name, d.inventory from drugs d join drug_classification c on d.class_id = c.class_id where d.is_deleted = 0 and d.inventory < 10;
|
||||
create view user_order_history_view as select o.order_id, o.total_amount, d.drug_name, d.price, d.picture, i.quantity, i.order_item_id from users u join orders o on u.user_id = o.user_id join order_items i on o.order_id = i.order_id join drugs d on d.drug_id = i.drug_id where u.is_deleted = 0 and o.is_deleted = 0 and i.is_deleted = 0 and d.is_deleted = 0;
|
||||
create view drug_sales_detail_view as select d.drug_name, SUM(i.quantity) as total_sales_quantity ,SUM(i.quantity * d.price) as total_sales_amount from drugs d join order_items i on d.drug_id = i.drug_id join orders o on i.order_id = o.order_id where o.is_deleted = 0 and i.is_deleted = 0 and d.is_deleted = 0 GROUP BY d.drug_name;
|
||||
CREATE VIEW active_users_and_popular_medicines_view AS SELECT u.user_id, u.user_name, d.drug_name, COUNT(i.order_id) AS purchase_count FROM users u JOIN orders o ON u.user_id = o.user_id JOIN order_items i ON o.order_id = i.order_id JOIN drugs d ON i.drug_id = d.drug_id WHERE u.is_deleted = 0 AND o.is_deleted = 0 AND i.is_deleted = 0 AND d.is_deleted = 0 GROUP BY u.user_id, u.user_name, d.drug_name HAVING COUNT(i.order_id) > 2 ORDER BY u.user_id, purchase_count DESC;
|
||||
CREATE VIEW medicine_price_proportion_in_orders_view AS SELECT o.order_id, d.drug_name, (i.quantity * d.price) AS medicine_total_price, o.total_amount, (i.quantity * d.price) / o.total_amount AS price_proportion FROM orders o JOIN order_items i ON o.order_id = i.order_id JOIN drugs d ON i.drug_id = d.drug_id WHERE o.is_deleted = 0 AND i.is_deleted = 0 AND d.is_deleted = 0;
|
||||
|
||||
create index idx_username on users (user_name);
|
||||
create index idx_class on drugs (class_id);
|
||||
create index idx_drug_name on drugs (drug_name);
|
||||
create index idx_user_id on orders (user_id);
|
||||
create index idx_order_id on order_items (order_id);
|
||||
create index idx_drug_id on order_items (drug_id);
|
||||
create index idx_class_name on drug_classification (class_name);
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE add_medicine(
|
||||
IN p_category_id INT,
|
||||
IN p_medicine_name VARCHAR(100),
|
||||
IN p_validity_period DATE,
|
||||
IN p_price DECIMAL(10, 2),
|
||||
IN p_efficacy TEXT,
|
||||
IN p_stock INT)BEGIN
|
||||
INSERT INTO medicines (category_id, medicine_name, validity_period, price, efficacy, stock, create_time, modify_time, is_deleted)
|
||||
VALUES (p_category_id, p_medicine_name, p_validity_period, p_price, p_efficacy, p_stock, NOW(), NOW(), 0);
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_user_insert
|
||||
BEFORE INSERT ON users
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.create_time = NOW();
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_user_update
|
||||
BEFORE UPDATE ON users
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_drug_insert
|
||||
BEFORE INSERT ON drugs
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.create_time = NOW();
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_drug_update
|
||||
BEFORE UPDATE ON drugs
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_drug_inventory_update
|
||||
BEFORE UPDATE ON drugs
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
IF NEW.inventory < 0 THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '库存不能为负数';
|
||||
END IF;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_order_insert
|
||||
BEFORE INSERT ON orders
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.create_time = NOW();
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_order_update
|
||||
BEFORE UPDATE ON orders
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_order_item_insert
|
||||
BEFORE INSERT ON order_items
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.create_time = NOW();
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_order_item_update
|
||||
BEFORE UPDATE ON order_items
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER after_order_item_quantity_update
|
||||
AFTER UPDATE ON order_items
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE drug_inventory INT;
|
||||
SELECT inventory INTO drug_inventory FROM drugs WHERE drug_id = NEW.drug_id;
|
||||
UPDATE drugs SET inventory = drug_inventory - (NEW.quantity - OLD.quantity) WHERE drug_id = NEW.drug_id;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_class_insert
|
||||
BEFORE INSERT ON drug_classification
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.create_time = NOW();
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_class_update
|
||||
BEFORE UPDATE ON drug_classification
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
@ -0,0 +1,305 @@
|
||||
create table drugs (
|
||||
drug_id int not null auto_increment,
|
||||
class_id int not null,
|
||||
class_name varchar(128) null,
|
||||
drug_name varchar(128) not null,
|
||||
efficacy TEXT null,
|
||||
price decimal(10, 2) null,
|
||||
validity int null,
|
||||
inventory int null,
|
||||
is_deleted tinyint(4) null default 0,
|
||||
create_time datetime default now(),
|
||||
update_time datetime default now(),
|
||||
primary key (drug_id),
|
||||
foreign key (class_id) references drug_classification(class_id),
|
||||
index class_id_index (class_id asc)
|
||||
) engine = innodb default charset = utf8mb4;
|
||||
|
||||
create table users (
|
||||
user_id int not null auto_increment,
|
||||
user_name varchar(128) not null,
|
||||
password varchar(128) not null,
|
||||
identity tinyint(4) not null,
|
||||
is_deleted tinyint(4) not null default 0,
|
||||
create_time datetime default now(),
|
||||
update_time datetime default now(),
|
||||
primary key (user_id),
|
||||
unique index user_name_UNIQUE (user_name asc)
|
||||
)engine = innodb default character set = utf8mb4;
|
||||
|
||||
create table orders (
|
||||
order_id int not null auto_increment,
|
||||
user_id int not null,
|
||||
consignee varchar(128) null,
|
||||
tele varchar(11) null,
|
||||
address varchar(128) null,
|
||||
total_amount decimal(10, 2) null,
|
||||
order_status varchar(128) default 0,
|
||||
is_deleted tinyint(4) not null default 0,
|
||||
create_time datetime default now(),
|
||||
update_time datetime default now(),
|
||||
primary key (order_id),
|
||||
foreign key (user_id) references users(user_id),
|
||||
index user_id_index (user_id asc)
|
||||
) engine = innodb default charset = utf8mb4;
|
||||
|
||||
create table drug_classification(
|
||||
class_id int not null auto_increment,
|
||||
class_name varchar(128) not null,
|
||||
is_deleted tinyint(4) not null default 0,
|
||||
create_time datetime default now(),
|
||||
update_time datetime default now(),
|
||||
primary key (class_id)
|
||||
) engine = innodb default charset = utf8mb4;
|
||||
|
||||
|
||||
create table order_items (
|
||||
order_item_id int not null auto_increment,
|
||||
order_id int not null,
|
||||
drug_id int not null,
|
||||
quantity int null,
|
||||
is_deleted tinyint(4) not null default 0,
|
||||
create_time datetime default now(),
|
||||
update_time datetime default now(),
|
||||
primary key (order_item_id),
|
||||
foreign key (order_id) references orders(order_id),
|
||||
foreign key (drug_id) references drugs(drug_id),
|
||||
index order_id_index (order_id asc)
|
||||
) engine = innodb default charset = utf8mb4;
|
||||
|
||||
create table cart (
|
||||
cart_id int not null auto_increment,
|
||||
user_id int not null,
|
||||
drug_id int not null,
|
||||
num int not null default 1,
|
||||
is_deleted tinyint(4) not null default 0,
|
||||
create_time datetime default now(),
|
||||
update_time datetime default now(),
|
||||
primary key (cart_id),
|
||||
foreign key (user_id) references users(user_id),
|
||||
foreign key (drug_id) references drugs(drug_id)
|
||||
) engine = innodb default charset = utf8mb4;
|
||||
|
||||
insert into users (user_id,user_name,password,identity) values
|
||||
(1,'张三',1398,0),(2,'李四',1542,1),(3,'赵五',1397,1),(4,'王六',1271,1),
|
||||
(5,'许七',4569,1),(6,'一一',1284,1),(7,'宋二',1594,1),(8,'乌龟',1478,1),
|
||||
(9,'苹果',1369,1),(0,'空空',1258,1);
|
||||
|
||||
insert into drug_classification (class_id,class_name)values
|
||||
(1,'感冒药'),(2,'解热镇痛药'),(3,'镇咳药'),(4,'消化系统用药'),(5,'抗生素'),
|
||||
(6,'外用消炎药'),(7,'抗病毒药'),(8,'抗过敏药');
|
||||
|
||||
insert into drugs
|
||||
(class_id,drug_name,efficacy,price,validity,inventory,picture,class_name)
|
||||
values(1,'板蓝根颗粒','用于抗感冒',13.56,18,100,"images\\1.jpg",'感冒药'),
|
||||
(1,'双黄连口服液','用于缓解感冒症状',25.89,18,100,"images\\1.2.jpg",'感冒药'),
|
||||
(2,'布洛芬','用于缓解轻度至中度的疼痛,如头痛、关节痛,也可以用于缓解发热',45.23,18,100,"images\\2.1.jpg",'解热镇痛药'),
|
||||
(2,'对乙酰氨基酚','常用于退烧和缓解轻度疼痛',12.89,18,100,"images\\2.2.jpg",'解热镇痛药'),
|
||||
(3,'鲜竹沥口服液','用于止咳化痰',28.45,36,100,"images\\3.1.jpg",'镇咳药'),
|
||||
(3,'右美沙芬','用于干咳无痰的情况',46.12,36,100,"images\\3.2.jpg",'镇咳药'),
|
||||
(4,'蒙脱石散','用于治疗腹泻',13.46,36,100,"images\\4.1.jpg",'消化系统用药'),
|
||||
(4,'多潘立酮','促进胃肠蠕动的药物,帮助缓解消化不良',29.84,36,100,"images\\4.2.jpg",'消化系统用药'),
|
||||
(5,'阿奇霉素分散片','用于治疗各种细菌感染',39.47,36,100,"images\\5.1.jpg",'抗生素'),
|
||||
(5,'阿莫西林胶囊','青霉素类抗生素,广泛用于治疗多种细菌感染',23.84,24,100,"images\\5.2.jpg",'抗生素'),
|
||||
(6,'红霉素软膏','用于皮肤感染',17.56,24,100,"images\\6.1.jpg",'外用消炎药'),
|
||||
(6,'夫西地酸乳膏','用于治疗皮肤感染及炎症',9.56,24,100,"images\\6.2.jpg",'外用消炎药'),
|
||||
(7,'氯雷他定片','用于治疗过敏症状,如过敏性鼻炎、皮肤瘙痒等',53.49,24,100,"images\\7.1.jpg",'抗病毒药'),
|
||||
(7,'盐酸西替利嗪片','用于缓解过敏症状',16.79,24,100,"images\\7.2.jpg",'抗病毒药'),
|
||||
(8,'奥司他韦','用于治疗流感病毒引起的症状',46.58,24,100,"images\\8.jpg",'抗过敏药');
|
||||
|
||||
insert into orders
|
||||
(user_id,consignee,tele,address,total_amount,order_status)
|
||||
values(1,'公瑞',15632165486,'北京市朝阳区林萃西里15号楼4单元201室',39.45,'已付款未发货'),
|
||||
(2,'吴菲',12356231254,'上海市浦东新区世纪公园路88号金茂大厦12层',58.12,'已付款未发货'),
|
||||
(2,'李四',14545681235,'广州市天河区珠江新城华夏路49号津滨腾越大厦B座902室',74.57,'已付款未发货'),
|
||||
(4,'依依',15064352013,'深圳市福田区福华三路88号时代科技大厦7楼705室',43.3,'已付款未发货'),
|
||||
(6,'一一',17856491235,'成都市武侯区高新南区天府大道中段666号希顿国际广场C座1801室',63.31,'已付款未发货'),
|
||||
(6,'谷谷',13578546456,'天津市南开区红旗南路251号增1号新技术产业园区华苑产业区海泰信息广场D座402室',27.12,'已付款未发货'),
|
||||
(7,'艳艳',18946571258,'杭州市西湖区文三路90号东部软件园3号楼5层',70.28,'已付款未发货'),
|
||||
(8,'萌萌',15679562345,'重庆市渝北区金开大道100号爱都会3幢1单元9-2',57.03,'已付款未发货'),
|
||||
(9,'作业本',10356894678,'南京市鼓楼区中山路300号德基广场二期28楼',59.58,'已付款未发货'),
|
||||
(10,'酷爱香水',18956782345,'苏州市工业园区星海街200号湖邑16幢202室',46.58,'已付款未发货');
|
||||
|
||||
insert into order_items (order_id,drug_id,quantity) values
|
||||
(1,2,1),(1,1,1),(2,3,1),(2,4,1),(3,5,1),(3,6,1),(4,7,1),(4,8,1),(5,11,1),
|
||||
(5,12,1),(6,9,1),(6,10,1),(7,13,1),(7,14,1),(8,9,1),(8,11,1),(9,6,1),(9,7,1),
|
||||
(10,15,1);
|
||||
|
||||
select drug_name from drugs where drug_name like '%口服液%';
|
||||
select drug_name from drugs where drug_name like '%膏%';
|
||||
Select * from orders where consignee LIKE '张%';
|
||||
select a.order_id, a.total_amount, b.order_item_id, c.drug_name, b.quantity from orders a left join order_items b on a.order_id = b.order_id left join drugs c on b.drug_id = c.drug_id where a.user_id = 2;
|
||||
select a.drug_name from drugs a left join drug_classification b on a.class_id = b.class_id where b.class_name = '感冒药';
|
||||
Select o.order_id, u.user_name from orders o JOIN users u ON o.user_id = u.user_id;
|
||||
select drug_name from drugs where price > ALL(select price from drugs a left join drug_classification b on a.class_id = b.class_id where b.class_name ='感冒药');
|
||||
select drug_name from drugs where price > ALL(select price from drugs a left join drug_classification b on a.class_id = b.class_id where b.class_name ='感冒药');
|
||||
Select a.drug_name, a.price from drugs a join drug_classification b on a.class_id = b.class_id where b.class_name IN ('感冒药', '抗生素');
|
||||
select a.user_id, COUNT(*) orders_num from users a join orders b on a.user_id = b.user_id GROUP BY b.user_id HAVING COUNT(*) >= 2;
|
||||
select drug_id, drug_name from drugs where price > 50;
|
||||
select drug_name, inventory from drugs where inventory < 10;
|
||||
select * from orders where order_id between 4 and 9;
|
||||
select a.drug_id, a.drug_name, b.class_name from drugs a join drug_classification b on a.class_id = b.class_id where b.class_name NOT IN ('感冒药', '抗生素');
|
||||
Select * from drugs where price BETWEEN 30 AND 50;
|
||||
select * from drugs limit 5, 5;
|
||||
select * from orders where user_id = 1 limit 0, 5;
|
||||
select a.user_id, a.user_name from users a join orders c on a.user_id = c.user_id join order_items d on c.order_id = d.order_id join drugs b on b.drug_id = d.drug_id where b.class_id IN (select class_id from drug_classification where class_name = '感冒药') GROUP BY a.user_id, a.user_name;
|
||||
select d.drug_id, d.drug_name, c.class_name from drugs d join drug_classification c on d.class_id = c.class_id where d.price < (select AVG(d.price) from drugs d join drug_classification c on d.class_id = c.class_id where c.class_name = '感冒药') and c.class_name != '感冒药';
|
||||
select user_id, user_name from users u where NOT EXISTS (select 1 from orders o where o.user_id = u.user_id);
|
||||
|
||||
update users set user_name='哈哈' where user_id=1;
|
||||
update users set password=1234 where user_name='李四';
|
||||
update orders set tele=15666796023 where consignee='吴菲';
|
||||
update drugs set price=19.60 where drug_name='板蓝根颗粒';
|
||||
update drugs set validity=12 where drug_name='对乙酰氨基酚';
|
||||
update drugs set inventory=88 where drug_name='阿奇霉素分散片';
|
||||
update drug_classification set class_name='抗生素类药品' where class_id in(select class_id from drugs where drug_name='阿奇霉素分散片');
|
||||
update drugs set efficacy='奥司他韦是一种抗病毒药物,主要用于治疗和预防甲型和乙型流感' where drug_name='奥司他韦';
|
||||
|
||||
delete from orders where user_id in (select user_id from users where user_name='空空');
|
||||
delete from users where user_name=’乌龟’;
|
||||
delete from drugs where drug_name='多潘立酮';
|
||||
|
||||
create view low_stock_drug_view as select d.drug_name, c.class_name, d.inventory from drugs d join drug_classification c on d.class_id = c.class_id where d.is_deleted = 0 and d.inventory < 10;
|
||||
create view user_order_history_view as select o.order_id, o.total_amount, d.drug_name, d.price, d.picture, i.quantity, i.order_item_id from users u join orders o on u.user_id = o.user_id join order_items i on o.order_id = i.order_id join drugs d on d.drug_id = i.drug_id where u.is_deleted = 0 and o.is_deleted = 0 and i.is_deleted = 0 and d.is_deleted = 0;
|
||||
create view drug_sales_detail_view as select d.drug_name, SUM(i.quantity) as total_sales_quantity ,SUM(i.quantity * d.price) as total_sales_amount from drugs d join order_items i on d.drug_id = i.drug_id join orders o on i.order_id = o.order_id where o.is_deleted = 0 and i.is_deleted = 0 and d.is_deleted = 0 GROUP BY d.drug_name;
|
||||
CREATE VIEW active_users_and_popular_medicines_view AS SELECT u.user_id, u.user_name, d.drug_name, COUNT(i.order_id) AS purchase_count FROM users u JOIN orders o ON u.user_id = o.user_id JOIN order_items i ON o.order_id = i.order_id JOIN drugs d ON i.drug_id = d.drug_id WHERE u.is_deleted = 0 AND o.is_deleted = 0 AND i.is_deleted = 0 AND d.is_deleted = 0 GROUP BY u.user_id, u.user_name, d.drug_name HAVING COUNT(i.order_id) > 2 ORDER BY u.user_id, purchase_count DESC;
|
||||
CREATE VIEW medicine_price_proportion_in_orders_view AS SELECT o.order_id, d.drug_name, (i.quantity * d.price) AS medicine_total_price, o.total_amount, (i.quantity * d.price) / o.total_amount AS price_proportion FROM orders o JOIN order_items i ON o.order_id = i.order_id JOIN drugs d ON i.drug_id = d.drug_id WHERE o.is_deleted = 0 AND i.is_deleted = 0 AND d.is_deleted = 0;
|
||||
|
||||
create index idx_username on users (user_name);
|
||||
create index idx_class on drugs (class_id);
|
||||
create index idx_drug_name on drugs (drug_name);
|
||||
create index idx_user_id on orders (user_id);
|
||||
create index idx_order_id on order_items (order_id);
|
||||
create index idx_drug_id on order_items (drug_id);
|
||||
create index idx_class_name on drug_classification (class_name);
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE add_medicine(
|
||||
IN p_category_id INT,
|
||||
IN p_medicine_name VARCHAR(100),
|
||||
IN p_validity_period DATE,
|
||||
IN p_price DECIMAL(10, 2),
|
||||
IN p_efficacy TEXT,
|
||||
IN p_stock INT)BEGIN
|
||||
INSERT INTO medicines (category_id, medicine_name, validity_period, price, efficacy, stock, create_time, modify_time, is_deleted)
|
||||
VALUES (p_category_id, p_medicine_name, p_validity_period, p_price, p_efficacy, p_stock, NOW(), NOW(), 0);
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_user_insert
|
||||
BEFORE INSERT ON users
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.create_time = NOW();
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_user_update
|
||||
BEFORE UPDATE ON users
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_drug_insert
|
||||
BEFORE INSERT ON drugs
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.create_time = NOW();
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_drug_update
|
||||
BEFORE UPDATE ON drugs
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_drug_inventory_update
|
||||
BEFORE UPDATE ON drugs
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
IF NEW.inventory < 0 THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '库存不能为负数';
|
||||
END IF;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_order_insert
|
||||
BEFORE INSERT ON orders
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.create_time = NOW();
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_order_update
|
||||
BEFORE UPDATE ON orders
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_order_item_insert
|
||||
BEFORE INSERT ON order_items
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.create_time = NOW();
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_order_item_update
|
||||
BEFORE UPDATE ON order_items
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER after_order_item_quantity_update
|
||||
AFTER UPDATE ON order_items
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE drug_inventory INT;
|
||||
SELECT inventory INTO drug_inventory FROM drugs WHERE drug_id = NEW.drug_id;
|
||||
UPDATE drugs SET inventory = drug_inventory - (NEW.quantity - OLD.quantity) WHERE drug_id = NEW.drug_id;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_class_insert
|
||||
BEFORE INSERT ON drug_classification
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.create_time = NOW();
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER before_class_update
|
||||
BEFORE UPDATE ON drug_classification
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.update_time = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
Loading…
Reference in new issue