目次
一、前言
所需环境
需求:
背景:
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小时计。
停车场收费管理系统重要完成但不限于以下功能:
- 车位管理(车位有编号,剩余量多少有提示)
- 操作员信息管理
- 停车卡管理(停车卡是停车的依据,也是结算的依据,如某车辆(按车牌)什么时间取得某停车卡,结算时就按这个停车卡来结算)(停车卡可分类别,如:月租卡、特种免费卡、储值卡、时租卡(临时卡)等)
- 车辆入库管理(车牌,日期时间,停车卡等)
- 车辆出库管理(停车卡,车牌,日期时间,计费,操作员等)
背景:
- 一个停车位只能被一辆车占用
- 一个操作员可以有多个停车记录,但一个停车记录只能对应一个操作员
- 一辆车可以拥有多个停车记录(每次进入停车场都要记录)
- 一个停车卡可以对应多个停车记录(即同一个停车卡可以多次进入停车场停放车辆),但一个停车记录只能对应一个停车卡
- 一个停车记录对应一个停车位,一个停车位可以对应多个停车记录(即同一个停车位可以停放多辆车)
- 一个停车记录可以对应一个停车费用(记录出库时盘算),一个停车费用对应一个停车记录
其中:
- 车库包含下列属性:车位号,总车位数,剩余车位数
- 操作员包含下列属性:工号,姓名,性别,年事
- 停车卡包含下列属性:卡号,类型(月租卡、储值卡、临时卡等),停车时间,余额
- 车辆包含下列属性: 车牌号,进场时间
- 停车记录包含下列属性:订单编号,入库时间,出库时间,停车时间,费用
E-R图:
关系模式:
车库(车位号,总车位数,剩余车位数,工号)
操作员(工号,姓名,性别,年事)
停车卡(停车卡号,类型,余额,工号)
车辆(车牌号,进场时间, 停车卡号)
停车记录(订单编号,入库时间,出库时间,停车时间,费用,车牌号)
备注:
下划线为主键,红色字为外键;
数据表的设计:
表1 车库
字段
| 数据类型
| 长度
| 备注
|
| 车位号
| varchar
| 50
| 主键
|
| 总车位数
| int
| 5
|
|
| 剩余车位数
| int
| 5
| Not null
|
| 工号
| varchar
| 50
| 外键
|
| 表2 操作员
字段
| 数据类型
| 长度
| 备注
|
| 工号
| varchar
| 50
| 主键
|
| 姓名
| varchar
| 50
| Not null
|
| 性别
| varchar
| 50
|
|
| 年事
| int
| 5
|
|
| 表3 车辆
字段
| 数据类型
| 长度
| 备注
|
| 车牌号
| varchar
| 50
| 主键
|
| 进场时间
| date
|
| Not null
|
| 停车卡号
| varchar
| 50
| 外键
|
| 表4 停车卡
字段
| 数据类型
| 长度
| 备注
|
| 停车卡号
| varchar
| 50
| 主键
|
| 类型
| varchar
| 10
| Not null
|
| 余额
| float
| 10
|
|
| 工号
| varchar
| 50
| 外键
|
| 表5 停车记录
字段
| 数据类型
| 长度
| 备注
|
| 订单编号
| varchar
| 50
| 主键
|
| 入库时间
| date
|
| Not null
|
| 出库时间
| date
|
| Not null
|
| 停车时间
| int
| 8
|
|
| 费用
| varchar
| 20
|
|
| 车牌号
| varchar
| 20
| 外键
|
| 二、创建数据库
- Create database 车库停车收费管理系统 character set utf8 collate utf8_general_ci
- use 车库停车收费管理系统 //在新建查询选择前选择数据库
复制代码 1.创建各实体表:
(1)操作员:
- CREATE TABLE 操作员 (
- 工号 VARCHAR(50) NOT NULL PRIMARY KEY,
- 姓名 VARCHAR(50) NOT NULL,
- 性别 VARCHAR(50) NOT NULL,
- 年龄 INT NOT NULL
- );
复制代码 (2)车库:
- CREATE TABLE 车库 (
- 车位号 VARCHAR(50) NOT NULL PRIMARY KEY,
- 总车位数 INT NOT NULL,
- 剩余车位数 INT NOT NULL,
- 工号 VARCHAR(50),
- FOREIGN KEY (工号) REFERENCES 操作员(工号)
- );
复制代码 (3)停车卡:
- CREATE TABLE 停车卡 (
- 停车卡号 VARCHAR(50),
- 类型 VARCHAR(10),
- 余额 FLOAT(8),
- 工号 VARCHAR(50),
- PRIMARY KEY (停车卡号),
- FOREIGN KEY (工号) REFERENCES 操作员(工号)
- );
复制代码 (4)车辆:
- CREATE TABLE 车辆 (
- 车牌号 VARCHAR(20) NOT NULL PRIMARY KEY,
- 进场时间 DATETIME NOT NULL,
- 停车卡号 VARCHAR(50) NOT NULL,
- FOREIGN KEY (停车卡号) REFERENCES 停车卡(停车卡号)
- );
复制代码 (5)停车记录:
- CREATE TABLE 停车记录 (
- 订单编号 VARCHAR(50),
- 入库时间 DATETIME,
- 出库时间 DATETIME,
- 停车时间 INT(8),
- 费用 VARCHAR(20),
- 车牌号 VARCHAR(20),
- PRIMARY KEY (订单编号),
- FOREIGN KEY (车牌号) REFERENCES 车辆(车牌号)
- );
复制代码 2.插入信息
(1) 操作员
- INSERT INTO 操作员 VALUES ('Y001', '张三', '男', '28');
复制代码 (2)车库
- 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');
复制代码 (3)停车卡
- 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');
复制代码 (4)车辆
- 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');
复制代码 (5)停车记录
- 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');
复制代码 三、创建触发器
1.车辆进入车库自动发放停车卡
- 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');
复制代码 效果展示:
2. 车辆出库自动更新车位数量
- CREATE TRIGGER 车位更新
- AFTER DELETE ON 车辆
- FOR EACH ROW
- UPDATE 车库 SET 剩余车位数 = 剩余车位数 + 1 WHERE 车位号 = '1';
复制代码 删除车辆数据:
- -- 因为外键约束所以要先删除停车记录
- DELETE FROM 停车记录 WHERE 车牌号 = '粤A123456';
- DELETE FROM 车辆 WHERE 车牌号 = '粤A123456';
复制代码 效果展示:
3.更新车辆进场时间自动更新停车记录进场时间
- AFTER UPDATE ON 车辆
- FOR EACH ROW
- BEGIN
- UPDATE 停车记录 SET 入库时间 = NEW.进场时间
- WHERE 车牌号 = NEW.车牌号;
- END;
复制代码 更新更新车辆进场时间
- UPDATE 车辆 SET 进场时间 = '2023-05-26 08:35:10' WHERE 车牌号 = '粤A123456';
复制代码 效果展示:
4.自动扣费更新余额
- 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 更新余额;
四、答疑解惑
代码有问题或必要其他的查询语句,都可以随时批评留言或接洽博主。
还多请各位小同伴多多点赞支持,你们的支持是我最大的动力。
博主VX:18884281851
谢谢各位的支持~~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |