一:JavaWeb相关介绍
Web:全球广域网,也称为万维网(www),能够通过浏览器访问的网站
JavaWeb:是用Java技术来解决相关Web互联网领域的技术栈
JavaWeb流程
1.网页:展现数据
2.数据库:存储和管理数据
3.JavaWeb程序:逻辑处理
二:数据库相关介绍
1 数据库
 
 存储和管理数据的仓库,数据是有组织的进行存储。  
 
 
 数据库英文名是 
  DataBase 
 ,简称 
 DB 
 。  
 
 
 数据库就是将数据存储在硬盘上,可以达到持久化存储的效果。那又是如何解决上述问题的?使用数据库管理系统。 
 
 
 
2 数据库管理系统
 
 管理数据库的大型软件  
 
 
 英文: 
 DataBase Management System 
 ,简称 
  DBMS  
 
 
 在电脑上安装了数据库管理系统后,就可以通过数据库管理系统创建数据库来存储数据,也可以通过该系统对数据库中的数  
 
 
 据进行数据的增删改查相关的操作。我们平时说的 
 MySQL 
 数据库其实是 
 MySQL 
 数据库管理系统。 
 
 
3 常见的数据库管理系统
 
 Oracle 
 :收费的大型数据库, 
 Oracle  
 公司的产品  
 
 
 MySQL 
 : 开源免费的中小型数据库。后来 
  Sun 
 公司收购了 
  MySQL 
 ,而 
  Sun  
 公司又被 
  Oracle  
 收购  
 
 
 SQL Server 
 : 
 MicroSoft  
 公司收费的中型的数据库。 
 C# 
 、 
 .net  
 等语言常使用  
 
 
 PostgreSQL 
 :开源免费中小型的数据库  
 
 
 DB2 
 : 
 IBM  
 公司的大型收费数据库产品  
 
 
 SQLite 
 :嵌入式的微型数据库。如:作为 
  Android  
 内置数据库  
 
 
 MariaDB 
 :开源免费中小型的数据库 
 
 
4 SQL
 
 英文: 
 Structured Query Language 
 ,简称 
  SQL 
 ,结构化查询语言  
 
 
 操作关系型数据库的编程语言  
 
 
 定义操作所有关系型数据库的统一标准,可以使用 
 SQL 
 操作所有的关系型数据库管理系统,以后工作中如果使用到了其  
 
 
 他的数据库管理系统,也同样的使用 
 SQL 
 来操作。  
 
 
5 cmd登录,退出MySQL
 
 右键开始菜单,选择  
 命令提示符  
 ,打开黑框。 在黑框中输入,  
 mysql  
 - 
 uroot  
 - 
 p1234  
 ,回车,出现下图且左下角为  
 
 
 mysql>  
 ,则登录成功。  
 
 
 
 退出 
 mysql 
 :  
 exit   quit  
 
 
 
6 MySQL数据模型
(1)关系型数据库:
 
 关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的 二维表 组成的数据库。 
 
 
 如   
 订单信息表  
 和  
 客户信息表  
 都是有行有列二维表我们将这样的称为关系型数据库。  
 
 
 
 优点:  
 
 
 都是使用表结构,格式一致,易于维护。  
 
 
 使用通用的 
  SQL  
 语言操作,使用方便,可用于复杂查询。  
 
 
 关系型数据库都可以通过 
 SQL 
 进行操作,所以使用方便。  
 
 
 复杂查询。现在需要查询 
 001 
 号订单数据,我们可以看到该订单是 
 1 
 号客户的订单,而 
 1 
 号订单是李聪这个客户。以  
 
 
 后也可以在一张表中进行统计分析等操作。  
 
 
 数据存储在磁盘中,安全。 
 
 
(2)数据模型

 
 如上图,我们通过客户端可以通过数据库管理系统创建数据库,在数据库中创建表,在表中添加数据。创建的每一个数据库 对应到磁盘上都是一个文件夹。 
 
 

 
 小结: 
 MySQL 
 中可以创建多个数据库,每个数据库对应到磁盘上的一个文件夹  
 
 
 在每个数据库中可以创建多个表,每张都对应到磁盘上一个 
  frm  
 文件  
 
 
 每张表可以存储多条数据,数据会被存储到磁盘中  
 MYD  
 文件中  
 
 
