一、前言
所需环境
需求:
背景:
E-R图:
关系模式:
备注:
数据表的设计:
表1 车库
表2 操作员
表3 车辆
表4 停车卡
表5 停车记录
二、创建数据库
1.创建各实体表:
(1)操作员:
(2)车库:
(3)停车卡:
(4)车辆:
(5)停车记录:
2.插入信息
(1) 操作员
(2)车库
(3)停车卡
(4)车辆
(5)停车记录
三、创建触发器
1.车辆进入车库自动发放停车卡
触发器插入车辆数据:
效果展示:
2. 车辆出库自动更新车位数量
删除车辆数据:
效果展示:
3.更新车辆进场时间自动更新停车记录进场时间
更新更新车辆进场时间
效果展示:
4.自动扣费更新余额
插入停车记录
效果展示:
触发器备注:
四、答疑解惑
1.运行环境:win11;
2.MySQL可视化工具:navicat;
3.数据库:MySql 5.7/8.0等版本均可;
有400个车位(带编号)的停车场位于某地铁站旁边,不能超量停车,计费停车,第一个小时计费2元,后每小时1元,不足1小时的按1小时计。
停车场收费管理系统主要完成但不限于以下功能:
其中:
车库(车位号,总车位数,剩余车位数,工号)
操作员(工号,姓名,性别,年龄)
停车卡(停车卡号,类型,余额,工号)
车辆(车牌号,进场时间, 停车卡号)
停车记录(订单编号,入库时间,出库时间,停车时间,费用,车牌号)
下划线为主键,红色字为外键;
字段 |
数据类型 |
长度 |
备注 |
|
车位号 |
varchar |
50 |
主键 |
|
总车位数 |
int |
5 |
||
剩余车位数 |
int |
5 |
Not null |
|
工号 |
varchar |
50 |
外键 |
字段 |
数据类型 |
长度 |
备注 |
|
工号 |
varchar |
50 |
主键 |
|
姓名 |
varchar |
50 |
Not null |
|
性别 |
varchar |
50 |
||
年龄 |
int |
5 |
字段 |
数据类型 |
长度 |
备注 |
|
车牌号 |
varchar |
50 |
主键 |
|
进场时间 |
date |
Not null |
||
停车卡号 |
varchar |
50 |
外键 |
字段 |
数据类型 |
长度 |
备注 |
|
停车卡号 |
varchar |
50 |
主键 |
|
类型 |
varchar |
10 |
Not null |
|
余额 |
float |
10 |
||
工号 |
varchar |
50 |
外键 |
字段 |
数据类型 |
长度 |
备注 |
|
订单编号 |
varchar |
50 |
主键 |
|
入库时间 |
date |
Not null |
||
出库时间 |
date |
Not null |
||
停车时间 |
int |
8 |
||
费用 |
varchar |
20 |
||
车牌号 |
varchar |
20 |
外键 |
Create database 车库停车收费管理系统 character set utf8 collate utf8_general_ci
use 车库停车收费管理系统 //在新建查询选择前选择数据库
CREATE TABLE 操作员 (
工号 VARCHAR(50) NOT NULL PRIMARY KEY,
姓名 VARCHAR(50) NOT NULL,
性别 VARCHAR(50) NOT NULL,
年龄 INT NOT NULL
);
CREATE TABLE 车库 (
车位号 VARCHAR(50) NOT NULL PRIMARY KEY,
总车位数 INT NOT NULL,
剩余车位数 INT NOT NULL,
工号 VARCHAR(50),
FOREIGN KEY (工号) REFERENCES 操作员(工号)
);
CREATE TABLE 停车卡 (
停车卡号 VARCHAR(50),
类型 VARCHAR(10),
余额 FLOAT(8),
工号 VARCHAR(50),
PRIMARY KEY (停车卡号),
FOREIGN KEY (工号) REFERENCES 操作员(工号)
);
CREATE TABLE 车辆 (
车牌号 VARCHAR(20) NOT NULL PRIMARY KEY,
进场时间 DATETIME NOT NULL,
停车卡号 VARCHAR(50) NOT NULL,
FOREIGN KEY (停车卡号) REFERENCES 停车卡(停车卡号)
);
CREATE TABLE 停车记录 (
订单编号 VARCHAR(50),
入库时间 DATETIME,
出库时间 DATETIME,
停车时间 INT(8),
费用 VARCHAR(20),
车牌号 VARCHAR(20),
PRIMARY KEY (订单编号),
FOREIGN KEY (车牌号) REFERENCES 车辆(车牌号)
);
INSERT INTO 操作员 VALUES ('Y001', '张三', '男', '28');
INSERT INTO 车库 VALUES (1, 400, 43, 'Y001');
INSERT INTO 车库 VALUES (2, 400, 45, 'Y001');
INSERT INTO 车库 VALUES (3, 400, 42, 'Y001');
INSERT INTO 车库 VALUES (4, 400, 46, 'Y001');
INSERT INTO 车库 VALUES (5, 400, 44, 'Y001');
INSERT INTO 车库 VALUES (6, 400, 41, 'Y001');
INSERT INTO 车库 VALUES (7, 400, 49, 'Y001');
INSERT INTO 车库 VALUES (8, 400, 39, 'Y001');
INSERT INTO 车库 VALUES (9, 400, 48, 'Y001');
INSERT INTO 车库 VALUES (10, 400, 47, 'Y001');
INSERT INTO 停车卡 VALUES ('T1001', '月租卡', 500, 'Y001');
INSERT INTO 停车卡 VALUES ('T1002', '特种免费卡', 200, 'Y001');
INSERT INTO 停车卡 VALUES ('T1003', '储值卡', 300, 'Y001');
INSERT INTO 停车卡 VALUES ('T1004', '临时卡', 120, 'Y001');
INSERT INTO 停车卡 VALUES ('T1005', '临时卡', 80, 'Y001');
INSERT INTO 停车卡 VALUES ('T1006', '特种免费卡', 400, 'Y001');
INSERT INTO 停车卡 VALUES ('T1007', '月租卡', 200, 'Y001');
INSERT INTO 停车卡 VALUES ('T1008', '临时卡', 60, 'Y001');
INSERT INTO 停车卡 VALUES ('T1009', '储值卡', 700, 'Y001');
INSERT INTO 停车卡 VALUES ('T1010', '临时卡', 100, 'Y001');
INSERT INTO 车辆 VALUES ('粤A123456', '2023-05-26 08:00:00', 'T1001');
INSERT INTO 车辆 VALUES ('川A23456', '2023-05-25 09:00:00', 'T1002');
INSERT INTO 车辆 VALUES ('川G34567', '2023-05-26 10:00:00', 'T1003');
INSERT INTO 车辆 VALUES ('川J45678', '2023-05-24 11:00:00', 'T1004');
INSERT INTO 车辆 VALUES ('川A56789', '2023-05-24 08:00:00', 'T1005');
INSERT INTO 车辆 VALUES ('川S67890', '2023-05-26 13:00:00', 'T1006');
INSERT INTO 车辆 VALUES ('川A78901', '2023-05-26 14:00:00', 'T1007');
INSERT INTO 车辆 VALUES ('川S89012', '2023-05-27 15:00:00', 'T1008');
INSERT INTO 车辆 VALUES ('川A90123', '2023-05-27 16:00:00', 'T1009');
INSERT INTO 车辆 VALUES ('鲁A01234', '2023-05-25 17:00:00', 'T1010');
INSERT INTO 停车记录 VALUES ('202305260801', '2023-05-26 08:00:00', '2023-05-26 10:00:00', 2, '3', '粤A123456');
INSERT INTO 停车记录 VALUES ('202305270902', '2023-05-25 09:00:00', '2023-05-26 11:00:00', 26, '27', '川A23456');
INSERT INTO 停车记录 VALUES ('202305261003', '2023-05-26 10:00:00', '2023-05-26 12:00:00', 2, '3', '川G34567');
INSERT INTO 停车记录 VALUES ('202305241104', '2023-05-24 11:00:00', '2023-05-24 15:00:00', 4, '5', '川J45678');
INSERT INTO 停车记录 VALUES ('202305240805', '2023-05-24 08:00:00', '2023-05-24 09:00:00', 1, '2', '川A56789');
INSERT INTO 停车记录 VALUES ('202305260806', ' 2023-05-26 13:00:00', ' 2023-05-26 20:00:00', 7, '8', '川S67890');
INSERT INTO 停车记录 VALUES ('202305260807', ' 2023-05-26 14:00:00', ' 2023-05-26 20:00:00', 6, '7', '川A78901');
INSERT INTO 停车记录 VALUES ('202305270808', '2023-05-27 15:00:00', '2023-05-27 20:00:00', 5, '6', '川S89012');
INSERT INTO 停车记录 VALUES ('202305270809', '2023-05-27 16:00:00', '2023-05-27 20:00:00', 4, '5', '川A90123');
INSERT INTO 停车记录 VALUES ('202305250810', '2023-05-25 17:00:00', '2023-05-25 21:00:00', 4, '5', '鲁A01234');
CREATE TRIGGER 自动发放停车卡
AFTER INSERT ON 车辆
FOR EACH ROW
BEGIN
INSERT INTO 停车卡 (停车卡号, 类型, 余额, 工号) VALUES (NEW.车牌号, '临时卡', 0, 'Y001');
END;
INSERT INTO 车辆 VALUES ('川G01234', '2023-05-30 17:00:00', 'T1011');
CREATE TRIGGER 车位更新
AFTER DELETE ON 车辆
FOR EACH ROW
UPDATE 车库 SET 剩余车位数 = 剩余车位数 + 1 WHERE 车位号 = '1';
-- 因为外键约束所以要先删除停车记录
DELETE FROM 停车记录 WHERE 车牌号 = '粤A123456';
DELETE FROM 车辆 WHERE 车牌号 = '粤A123456';
AFTER UPDATE ON 车辆
FOR EACH ROW
BEGIN
UPDATE 停车记录 SET 入库时间 = NEW.进场时间
WHERE 车牌号 = NEW.车牌号;
END;
UPDATE 车辆 SET 进场时间 = '2023-05-26 08:35:10' WHERE 车牌号 = '粤A123456';
CREATE TRIGGER 更新余额
AFTER INSERT ON 停车记录
FOR EACH ROW
BEGIN
UPDATE 停车卡 SET 余额 = 余额 - NEW.费用 WHERE 停车卡号 = (SELECT 停车卡号 FROM 车辆 WHERE 车牌号 = NEW.车牌号);
END;
INSERT INTO 停车记录 VALUES ('202305250811', '2023-05-26 17:00:00', '2023-05-26 21:00:00', 4, '5', '鲁A01234');
查询触发器:Show triggers
删除触发器:DROP TRIGGER 触发器名;
例如:DROP TRIGGER 更新余额;
代码有问题或有什么其他运行环境问题都可以随时私信博主或联系博主QQ:1196094293
博主都会逐一解答,谢谢各位的支持~~