一: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
)
:
事务一旦提交或回滚,它对数据库中的数据的改变就是永久的