三:SQL概述
1 SQL简介
 
 英文: 
 Structured Query Language 
 ,简称 
  SQL  
 
 
 结构化查询语言,一门操作关系型数据库的编程语言  
 
 
 定义操作所有关系型数据库的统一标准  
 
 
 对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为 
 “ 
 方言 
 ” 
 
 
2 通用语法
 
 SQL 语句可以单行或多行书写,以分号结尾,以分号结尾才是一个完整的 
 sql 
 语句。  
 
 
 MySQL  
 数据库的 
  SQL  
 语句不区分大小写,关键字建议使用大写 
 
 
 注释: 
 
 
 单行注释 
 : --  
 注释内容 或 
  # 
 注释内容 
 (MySQL  
 特有 
 ) 
 
 
 注意:使用 
 --  
 添加单行注释时, 
 -- 
 后面一定要加空格,而 
 # 
 没有要求。 
 
 
 多行注释 
 : /*  
 注释 
  */ 
 
 
3 SQL分类
 
 DDL(Data Definition Language)  
 : 数据定义语言,用来定义数据库对象:数据库,表,列等  
 
 
 DDL 
 简单理解就是用来操作数据库,表等  
 
 
 
 DML(Data Manipulation Language)  
 数据操作语言,用来对数据库中表的数据进行增删改  
 
 
 DML 
 简单理解就对表中数据进行增删改  
 
 
 
 DQL(Data Query Language)  
 数据查询语言,用来查询数据库中表的记录 
 ( 
 数据 
 )  
 
 
 DQL 
 简单理解就是对数据进行查询操作。从数据库表中查询到我们想要的数据。  
 
 
 
 DCL(Data Control Language)  
 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户  
 
 
 DCL 
 简单理解就是对数据库进行权限控制。比如我让某一个数据库表只能让某一个用户进行操作等。  
 
 
 
 注意: 以后我们最常操作的是  
 DML  
 和  
 DQL  
 ,因为我们开发中最常操作的就是数据 
 
 
四:DDL:用来操作数据库
1.操作数据库
(1)查询数据库:
show databases; 
(2)创建数据库
create database ;
create database if not exists; 
(3)删除数据库
drop database;
drop database if exists; 
(4)使用数据库
use 数据库名称 
(5)查看当前使用的数据库名称
select database(); 
2.操作表
(1)查询表
<1>查询当前数据库下所有表名称
show tables; 
<2>查询表结构
desc 表名称 
(2)创建表

(3)数据类型

(4)删除表
drop tables 表名;
drop tables if exists 表名; 
(5)修改表


五:DML:对表中数据进行增删改
1 添加数据
 
2 修改数据
 
3 删除数据
![]()
六:DQL:对数据进行查询操作
1 基础查询
 
2 条件查询
(1)清晰
 
 条件列表可以使用以下运算符 
 
 
(2)模糊查询(like关键字)

3 排序查询


4 聚合函数
 
  将一列数据作为一个整体,进行纵向计算 
 
 
  
(1)分类

(2)语法

5 分组查询
 
 
 where  
 和 
  having  
 区别:  
 
 
 执行时机不一样: 
 where  
 是分组之前进行限定,不满足 
 where 
 条件,则不参与分组,而 
 having 
 是分组之后对结果进行过  
 
 
 滤。  
 
 
 可判断的条件不一样: 
 where  
 不能对聚合函数进行判断, 
 having  
 可以。 
 
 
6 分页查询


七:约束
1.概念
 
 约束是作用于表中列上的规则,用于限制加入表的数据  
 
 
 例如:我们可以给 
 id 
 列加约束,让其值不能重复,不能为 
 null 
 值。  
 
 
 
 约束的存在保证了数据库中数据的正确性、有效性和完整性;添加约束可以在添加数据的时候就限制不正确的数据,年龄是3000 
 ,数学成绩是 
 -5 
 分这样无效的数据,继而保障数据的完整性。 
 
 
