文章目录

  • 视图
  • 存储过程
  • 触发器

  1. 用户表

用户表的创建:

CREATE TABLE user_info(
id CHAR(18) NOT NULL,
username VARCHAR(10) NOT NULL,
telephone CHAR(11) NOT NULL,
upassword VARCHAR(20) NOT NULL,
PRIMARY KEY(id),
CONSTRAINT CU1 CHECK(telephone LIKE '1%')
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

插入数据:

INSERT INTO `user_info` VALUES
('110108200001011111','赵倩','18310710700','password'),
('110108200002022222','张三','18310710711','123456'),
('110108200003033333','李四','18310710722','654321');
  1. 车次表

车次表的创建:

CREATE TABLE train(
trainnum CHAR(5) NOT NULL,
origin VARCHAR(10) NOT NULL,
destination VARCHAR(10) NOT NULL,
stime CHAR(5),
prize00 INT,
prize01 INT,
prize02 INT,
PRIMARY KEY(trainnum),
CONSTRAINT CU2 CHECK(stime LIKE '__:__')
);

插入数据:

INSERT INTO `train` VALUES
('G1101','北京','天津','09:00',89,59,39),
('G1323','北京','天津','13:30',89,59,39),
('G1434','北京','天津','17:05',89,59,39),
('G2141','天津','北京','09:40',89,59,39),
('G2363','天津','北京','18:00',89,59,39),
('C3444','北京','上海','10:50',319,289,259),
('C3555','北京','上海','16:30',319,289,259),
('C3666','北京','上海','19:50',319,289,259),
('C4566','上海','北京','11:05',319,289,259),
('C4788','上海','北京','18:05',319,289,259),
('C5077','上海','天津','15:25',319,289,259),
('C6098','天津','上海','16:30',319,289,259);
  1. 余票表

余票表的创建:

CREATE TABLE `left_tickets`(
`sdate` DATE,
`trainnum` CHAR(5),
`leftnum00` INT,
`leftnum01` INT,
`leftnum02` INT,
PRIMARY KEY(`sdate`,`trainnum`),
FOREIGN KEY(`trainnum`) REFERENCES train(`trainnum`),
CONSTRAINT CU3 CHECK(`leftnum00`>=0 AND `leftnum01`>=0 AND `leftnum02`>=0)
);

插入数据:

INSERT INTO `left_tickets` VALUES
('2021-12-31','G1101',12,20,36),
('2021-12-31','G1323',12,20,36),
('2021-12-31','G1434',12,20,36),
('2021-12-31','G2141',12,20,36),
('2021-12-31','G2363',12,20,36),
('2021-12-31','C3444',12,20,34),
('2021-12-31','C3555',12,20,36),
('2021-12-31','C3666',12,20,36),
('2021-12-31','C4566',12,20,36),
('2021-12-31','C4788',12,20,36),
('2021-12-31','C5077',12,20,36),
('2021-12-31','C6098',12,20,36),
('2022-01-01','G1101',12,19,36),
('2022-01-01','G1323',12,20,36),
('2022-01-01','G1434',12,20,36),
('2022-01-01','G2141',12,20,36),
('2022-01-01','G2363',12,20,36),
('2022-01-01','C3444',12,20,36),
('2022-01-01','C3555',12,20,36),
('2022-01-01','C3666',12,20,36),
('2022-01-01','C4566',12,20,36),
('2022-01-01','C4788',12,20,36),
('2022-01-01','C5077',12,20,36),
('2022-01-01','C6098',12,20,36),
('2022-01-02','G1101',12,20,36),
('2022-01-02','G1323',12,20,36),
('2022-01-02','G1434',12,20,36),
('2022-01-02','G2141',11,20,36),
('2022-01-02','G2363',12,20,36),
('2022-01-02','C3444',12,20,36),
('2022-01-02','C3555',12,20,36),
('2022-01-02','C3666',12,20,36),
('2022-01-02','C4566',12,20,36),
('2022-01-02','C4788',12,20,36),
('2022-01-02','C5077',12,20,36),
('2022-01-02','C6098',12,20,36),
('2022-01-03','G1101',12,20,36),
('2022-01-03','G1323',12,20,36),
('2022-01-03','G1434',12,20,36),
('2022-01-03','G2141',12,20,36),
('2022-01-03','G2363',12,20,36),
('2022-01-03','C3444',12,20,36),
('2022-01-03','C3555',12,20,36),
('2022-01-03','C3666',12,20,36),
('2022-01-03','C4566',12,20,36),
('2022-01-03','C4788',12,20,34),
('2022-01-03','C5077',12,20,36),
('2022-01-03','C6098',12,20,36);
  1. 已售车票表

已售车票表的创建

CREATE TABLE `sold_tickets`(
`sdate` DATE,
`trainnum` CHAR(5),
`seat` VARCHAR(20),
`userid` CHAR(18) NOT NULL,
PRIMARY KEY(`sdate`,`trainnum`,`seat`),
FOREIGN KEY(`sdate`,`trainnum`) REFERENCES `left_tickets`(`sdate`,`trainnum`),
FOREIGN KEY(`userid`) REFERENCES `user_info`(`id`)
);

插入数据:

INSERT INTO `sold_tickets` VALUES
('2021-12-31','C3444','02-1A','110108200001011111'),
('2022-01-03','C4788','02-4D','110108200001011111'),
('2022-01-01','G1101','01-5C','110108200002022222'),
('2022-01-02','G2141','00-2B','110108200002022222'),
('2021-12-31','C3444','02-8C','110108200003033333'),
('2022-01-03','C4788','02-9A','110108200003033333');

视图

前面3个视图是几种常见的分类,后面2个视图是系统中所需要的。

  1. 出发城市
#行列子视图
CREATE VIEW 出发城市 AS
SELECT DISTINCT origin
FROM train;
  1. 学生车票
#带表达式视图
CREATE VIEW 学生车票(出发城市,到达城市,二等座价格) AS
SELECT origin,destination,`prize02`*0.5
FROM train;
  1. 乘车量
#分组视图
CREATE VIEW 乘车量(日期,车次号,乘客数) AS
SELECT sdate,trainnum,COUNT(*)
FROM sold_tickets
GROUP BY sdate,trainnum;
  1. 车票余量及用户完整信息
#完整系统需要的视图
#车票余量完整信息视图
CREATE VIEW train_info(start_date,origin,destination,trainnum,stime,num00,num01,num02) AS
SELECT left_tickets.`sdate`,train.`origin`,train.`destination`,left_tickets.`trainnum`,
train.`stime`,left_tickets.`leftnum00`,left_tickets.`leftnum01`,left_tickets.`leftnum02`
FROM train,left_tickets
WHERE train.`trainnum`=left_tickets.`trainnum`;
  1. 已购车票及用户完整信息
#用户购买车票完整信息视图
CREATE VIEW user_tickets_info(userid,origin,destination,sdate,stime,trainnum,seat) AS
SELECT sold_tickets.`userid`,train.`origin`,train.`destination`,sold_tickets.`sdate`,
train.`stime`,sold_tickets.`trainnum`,sold_tickets.`seat`
FROM train,sold_tickets
WHERE train.`trainnum`=sold_tickets.`trainnum`;

所有视图的截图在这个专栏的第一个文章里包含了,可以看到。这里也放出链接:
12306购票系统(一)项目介绍

存储过程

  1. 登录
DELIMITER $
CREATE PROCEDURE login(IN telenum CHAR(11),IN pwd VARCHAR(20))
BEGINDECLARE result INT DEFAULT 0;SELECT COUNT(*) INTO resultFROM `user_info`WHERE `user_info`.`telephone`=telenumAND `user_info`.`upassword`=pwd;SELECT result;
END $
  1. 注册
DELIMITER $
CREATE PROCEDURE sign_in(IN id CHAR(18),IN nm VARCHAR(10),IN telenum CHAR(11),IN pwd VARCHAR(20))
BEGININSERT INTO `user_info` VALUES(id,nm,telenum,pwd);SELECT ('注册成功');
END $
  1. 取消订票
DELIMITER $
CREATE PROCEDURE cancel_ticket(IN stdate DATE, IN trainnum CHAR(5),IN userid CHAR(18))
BEGINDELETE FROM `sold_tickets`WHERE `sold_tickets`.`sdate`=stdate AND`sold_tickets`.`trainnum`=trainnum AND`sold_tickets`.`userid`=userid;
END $
  1. 更新购票信息
DELIMITER $
CREATE PROCEDURE buy_update(IN stdate DATE,IN trainnum CHAR(5),IN sw_newnum INT,IN yd_newnum INT,IN ed_newnum INT)
BEGINUPDATE `left_tickets` SET `left_tickets`.`leftnum00`=sw_newnum,`left_tickets`.`leftnum01`=yd_newnum,`left_tickets`.`leftnum02`=ed_newnumWHERE `left_tickets`.`sdate`=stdate AND `left_tickets`.`trainnum`=trainnum;
END $

以上存储过程中,只有1. 登录和2.注册在购票系统中有应用。但是这四个触发器把增删改查都应用到了。

触发器

  1. 购票
    根据所购车票等级,余票量减一
DELIMITER $
CREATE TRIGGER buy_tickets BEFORE INSERT ON sold_tickets FOR EACH ROW
BEGINIF new.`seat` LIKE '02%' THENUPDATE `left_tickets` SET `leftnum02` =`leftnum02`-1WHERE `sdate`=new.`sdate` AND `trainnum`=new.`trainnum`;ELSEIF new.`seat` LIKE '01%' THENUPDATE `left_tickets` SET `leftnum01` =`leftnum01`-1WHERE `sdate`=new.`sdate` AND `trainnum`=new.`trainnum`;ELSEUPDATE `left_tickets` SET `leftnum00` =`leftnum00`-1WHERE `sdate`=new.`sdate` AND `trainnum`=new.`trainnum`;END IF;
END $
  1. 取消订票
    根据取消的车票等级,相应余票加一
DELIMITER $
CREATE TRIGGER cancel_t AFTER DELETE ON sold_tickets FOR EACH ROW
BEGINIF old.`seat` LIKE '02%' THENUPDATE `left_tickets` SET `leftnum02` =`leftnum02`+1WHERE `sdate`=old.`sdate` AND `trainnum`=old.`trainnum`;ELSEIF old.`seat` LIKE '01%' THENUPDATE `left_tickets` SET `leftnum01` =`leftnum01`+1WHERE `sdate`=old.`sdate` AND `trainnum`=old.`trainnum`;ELSEUPDATE `left_tickets` SET `leftnum00` =`leftnum00`+1WHERE `sdate`=old.`sdate` AND `trainnum`=old.`trainnum`;END IF;
END $
  1. 修改座位等级
DELIMITER $
CREATE TRIGGER update_seat AFTER UPDATE ON sold_tickets FOR EACH ROW
BEGINIF new.`seat` LIKE '02%' THENUPDATE `left_tickets` SET `leftnum02` =`leftnum02`-1WHERE `sdate`=new.`sdate` AND `trainnum`=new.`trainnum`;ELSEIF new.`seat` LIKE '01%' THENUPDATE `left_tickets` SET `leftnum01` =`leftnum01`-1WHERE `sdate`=new.`sdate` AND `trainnum`=new.`trainnum`;ELSEUPDATE `left_tickets` SET `leftnum00` =`leftnum00`-1WHERE `sdate`=new.`sdate` AND `trainnum`=new.`trainnum`;END IF;IF old.`seat` LIKE '02%' THENUPDATE `left_tickets` SET `leftnum02` =`leftnum02`+1WHERE `sdate`=old.`sdate` AND `trainnum`=old.`trainnum`;ELSEIF old.`seat` LIKE '01%' THENUPDATE `left_tickets` SET `leftnum01` =`leftnum01`+1WHERE `sdate`=old.`sdate` AND `trainnum`=old.`trainnum`;ELSEUPDATE `left_tickets` SET `leftnum00` =`leftnum00`+1WHERE `sdate`=old.`sdate` AND `trainnum`=old.`trainnum`;END IF;
END $

触发器前两个1. 购票和2.取消订票在系统中有应用,但三个合起来将增删改都实现了。

系列更新结束后会把源代码和相关的文档打包上传成资源。
如果你觉得这篇文章对你有用的话,麻烦点赞,收藏,关注一下。
感谢您的阅读,您的支持是对我最大的鼓励~

【Java+JSP+MySql】12306购票系统(二)数据库相关推荐

  1. Java Swing+Mysql电影购票系统(普通用户/管理员登录+充值购票+影院管理)

    Java Swing+Mysql电影购票系统 文章目录 数据库连接 主要页面 运行截图 文章目录 电影购票系统模拟真实购票流程,在线选座,充值购票,影院信息管理.登录用户分为:普通用户+管理员 数据库 ...

  2. java+jsp+mysql新生报到系统开题报告

    1.1引言 在21世纪这个富有挑战性的时代,中国所决定实施的"科教兴国战略",具有十分重大的意义,显示了我们国家越来越关注人才方面的培养建设.计算机科学在21世纪得到了飞速的发展, ...

  3. 【Java+JSP+MySql】12306购票系统(五)购买车票

    文章目录 选择出行需求 选择车票 确认购买 购买成功页面 选择出行需求 在页面中可以选择出发城市.到达城市以及出发日期. 代码存放在needs.jsp文件中. <%@ page language ...

  4. 【Java+JSP+MySql】12306购票系统(三)JDBC

    文章目录 配置JDBC 列车信息类 用户信息类 操作数据库 配置JDBC 在编写Java程序前需要配置JDBC环境,有很多教程,需要安装一个驱动. 可以自己找来参考,也可以看看以下链接的参考: 如何在 ...

  5. 【Java+JSP+MySql】12306购票系统(四)登录注册

    文章目录 登录 Servlet代码 html代码 注册 Servlet代码 html代码 登录 Servlet代码 Servlet代码所在文件夹位置如下截图所示 登陆的servlet代码文件命名为Lo ...

  6. 基于JAVA高铁在线购票系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA高铁在线购票系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA高铁在线购票系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  7. java毕业设计——基于java+JSP+MySQL的网上购书系统设计与实现(毕业论文+程序源码)——网上购书系统

    基于java+JSP+MySQL的网上购书系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+JSP+MySQL的网上购书系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地 ...

  8. JAVA JSP火车订票系统(JSP订票系统 JSP火车票预订系统)JSP火车票网上购票系统

    JSP火车订票系统(JSP订票系统 JSP火车票预订系统)JSP火车票网上购票系统 大家好,很高兴和大家分享Java项目和经验.不管同学们是出于什么需求.都希望各位计算机专业的同学有一个提高. 本系统 ...

  9. JAVA计算机毕业设计演唱会购票系统计算机(附源码、数据库)

    JAVA计算机毕业设计演唱会购票系统计算机(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclisp ...

  10. Java毕设项目电影院购票系统计算机(附源码+系统+数据库+LW)

    Java毕设项目电影院购票系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ecl ...

最新文章

  1. C语言sscanf()函数(从字符串读取格式化输入,提取需要的信息)
  2. Pandas实用技能,将列(column)排序的几种方法
  3. iOS之深入解析内存管理Tagged Pointer的底层原理
  4. 服务器自动运行python_在虚拟主机中安装了python程序,如何使它在服务器上自动运行?...
  5. html/css小练习2
  6. linux文件编码无法修改,在Linux系统中修改文本的字符编码的方法
  7. 【选手分享】拿不到周冠军,我就只能写个好点的经验分享上首页了
  8. Ubuntu——运维的学习笔记
  9. SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.
  10. 港交所上新衍生工具:“界内证”——交易规则与投资价值全解析
  11. 【Spring-tx】事务。
  12. 人工智能革命(上):通往超级智能之路
  13. AI圣经!《深度学习》中文版隆重上市!美国亚马逊AI领域排名第一畅销书!
  14. 数学基础知识总结 —— 4. 常见函数图像
  15. YOLOv2论文理解
  16. 腾讯云IM购买和接入指南
  17. CUBE+STM32F103 入门
  18. [翼灵物联网工作室例会分享]
  19. web开发权威,一个合格的初级前端工程师需要掌握的模块笔记
  20. 图解JVM垃圾回收机制

热门文章

  1. [转] Web前端开发工程师常用技术网站整理
  2. CAD地形图等图案填充在视口中无法正常显示
  3. Mendeley Destop引用格式自定义调整
  4. java图片二值化_实现图像的二值化(java+opencv)
  5. itextpdf 简介
  6. OpenMP中的常用函数
  7. smtp邮件服务器配置,配置SMTP服务器
  8. 倒计时电路multisim10s_multisim10秒倒计时器
  9. vue 使用vue-print-nb 实现打印功能 和 用针式打印机打印模糊问题
  10. 如何安装xvidcore