数据库脚本提交

main
onlySYstem0331 8 months ago
parent 62e73026ac
commit f4c7f62707

@ -0,0 +1,139 @@
1.
CREATE TABLE `warehouse` (
`warehouse_id` int NOT NULL,
`warehouse_name` varchar(50) NOT NULL,
`location` varchar(100) NOT NULL,
`capacity` int NOT NULL,
PRIMARY KEY (`warehouse_id`),
KEY `idx_warehouse_name` (`warehouse_name`),
KEY `idx_warehouse_location` (`location`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
2.
CREATE TABLE `employee` (
`employee_id` int NOT NULL,
`employee_name` varchar(50) NOT NULL,
`department` varchar(50) NOT NULL,
`contact_info` varchar(50) NOT NULL,
`managed_warehouse_id` int DEFAULT NULL,
PRIMARY KEY (`employee_id`),
KEY `managed_warehouse_id` (`managed_warehouse_id`),
KEY `idx_employee_name` (`employee_name`),
KEY `idx_employee_department` (`department`),
CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`managed_warehouse_id`) REFERENCES `warehouse` (`warehouse_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
3.
CREATE TABLE `goods` (
`goods_id` int NOT NULL,
`goods_name` varchar(50) NOT NULL,
`specification` varchar(100) NOT NULL,
`production_date` date NOT NULL,
`belonging_warehouse_id` int DEFAULT NULL,
`supplier_id` int DEFAULT NULL,
PRIMARY KEY (`goods_id`),
KEY `belonging_warehouse_id` (`belonging_warehouse_id`),
KEY `idx_goods_name` (`goods_name`),
KEY `idx_goods_supplier_id` (`supplier_id`),
CONSTRAINT `goods_ibfk_1` FOREIGN KEY (`belonging_warehouse_id`) REFERENCES `warehouse` (`warehouse_id`),
CONSTRAINT `goods_ibfk_2` FOREIGN KEY (`supplier_id`) REFERENCES `supplier` (`supplier_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
4.
CREATE TABLE `supplier` (
`supplier_id` int NOT NULL,
`supplier_name` varchar(50) NOT NULL,
`contact_method` varchar(50) NOT NULL,
`rating` int NOT NULL,
PRIMARY KEY (`supplier_id`),
KEY `idx_supplier_name` (`supplier_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
5.
CREATE TABLE `customer` (
`customer_id` int NOT NULL,
`customer_name` varchar(50) NOT NULL,
`customer_contact` varchar(50) NOT NULL,
`order_history` text,
PRIMARY KEY (`customer_id`),
KEY `idx_customer_name` (`customer_name`),
KEY `idx_customer_contact` (`customer_contact`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
6.
CREATE TABLE `inboundrecord` (
`inbound_id` int NOT NULL,
`goods_id` int DEFAULT NULL,
`warehouse_id` int DEFAULT NULL,
`quantity_in` int NOT NULL,
`inbound_date` date NOT NULL,
PRIMARY KEY (`inbound_id`),
KEY `idx_inboundrecord_goods_id` (`goods_id`),
KEY `idx_inboundrecord_warehouse_id` (`warehouse_id`),
CONSTRAINT `inboundrecord_ibfk_1` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`goods_id`),
CONSTRAINT `inboundrecord_ibfk_2` FOREIGN KEY (`warehouse_id`) REFERENCES `warehouse` (`warehouse_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
7.
CREATE TABLE `outboundrecord` (
`outbound_id` int NOT NULL,
`goods_id` int DEFAULT NULL,
`warehouse_id` int DEFAULT NULL,
`quantity_out` int NOT NULL,
`outbound_date` date NOT NULL,
PRIMARY KEY (`outbound_id`),
KEY `idx_outboundrecord_goods_id` (`goods_id`),
KEY `idx_outboundrecord_warehouse_id` (`warehouse_id`),
CONSTRAINT `outboundrecord_ibfk_1` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`goods_id`),
CONSTRAINT `outboundrecord_ibfk_2` FOREIGN KEY (`warehouse_id`) REFERENCES `warehouse` (`warehouse_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
8.
CREATE TABLE `warehouseequipment` (
`equipment_id` int NOT NULL,
`equipment_name` varchar(50) NOT NULL,
`description` text,
`warehouse_id` int DEFAULT NULL,
PRIMARY KEY (`equipment_id`),
KEY `idx_warehouseequipment_name` (`equipment_name`),
KEY `idx_warehouseequipment_warehouse_id` (`warehouse_id`),
CONSTRAINT `warehouseequipment_ibfk_1` FOREIGN KEY (`warehouse_id`) REFERENCES `warehouse` (`warehouse_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
9.
CREATE TABLE `transportation` (
`transportation_id` int NOT NULL,
`transportation_type` varchar(50) NOT NULL,
`carrying_capacity` int NOT NULL,
`status` varchar(50) NOT NULL,
PRIMARY KEY (`transportation_id`),
KEY `idx_transportation_type` (`transportation_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
10.
CREATE TABLE `order` (
`order_id` int NOT NULL,
`customer_id` int DEFAULT NULL,
`goods_id` int DEFAULT NULL,
`order_quantity` int NOT NULL,
`order_date` date NOT NULL,
PRIMARY KEY (`order_id`),
KEY `idx_order_customer_id` (`customer_id`),
KEY `idx_order_goods_id` (`goods_id`),
CONSTRAINT `order_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`),
CONSTRAINT `order_ibfk_2` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`goods_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
11.
CREATE TABLE `deliver` (
`deliver_id` int NOT NULL,
`order_id` int DEFAULT NULL,
`transportation_id` int DEFAULT NULL,
PRIMARY KEY (`deliver_id`),
KEY `idx_deliver_order_id` (`order_id`),
KEY `idx_deliver_transportation_id` (`transportation_id`),
CONSTRAINT `deliver_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `order` (`order_id`),
CONSTRAINT `deliver_ibfk_2` FOREIGN KEY (`transportation_id`) REFERENCES `transportation` (`transportation_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

@ -0,0 +1,197 @@
:
INSERT INTO Warehouse (warehouse_id, warehouse_name, location, capacity)
VALUES
(1, '中心仓库', '上海市浦东新区 XX 路 1 号', 2000),
(2, '东区仓库', '上海市闵行区 XX 街 2 号', 1500),
(3, '南区仓库', '上海市徐汇区 XX 巷 3 号', 1800),
(4, '西区仓库', '上海市普陀区 XX 大道 4 号', 1600),
(5, '北区仓库', '上海市宝山区 XX 弄 5 号', 1400),
(6, '小件仓库', '上海市松江区 XX 号 6 号', 1000),
(7, '大件仓库', '上海市嘉定区 XX 路 7 号', 1200),
(8, '生鲜仓库', '上海市青浦区 XX 街 8 号', 800),
(9, '电子仓库', '上海市奉贤区 XX 巷 9 号', 1300),
(10, '贵重仓库', '上海市金山区 XX 大道 10 号', 500);
:
INSERT INTO Employee (employee_id, employee_name, department, contact_info, managed_warehouse_id)
VALUES
(1, '赵强', '仓储管理部', '13812345678', 1),
(2, '孙悦', '仓储管理部', '13623456789', 2),
(3, '周峰', '仓储管理部', '13934567890', 3),
(4, '吴丽', '仓储管理部', '13345678901', 4),
(5, '郑浩', '仓储管理部', '13156789012', 5),
(6, '王敏', '仓储管理部', '13067890123', 6),
(7, '冯鑫', '仓储管理部', '13278901234', 7),
(8, '陈晨', '仓储管理部', '13489012345', 8),
(9, '钱宇', '仓储管理部', '13590123456', 9),
(10, '刘畅', '仓储管理部', '13701234567', 10),
(11, '赵裕国', '安保部', '202211070130', 1),
(12, '张健', '安保部', '202211070127', 2);
:
INSERT INTO Goods (goods_id, goods_name, specification, production_date, belonging_warehouse_id, supplier_id)
VALUES
(1, '联想笔记本电脑', 'i7-1260P/16G/512G SSD', '2024-05-10', 9, 1),
(2, '戴尔台式电脑', 'i5-13400/8G/256G HDD + 1T SSD', '2024-04-15', 9, 2),
(3, '惠普打印机', 'LaserJet Pro MFP M227fdw', '2024-03-20', 3, 3),
(4, '佳能相机', 'EOS R6 Mark II', '2024-02-25', 10, 4),
(5, '苹果手机', 'iPhone 15 Pro Max', '2024-09-15', 10, 5),
(6, '华为平板电脑', 'MatePad Pro 12.6', '2024-08-10', 6, 6),
(7, '小米手环', '8 Pro', '2024-07-05', 6, 7),
(8, '三星显示器', '32 寸 4K 超高清曲面屏', '2024-06-30', 9, 8),
(9, '美的空调', '壁挂式 1.5 匹变频冷暖', '2024-01-15', 7, 9),
(10, '海尔冰箱', '双开门 535L 大容量', '2024-02-05', 7, 10),
(11, '格力电扇', '落地扇 FS-3015Bh7', '2024-03-08', 7, 1),
(12, '苏泊尔电饭煲', '5L 智能 IH 电磁加热', '2024-04-02', 6, 2),
(13, '九阳豆浆机', 'DJ13B-D08EC', '2024-05-06', 6, 3),
(14, '公牛插座', '6 位总控 5 米延长线', '2024-06-12', 6, 4),
(15, '晨光文具套装', '中性笔 + 笔记本 + 便签纸等', '2024-07-18', 6, 5);
:
INSERT INTO Supplier (supplier_id, supplier_name, contact_method, rating)
VALUES
(1, '联想科技有限公司', '010 - 88888888', 90),
(2, '戴尔计算机公司', '021 - 66666666', 85),
(3, '惠普中国有限公司', '020 - 55555555', 88),
(4, '佳能中国有限公司', '010 - 77777777', 92),
(5, '苹果公司', '021 - 99999999', 95),
(6, '华为技术有限公司', '0755 - 33333333', 93),
(7, '小米科技有限责任公司', '010 - 66666666', 89),
(8, '三星电子有限公司', '020 - 88888888', 87),
(9, '美的集团股份有限公司', '0755 - 55555555', 91),
(10, '海尔集团公司', '0532 - 77777777', 90);
:
INSERT INTO Customer (customer_id, customer_name, customer_contact, order_history)
VALUES
(1, '京东商城', '400-606-5500', '大量采购各类电子产品'),
(2, '苏宁易购', '400-836-5365', '多次购买家电产品'),
(3, '国美电器', '400-811-3333', '长期订购电脑设备'),
(4, '华为专卖店', '400-830-8300', '主要采购华为产品'),
(5, '苹果零售店', '400-666-8800', '专注苹果系列商品'),
(6, '顺电连锁', '400-678-8888', '广泛采购数码产品'),
(7, '宏图三胞', '400-999-6666', '频繁购入电脑及配件'),
(8, '迪信通手机连锁', '400-700-8899', '大量进购手机产品'),
(9, '百脑汇电脑城', '400-888-9999', '综合采购各类 IT 产品'),
(10, '永乐家电', '400-839-9333', '主要采购家电类商品');
:
INSERT INTO InboundRecord (inbound_id, goods_id, warehouse_id, quantity_in, inbound_date)
VALUES
(1, 1, 9, 100, '2024-11-01'),
(2, 2, 9, 80, '2024-11-02'),
(3, 3, 3, 50, '2024-11-03'),
(4, 4, 10, 30, '2024-11-04'),
(5, 5, 10, 40, '2024-11-05'),
(6, 6, 6, 60, '2024-11-06'),
(7, 7, 6, 70, '2024-11-07'),
(8, 8, 9, 40, '2024-11-08'),
(9, 9, 7, 30, '2024-11-09'),
(10, 10, 7, 25, '2024-11-10'),
(11, 11, 7, 40, '2024-11-11'),
(12, 12, 6, 50, '2024-11-12'),
(13, 13, 6, 35, '2024-11-13'),
(14, 14, 6, 65, '2024-11-14'),
(15, 15, 6, 75, '2024-11-15');
:
INSERT INTO OutboundRecord (outbound_id, goods_id, warehouse_id, quantity_out, outbound_date)
VALUES
(1, 1, 9, 20, '2024-11-16'),
(2, 2, 9, 15, '2024-11-17'),
(3, 3, 3, 10, '2024-11-18'),
(4, 4, 10, 8, '2024-11-19'),
(5, 5, 10, 12, '2024-11-20'),
(6, 6, 6, 18, '2024-11-21'),
(7, 7, 6, 22, '2024-11-22'),
(8, 8, 9, 10, '2024-11-23'),
(9, 9, 7, 8, '2024-11-24'),
(10, 10, 7, 6, '2024-11-25'),
(11, 11, 7, 10, '2024-11-26'),
(12, 12, 6, 15, '2024-11-27'),
(13, 13, 6, 10, '2024-11-28'),
(14, 14, 6, 20, '2024-11-29'),
(15, 15, 6, 25, '2024-11-30');
:
INSERT INTO WarehouseEquipment (equipment_id, equipment_name, description, warehouse_id)
VALUES
(1, '叉车A', '载重3吨电动叉车用于搬运重物',1),
(2, '货架B', '5 层重型货架,可存放大型货物', 2),
(3, '货架C', '6 层中型货架,适合存放一般货物',3),
(4, '输送带D', '长度20米速度0.5米/秒,用于货物传输',4),
(5, '堆垛机E', '最大堆垛高度6米操作精准',5),
(6, '托盘F', '塑料材质尺寸1.2x1米,承载货物',6),
(7, '叉车G', '载重2吨燃油叉车备用设备', 7),
(8, '通风系统H', '功率5千瓦保持仓库空气流通',8),
(9, '监控设备I', '高清摄像头16个覆盖仓库全域',9),
(10, '消防设备J', '包含灭火器、消防栓等,保障安全',10),
(11, '照明系统K', '亮度800流明节能环保',1),
(12, '扫码枪L', '无线蓝牙连接,快速扫描货物信息',2);
:
INSERT INTO Transportation (transportation_id, transportation_type, carrying_capacity, status)
VALUES
(1, '厢式货车',10, '可用'),
(2, '平板货车',8, '可用'),
(3, '冷藏车',5, '维修中'),
(4, '面包车',1, '可用'),
(5, '三轮车',0.5, '可用'),
(6, '半挂车',15, '调度中'),
(7, '小型货车',3, '可用'),
(8, '叉车(运输型)', 2, '可用'),
(9, '电动搬运车',1, '可用'),
(10, '重型卡车',20, '可用'),
(11, '轻型卡车',4, '可用'),
(12, '皮卡车',0.8, '可用');
:
INSERT INTO `Order` (order_id, customer_id, goods_id, order_quantity, order_date)
VALUES
(1, 1, 1, 30, '2024-12-01'),
(2, 2, 9, 20, '2024-12-02'),
(3, 3, 2, 15, '2024-12-03'),
(4, 4, 6, 10, '2024-12-04'),
(5, 5, 5, 25, '2024-12-05'),
(6, 6, 8, 18, '2024-12-06'),
(7, 7, 1, 12, '2024-12-07'),
(8, 8, 5, 8, '2024-12-08'),
(9, 9, 3, 10, '2024-12-09'),
(10, 10, 10, 15, '2024-12-10'),
(11, 1, 7, 20, '2024-12-11'),
(12, 2, 11, 15, '2024-12-12'),
(13, 3, 4, 10, '2024-12-13'),
(14, 4, 13, 8, '2024-12-14'),
(15, 5, 15, 12, '2024-12-15');
:
INSERT INTO deliver (deliver_id, order_id, transportation_id)
VALUES
(1, 1, 1),
(2, 2, 2),
(3, 3, 4),
(4, 4, 6),
(5, 5, 7),
(6, 6, 8),
(7, 7, 1),
(8, 8, 4),
(9, 9, 5),
(10, 10, 2),
(11, 11, 7),
(12, 12, 10),
(13, 13, 11),
(14, 14, 9),

@ -0,0 +1,49 @@
1. warehouse
CREATE INDEX idx_warehouse_capacity_range ON `warehouse` (`capacity`);
2. employee
CREATE INDEX idx_employee_department_warehouse ON `employee` (`department`, `managed_warehouse_id`);
3. goods
CREATE INDEX idx_goods_production_date_range ON `goods` (`production_date`);
4. supplier
CREATE INDEX idx_supplier_rating_range ON `supplier` (`rating`);
5. customer
CREATE INDEX idx_customer_name_contact ON `customer` (`customer_name`, `customer_contact`);
6. inboundrecord
便
CREATE INDEX idx_inboundrecord_date_quantity ON `inboundrecord` (`inbound_date`, `quantity_in`);
7. outboundrecord ID
CREATE INDEX idx_outboundrecord_date_goods ON `outboundrecord` (`outbound_date`, `goods_id`);
8. warehouseequipment
CREATE INDEX idx_warehouseequipment_name_warehouse ON `warehouseequipment` (`equipment_name`, `warehouse_id`);
9. transportation
CREATE INDEX idx_transportation_type_capacity ON `transportation` (`transportation_type`, `carrying_capacity`);
10. order ID
便
CREATE INDEX idx_order_customer_date ON `order` (`customer_id`, `order_date`);

@ -0,0 +1,86 @@
3.5.6
goods warehouse
DELIMITER //
CREATE PROCEDURE GetWarehouseInventory(IN warehouseId INT, OUT totalInventory INT)
BEGIN
SELECT SUM(i.quantity_in - o.quantity_out)
INTO totalInventory
FROM goods g
LEFT JOIN inboundrecord i ON g.goods_id = i.goods_id
LEFT JOIN outboundrecord o ON g.goods_id = o.goods_id
WHERE g.belonging_warehouse_id = warehouseId
GROUP BY g.belonging_warehouse_id;
END //
DELIMITER ;
goods supplier
DELIMITER //
CREATE PROCEDURE GetGoodsBySupplier(IN supplierId INT)
BEGIN
SELECT g.*
FROM goods g
WHERE g.supplier_id = supplierId;
END //
DELIMITER ;
order customer goods
DELIMITER //
CREATE PROCEDURE GetCustomerOrderHistory(IN customerId INT)
BEGIN
SELECT o.order_id, o.order_date, o.order_quantity, g.goods_name
FROM `order` o
JOIN customer c ON o.customer_id = c.customer_id
JOIN goods g ON o.goods_id = g.goods_id
WHERE c.customer_id = customerId;
END //
DELIMITER ;
使 goods belonging_warehouse_id
DELIMITER //
CREATE PROCEDURE UpdateGoodsWarehouse(IN goodsId INT, IN newWarehouseId INT)
BEGIN
UPDATE goods
SET belonging_warehouse_id = newWarehouseId
WHERE goods_id = goodsId;
END //
DELIMITER ;
DELIMITER //
CREATE PROCEDURE GetInboundRecordsByDateRange(IN startDate DATE, IN endDate DATE)
BEGIN
SELECT g.belonging_warehouse_id, SUM(i.quantity_in) AS total_inbound_quantity
FROM inboundrecord i
JOIN goods g ON i.goods_id = g.goods_id
WHERE i.inbound_date BETWEEN startDate AND endDate
GROUP BY g.belonging_warehouse_id;
END //
DELIMITER ;
transportation
DELIMITER //
CREATE PROCEDURE GetAvailableTransportation()
BEGIN
SELECT *
FROM transportation
WHERE status = '可用';
END //
DELIMITER ;
warehouseequipment warehouse
DELIMITER //
CREATE PROCEDURE GetWarehouseEquipmentDetails(IN warehouseId INT, IN equipmentName VARCHAR(50))
BEGIN
SELECT we.*
FROM warehouseequipment we
JOIN warehouse w ON we.warehouse_id = w.warehouse_id
WHERE w.warehouse_id = warehouseId AND we.equipment_name = equipmentName;
END //
DELIMITER ;

@ -0,0 +1,91 @@
1.
warehouse_id = 6
DELETE FROM inboundrecord
WHERE warehouse_id = 6;
DELETE FROM outboundrecord
WHERE warehouse_id = 6;
DELETE FROM goods
WHERE belonging_warehouse_id = 6;
DELETE FROM warehouse
WHERE warehouse_id = 6;
2.
employee_id = 12
DELETE FROM employee
WHERE employee_id = 12;
3.
supplier_id = 7
DELETE FROM goods
WHERE supplier_id = 7;
DELETE FROM supplier
WHERE supplier_id = 7;
4.
goods_id = 12
DELETE FROM inboundrecord
WHERE goods_id = 12;
DELETE FROM outboundrecord
WHERE goods_id = 12;
DELETE FROM goods
WHERE goods_id = 12;
5.
customer_id = 7
DELETE FROM `order`
WHERE customer_id = 7;
DELETE FROM customer
WHERE customer_id = 7;
6.
12inbound_id = 12
DELETE FROM inboundrecord
WHERE inbound_id = 12;
7.
13outbound_id = 13
DELETE FROM outboundrecord
WHERE outbound_id = 13;
8.
Lequipment_id = 12
DELETE FROM warehouseequipment
WHERE equipment_id = 12;
9.
transportation_id = 5
DELETE FROM transportation
WHERE transportation_id = 5;
10.
9deliver_id = 9
DELETE FROM deliver
WHERE deliver_id = 9;

@ -0,0 +1,182 @@
1. 1000
Warehouse 1000
SELECT warehouse_id, warehouse_name, location, capacity
FROM Warehouse
WHERE capacity > 1000;
2. 5
Employee 5
SELECT employee_name, department, contact_info, managed_warehouse_id
FROM Employee
WHERE employee_id > 5;
1. 1, 3, 5
Supplier 135
SELECT supplier_id, supplier_name, contact_method, rating
FROM Supplier
WHERE supplier_id IN (1, 3, 5);
2. 3, 6, 9
Goods 369
SELECT goods_id, goods_name, specification, supplier_id
FROM Goods
WHERE belonging_warehouse_id IN (3, 6, 9);
1. 2024-11-01 2024-11-10
InboundRecord 2024 11 1 2024 11 10
SELECT inbound_id, goods_id, warehouse_id, quantity_in, inbound_date
FROM InboundRecord
WHERE inbound_date BETWEEN '2024-11-01' AND '2024-11-10';
2. 10 20
Order 10 20
SELECT order_id, customer_id, goods_id, order_quantity, order_date
FROM `Order`
WHERE order_quantity BETWEEN 10 AND 20;
1.
Customer
SELECT customer_id, customer_name, customer_contact, order_history
FROM Customer
WHERE customer_name LIKE '%电%';
2.
Goods
SELECT goods_id, goods_name, specification, production_date, belonging_warehouse_id, supplier_id
FROM Goods
WHERE goods_name LIKE '华为%';
1.
WarehouseEmployee
SELECT w.warehouse_name, e.employee_name, e.department
FROM Warehouse w
JOIN Employee e ON w.warehouse_id = e.managed_warehouse_id;
2.
OrderCustomerGoods
SELECT o.order_id, c.customer_name, g.goods_name
FROM `Order` o
JOIN Customer c ON o.customer_id = c.customer_id
JOIN Goods g ON o.goods_id = g.goods_id;
3.
WarehouseInboundRecordEmployee
SELECT w.warehouse_name, e.employee_name, SUM(ir.quantity_in) AS total_quantity_in
FROM Warehouse w
JOIN Employee e ON w.warehouse_id = e.managed_warehouse_id
JOIN InboundRecord ir ON w.warehouse_id = ir.warehouse_id
GROUP BY w.warehouse_name, e.employee_name;
1. 15
Order 15 GoodsSupplier
SELECT supplier_id, supplier_name, contact_method, ratingFROM SupplierWHERE supplier_id IN (
SELECT supplier_id
FROM Goods
WHERE goods_id IN (
SELECT goods_id
FROM `Order`
WHERE order_quantity > 15
)
);
2.
InboundRecordEmployee
SELECT employee_id, employee_name, departmentFROM EmployeeWHERE managed_warehouse_id IN (
SELECT DISTINCT warehouse_id
FROM InboundRecord
);
3. 3
3
SELECT c.customer_id, c.customer_name, c.customer_contact, c.order_history
FROM Customer c
JOIN (
SELECT customer_id, COUNT(order_id) AS total_orders
FROM `Order`
GROUP BY customer_id
ORDER BY total_orders DESC
LIMIT 3
) AS top_customers ON c.customer_id = top_customers.customer_id;
EXISTS
1.
使 EXISTS
SELECT warehouse_id, warehouse_name, location, capacityFROM Warehouse wWHERE EXISTS (
SELECT 1
FROM Employee e
WHERE e.managed_warehouse_id = w.warehouse_id
);
2.
EXISTS
SELECT warehouse_id, warehouse_name, location, capacityFROM Warehouse wWHERE EXISTS (
SELECT 1
FROM OutboundRecord o
WHERE o.warehouse_id = w.warehouse_id
);
1.使
InboundRecord
SELECT warehouse_id, SUM(quantity_in) AS total_quantity_in
FROM InboundRecord
GROUP BY warehouse_id;
2. 使
OutboundRecord
SELECT goods_id, COUNT(outbound_id) AS outbound_times
FROM OutboundRecord
GROUP BY goods_id;
3. 使
OrderdeliverTransportation使
SELECT o.order_id, o.customer_id, o.goods_id, o.order_date
FROM `Order` o
JOIN deliver d ON o.order_id = d.order_id
JOIN Transportation t ON d.transportation_id = t.transportation_id
WHERE t.transportation_type = '厢式货车';
4.
OrderCustomerGoods
SELECT DISTINCT g.goods_name
FROM `Order` o
JOIN Customer c ON o.customer_id = c.customer_id
JOIN Goods g ON o.goods_id = g.goods_id;

@ -0,0 +1,33 @@
-- 创建管理员用户
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin_password';
-- 授予管理员所有权限针对test数据库
GRANT ALL PRIVILEGES ON test.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
-- 创建仓库操作员用户
CREATE USER 'warehouse_operator'@'localhost' IDENTIFIED BY 'operator_password';
-- 授予仓库操作员相关表权限
GRANT SELECT, UPDATE ON test.warehouse TO 'warehouse_operator'@'localhost';
GRANT SELECT, UPDATE ON test.employee TO 'warehouse_operator'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON test.goods TO 'warehouse_operator'@'localhost';
GRANT INSERT, UPDATE, DELETE, SELECT ON test.inboundrecord TO 'warehouse_operator'@'localhost';
GRANT INSERT, UPDATE, DELETE, SELECT ON test.outboundrecord TO 'warehouse_operator'@'localhost';
GRANT INSERT, UPDATE, DELETE, SELECT ON test.warehouseequipment TO 'warehouse_operator'@'localhost';
FLUSH PRIVILEGES;
-- 创建普通查询用户
CREATE USER 'query_user'@'localhost' IDENTIFIED BY 'query_password';
-- 授予普通查询用户查询权限
GRANT SELECT ON test.warehouse TO 'query_user'@'localhost';
GRANT SELECT ON test.employee TO 'query_user'@'localhost';
GRANT SELECT ON test.goods TO 'query_user'@'localhost';
GRANT SELECT ON test.supplier TO 'query_user'@'localhost';
GRANT SELECT ON test.customer TO 'query_user'@'localhost';
GRANT SELECT ON test.inboundrecord TO 'query_user'@'localhost';
GRANT SELECT ON test.outboundrecord TO 'query_user'@'localhost';
GRANT SELECT ON test.warehouseequipment TO 'query_user'@'localhost';
GRANT SELECT ON test.transportation TO 'query_user'@'localhost';
GRANT SELECT ON test.order TO 'query_user'@'localhost';
GRANT SELECT ON test.deliver TO 'query_user'@'localhost';
FLUSH PRIVILEGES;

@ -0,0 +1,138 @@
3.5.7
1.
DELIMITER //
CREATE TRIGGER check_inbound_quantity_before_insert
BEFORE INSERT ON inboundrecord
FOR EACH ROW
BEGIN
IF NEW.quantity_in < 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '入库数量不能为负数';
END IF;
END //
DELIMITER ;
2.
DELIMITER //
CREATE TRIGGER check_inbound_quantity_before_update
BEFORE UPDATE ON inboundrecord
FOR EACH ROW
BEGIN
DECLARE old_quantity_in INT;
SELECT quantity_in INTO old_quantity_in FROM inboundrecord WHERE inbound_id = OLD.inbound_id;
IF NEW.quantity_in < 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '入库数量不能为负数';
END IF;
END //
DELIMITER ;
3.
DELIMITER //
CREATE TRIGGER check_outbound_quantity_before_insert
BEFORE INSERT ON outboundrecord
FOR EACH ROW
BEGIN
DECLARE current_stock INT;
SELECT SUM(i.quantity_in - o.quantity_out)
INTO current_stock
FROM goods g
LEFT JOIN inboundrecord i ON g.goods_id = i.goods_id
LEFT JOIN outboundrecord o ON g.goods_id = o.goods_id
WHERE g.goods_id = NEW.goods_id
GROUP BY g.goods_id;
IF NEW.quantity_out > current_stock OR current_stock IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '出库数量不能大于库存数量';
END IF;
END //
DELIMITER ;
4.
DELIMITER //
CREATE TRIGGER check_outbound_quantity_before_update
BEFORE UPDATE ON outboundrecord
FOR EACH ROW
BEGIN
DECLARE current_stock INT;
SELECT SUM(i.quantity_in - o.quantity_out)
INTO current_stock
FROM goods g
LEFT JOIN inboundrecord i ON g.goods_id = i.goods_id
LEFT JOIN outboundrecord o ON g.goods_id = o.goods_id
WHERE g.goods_id = NEW.goods_id
GROUP BY g.goods_id;
IF NEW.quantity_out > current_stock OR current_stock IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '出库数量不能大于库存数量';
END IF;
END //
DELIMITER ;
5.
DELIMITER //
CREATE TRIGGER update_warehouse_in_stock_records
AFTER UPDATE ON goods
FOR EACH ROW
BEGIN
IF NEW.belonging_warehouse_id <> OLD.belonging_warehouse_id THEN
UPDATE inboundrecord
SET warehouse_id = NEW.belonging_warehouse_id
WHERE goods_id = NEW.goods_id;
UPDATE outboundrecord
SET warehouse_id = NEW.belonging_warehouse_id
WHERE goods_id = NEW.goods_id;
END IF;
END //
DELIMITER ;
6.
DELIMITER //
CREATE TRIGGER delete_goods_when_supplier_deleted
AFTER DELETE ON supplier
FOR EACH ROW
BEGIN
DELETE FROM goods
WHERE supplier_id = OLD.supplier_id;
END //
DELIMITER ;
7.
DELIMITER //
CREATE TRIGGER update_stock_on_order_insert
AFTER INSERT ON `order`
FOR EACH ROW
BEGIN
DECLARE current_stock INT;
SELECT SUM(i.quantity_in - o.quantity_out)
INTO current_stock
FROM goods g
LEFT JOIN inboundrecord i ON g.goods_id = i.goods_id
LEFT JOIN outboundrecord o ON g.goods_id = o.goods_id
WHERE g.goods_id = NEW.goods_id
GROUP BY g.goods_id;
SET current_stock = current_stock - NEW.order_quantity;
IF current_stock < 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '库存不足,无法生成订单';
ELSE
UPDATE goods
SET inventory_quantity = current_stock
WHERE goods_id = NEW.goods_id;
END IF;
END //
DELIMITER ;
8.
transportation_status_change_history transportation_idchange_time
DELIMITER //
CREATE TRIGGER record_transportation_status_change
AFTER UPDATE ON transportation
FOR EACH ROW
BEGIN
IF NEW.status = '维修中' AND OLD.status <> '维修中' THEN
INSERT INTO transportation_status_change_history (transportation_id, change_time)
VALUES (NEW.transportation_id, NOW());
END IF;
END //
DELIMITER ;

@ -0,0 +1,70 @@
UPDATE
1.
warehouse_id = 1 500
UPDATE warehouse
SET capacity = capacity + 500
WHERE warehouse_id = 1;
2.
employee_id = 11
UPDATE employee
SET department = '后勤部'
WHERE employee_id = 11;
3.
supplier_id = 1 92
UPDATE supplier
SET rating = 92
WHERE supplier_id = 1;
4.
goods_id = 11 warehouse_id = 5
UPDATE goods
SET belonging_warehouse_id = 5
WHERE goods_id = 11;
5.
customer_id = 1 400-123-4567
UPDATE customer
SET customer_contact = '400-123-4567'
WHERE customer_id = 1;
6.
1inbound_id = 1 20
UPDATE inboundrecord
SET quantity_in = quantity_in + 20
WHERE inbound_id = 1;
7.
5outbound_id = 5 '2024-12-21'
UPDATE outboundrecord
SET outbound_date = '2024-12-21'
WHERE outbound_id = 5;
8.
Aequipment_id = 1 3.5
UPDATE warehouseequipment
SET description = '载重 3.5 吨电动叉车,用于高效搬运重物'
WHERE equipment_id = 1;
9.
transportation_id = 2
UPDATE transportation
SET status = '已派出'
WHERE transportation_id = 2;
10.
3order_id = 3 20
UPDATE `order`
SET order_quantity = 20
WHERE order_id = 3;

@ -0,0 +1,114 @@
3.5.4
1. warehouse_employee_info
WarehouseEmployee
Warehouse warehouse_id Employee managed_warehouse_id
便
CREATE VIEW warehouse_employee_info AS
SELECT w.warehouse_name, e.employee_name, e.department
FROM Warehouse w
JOIN Employee e ON w.warehouse_id = e.managed_warehouse_id;
2. order_customer_goods_info
OrderCustomerGoods
Order customer_id Customer customer_id Order goods_id Goods goods_id
便
CREATE VIEW order_customer_goods_info AS
SELECT o.order_id, c.customer_name, g.goods_name
FROM `Order` o
JOIN Customer c ON o.customer_id = c.customer_id
JOIN Goods g ON o.goods_id = g.goods_id;
3. warehouse_inbound_quantity_employee
WarehouseEmployeeInboundRecord
Warehouse warehouse_id Employee managed_warehouse_id Warehouse warehouse_id InboundRecord warehouse_id
CREATE VIEW warehouse_inbound_quantity_employee AS
SELECT w.warehouse_name, e.employee_name, SUM(ir.quantity_in) AS total_quantity_in
FROM Warehouse w
JOIN Employee e ON w.warehouse_id = e.managed_warehouse_id
JOIN InboundRecord ir ON w.warehouse_id = ir.warehouse_id
GROUP BY w.warehouse_name, e.employee_name;
4. suppliers_for_high_quantity_orders
SupplierGoodsOrder
Order 15 Goods Supplier
15
CREATE VIEW suppliers_for_high_quantity_orders AS
SELECT supplier_id, supplier_name, contact_method, rating
FROM Supplier
WHERE supplier_id IN (
SELECT supplier_id
FROM Goods
WHERE goods_id IN (
SELECT goods_id
FROM `Order`
WHERE order_quantity > 15
)
);
5. employees_managing_inbound_warehouses
EmployeeInboundRecord
InboundRecord Employee managed_warehouse_id
便
CREATE VIEW employees_managing_inbound_warehouses AS
SELECT employee_id, employee_name, department
FROM Employee
WHERE managed_warehouse_id IN (
SELECT DISTINCT warehouse_id
FROM InboundRecord
);
6. 3 top_3_customers_by_orders
CustomerOrder
Order customer_id 3 Customer customer_id
3
CREATE VIEW top_3_customers_by_orders AS
SELECT c.customer_id, c.customer_name, c.customer_contact, c.order_history
FROM Customer c
JOIN (
SELECT customer_id, COUNT(order_id) AS total_orders
FROM `Order`
GROUP BY customer_id
ORDER BY total_orders DESC
LIMIT 3
) AS top_customers ON c.customer_id = top_customers.customer_id;
7. warehouses_with_managed_employees
WarehouseEmployee
使 EXISTS Employee managed_warehouse_id Warehouse warehouse_id
便
CREATE VIEW warehouses_with_managed_employees AS
SELECT warehouse_id, warehouse_name, location, capacity
FROM Warehouse w
WHERE EXISTS (
SELECT 1
FROM Employee e
WHERE e.managed_warehouse_id = w.warehouse_id
);
8. warehouses_with_outbound_goods
WarehouseOutboundRecord
EXISTS OutboundRecord warehouse_id Warehouse warehouse_id
CREATE VIEW warehouses_with_outbound_goods AS
SELECT warehouse_id, warehouse_name, location, capacity
FROM Warehouse w
WHERE EXISTS (
SELECT 1
FROM OutboundRecord o
WHERE o.warehouse_id = w.warehouse_id
);
9. orders_delivered_by_van
OrderdeliverTransportation
Order order_id deliver order_id deliver transportation_id Transportation transportation_id
使
CREATE VIEW orders_delivered_by_van AS
SELECT o.order_id, o.customer_id, o.goods_id, o.order_date
FROM `Order` o
JOIN deliver d ON o.order_id = d.order_id
JOIN Transportation t ON d.transportation_id = t.transportation_id
WHERE t.transportation_type = '厢式货车';
Loading…
Cancel
Save