2.分类
 
 非空约束: 关键字是 
  NOT NULL  
 
 
 保证列中所有的数据不能有 
 null 
 值 
 
 
 
 唯一约束:关键字是  
 UNIQUE  
 
 
 保证列中所有数据各不相同 
 
 
 
 主键约束: 关键字是  
 PRIMARY KEY  
 
 
 主键是一行数据的唯一标识,要求非空且唯一。一般我们都会给没张表添加一个主键列用来唯一标识数据 
 
 
 
 检查约束: 关键字是  
 CHECK  
 
 
 保证列中的值满足某一条件 
 
 
 注意: 
 MySQL 
 不支持检查约束。 
 这样是不是就没办法保证年龄在指定的范围内了?从数据库层面不能保证,以后可以在 
 java 
 代码中进行限制,一样也  
 
 
 可以实现要求。  
 
 
 
 默认约束: 关键字是  
 DEFAULT  
 
 
 保存数据时,未指定值则采用默认值 
 
 
 
 外键约束: 关键字是  
 FOREIGN KEY  
 
 
 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性 
 
 
3.非空约束
(1)概念
 
 
 非空约束用于保证列中所有数据不能有 
 NULL 
 值  
 
(2)语法
 
4.唯一约束
(1)概念
 
 
 唯一约束用于保证列中所有数据各不相同  
 
(2)语法

5.主键约束
(1)概念
 
 
  主键是一行数据的唯一标识,要求非空且唯一 ;一张表只能有一个主键 
 
 
(2)语法

6.默认约束
(1)概念
 
 
  保存数据时,未指定值则采用默认值 
 
 
(2)语法

 
 注意:默认约束只有在不给值时才会采用默认值。如果给了 
 null 
 ,那值就是 
 null 
 值。  
 
 
7.外键约束
(1)概念
 
 
  外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性 
 
 
(2)语法

八:数据库设计
1 .数据库设计简介
(1)软件的研发步骤
 
(2)数据库设计概念
 
 数据库设计就是根据业务系统的具体需求,结合我们所选用的 
 DBMS 
 ,为这个业务系统构造出最优的数据存储模 型。  
 
 
 建立数据库中的 
 表结构 
 以及 
 表与表之间的关联关系 
 的过程。  
 
 
 有哪些表?表里有哪些字段?表和表之间有什么关系? 
 
 
(3)数据库设计的步骤
 
 需求分析(数据是什么 
 ?  
 数据具有哪些属性 
 ?  
 数据与属性的特点是什么)  
 
 
 逻辑分析(通过 
 ER 
 图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)  
 
 
 物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)  
 
 
 维护设计( 
 1. 
 对新的需求进行建表; 
 2. 
 表优化) 
 
 
2.表关系 :一对一
 
 如:用户 和 用户详情  
 
 
 一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性 
 
 
 
 
  实现方式 : 
  在任意一方加入外键,关联另一方主键,并且设置外键为唯一 
  (UNIQUE) 
 
 
 
create table tb_user_desc (
id int primary key auto_increment,
city varchar(20),
edu varchar(10),
income int,
status char(2),
des varchar(100)
);
create table tb_user (
id int primary key auto_increment,
photo varchar(100),
nickname varchar(50),
age int,
gender char(1),
desc_id int unique,
-- 添加外键
CONSTRAINT fk_user_desc FOREIGN KEY(desc_id) REFERENCES tb_user_desc(id)
); 
3.表关系 :一对多
 
 如:部门 和 员工  
 
 
 一个部门对应多个员工,一个员工对应一个部门。 
 
 
 
 实现方式: 
 在多的一方建立外键,指向一的一方的主键 
 
 
 
-- 部门表
CREATE TABLE tb_dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
-- 员工表
CREATE TABLE tb_emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键 dep_id,关联 dept 表的id主键
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES tb_dept(id)
); 
4.表关系 :多对多
 
 如:商品 和 订单  
 
 
 一个商品对应多个订单,一个订单包含多个商品。 
 
 
 
  实现方式 : 
  建立第三张中间表,中间表至少包含两个外键,分别关联两方主键 
 
 
 
-- 订单表
CREATE TABLE tb_order(
id int primary key auto_increment,
payment double(10,2),
payment_type TINYINT,
status TINYINT
);
-- 商品表
CREATE TABLE tb_goods(
id int primary key auto_increment,
title varchar(100),
price double(10,2)
);
-- 订单商品中间表
CREATE TABLE tb_order_goods(
id int primary key auto_increment,
order_id int,
goods_id int,
count int
);
-- 建完表后,添加外键
alter table tb_order_goods add CONSTRAINT fk_order_id FOREIGN key(order_id) REFERENCES
tb_order(id);
alter table tb_order_goods add CONSTRAINT fk_goods_id FOREIGN key(goods_id) REFERENCES
tb_goods(id); 
 九:多表查询
1.介绍
 
  多表查询顾名思义就是从多张表中一次性的查询出我们想要的数据。 
 
 
 
 连接查询: 
 
 
         内连接查询:相当于查询 
 AB 
 交集数据  
 
 
         外连接查询: 
 
 
                左外连接查询 :相当于查询 
 A 
 表所有数据和交集部门数据  
 
 
                右外连接查询 : 相当于查询 
 B 
 表所有数据和交集部分数据  
 
 
 子查询 
 
 
2.内连接查询
-- 隐式内连接
SELECT 字段列表 FROM 表1,表2… WHERE 条件;
-- 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件; 
 
 内连接相当于查询 A B 交集数据  
 
 
 
 
-- 隐式内连接
SELECT * FROM emp,dept WHERE emp.dep_id = dept.did;
-- 显示内连接
select * from emp inner join dept on emp.dep_id = dept.did;
-- 上面语句中的inner可以省略,可以书写为如下语句
select * from emp join dept on emp.dep_id = dept.did;
 
 
3.外连接查询
-- 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
-- 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件; 
 
 左外连接:相当于查询 
 A 
 表所有数据和交集部分数据  
 
 
 右外连接:相当于查询B表所有数据和交集部分数据  
 
 
 
 
 

 
 查询 
 dept 
 表所有数据和对应的员工信息(右外连接)  
 

4.子查询
 
 查询中嵌套查询,称嵌套查询为子查询。  
 

 
 子查询根据查询结果不同,作用不同 : 
 
 
-- 查询 '财务部' 或者 '市场部' 所有的员工的部门did
select did from dept where dname = '财务部' or dname = '市场部';
select * from emp where dep_id in (select did from dept where dname = '财务部' or dname =
'市场部');
-- 查询入职日期是 '2011-11-11' 之后的员工信息
select * from emp where join_date > '2011-11-11' ;
-- 将上面语句的结果作为虚拟表和dept表进行内连接查询
select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where
t1.dep_id = dept.did; 
十:事务
1 概述
 
 数据库的事务( 
 Transaction 
 )是一种机制、一个操作序列,包含了 
 一组数据库操作命令 
 。  
 
 
 事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令 
 要么同时成功,要么同时失败 
 。  
 
 
 事务是一个不可分割的工作逻辑单元。 
 
 


2 语法
-- 开启事务
start transaction;  或   begin;
-- 提交事务
commit;
-- 回滚事务
rollback;
 
3 代码验证
-- 创建账户表
CREATE TABLE account(
id int PRIMARY KEY auto_increment,
name varchar(10),
money double(10,2)
);
-- 添加数据
INSERT INTO account(name,money) values('张三',1000),('李四',1000);
--不加事务演示问题
-- 转账操作
-- 1. 查询李四账户金额是否大于500
-- 2. 李四账户 -500
UPDATE account set money = money - 500 where name = '李四';
-- 3. 张三账户 +500
UPDATE account set money = money + 500 where name = '张三'; 

 
 添加事务 
 sql 
 如下 
 
-- 开启事务
BEGIN;
-- 转账操作
-- 1. 查询李四账户金额是否大于500
-- 2. 李四账户 -500
UPDATE account set money = money - 500 where name = '李四';
-- 3. 张三账户 +500
UPDATE account set money = money + 500 where name = '张三';
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK; 
  
  上面 
  sql 
  中的执行成功进选择执行提交事务,而出现问题则执行回滚事务的语句。以后我们肯定不可能这样操作,而是在 java中进行操作,在 
  java 
  中可以抓取异常,没出现异常提交事务,出现异常回滚事务。 
 
 
4 事务的四大特征
 
 原子性( 
 Atomicity 
 ) 
 :  
 事务是不可分割的最小操作单位,要么同时成功,要么同时失败  
 
 
 一致性( 
 Consistency 
 ) 
  : 
 事务完成时,必须使所有的数据都保持一致状态  
 
 
 隔离性( 
 Isolation 
 ) 
  : 
 多个事务之间,操作的可见性  
 
 
 持久性( 
 Durability 
 ) 
  : 
 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的 
 



















