前言:

什么是JavaWeb?

        Web:全球广域网,也称为万维网(www),能够通过浏览器访问的网站

        JavaWeb:是用Java技术来解决相关web互联网领域的技术栈

  1. 网页:展现数据
  2.  数据库:存储和管理数据
  3.  JavaWeb程序:逻辑处理

第一部分 数据库

(一)数据库相关概念

1.数据库

存储数据的仓库,数据是有组织的进行存储
英文:DataBase,简称 DB

SQL、数据库管理系统、SQL之间的关系

2.数据库管理系统

管理数据库的大型软件。

英文:DataBase Management System,简称 DBMS

3.SQL

英文:Structured Query Language,简称SQL,结构化查询语言。
操作关系型数据库的编程语言。
定义操作所有关系型数据库的统一标准。

(二)MySQL数据库(管理系统)

1.MySQL安装

MySQL官网下载:

2.配置

 (1)添加环境变量

环境娈量里面有很多选项,这里我们只用到Path(路径)这个参数。

为什么在初始化的开始要添加环境变量呢? 
        在黑框(即CMD)中输入一个可执行程序的名字,Windows会先在环境变量中的Path所指的路径中寻找一遍,如果找到了就直接执行,没找到就在当前工作目录找,如果还没找到,就报错。我们添加环境变量的目的就是能够在任意一个黑框直接调用MySQL中的相关程序而不用总是修改工作目录,大大简化了操作。 

 

(2)新建配置文件

新建一个文本档,内容如下:

[mysql]
default-character-set=utf8

[mysqld]
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

文件保存为my.ini

(3)  初始化MySQL

在命令行窗口中敲入mysqld  --initialize-insecure,回车,稍微等待一会,如果出现没有出现报错信息,则证明data目录初始化没有问题,此时再查看MySQL目录下已经有data目录生成。

mysqld  --initialize-insecure

注意:要使用管理员身份运行!!!

(4)  注册MySQL服务

在命令行窗口中敲入mysqld  -install

mysqld  -install

现在你的计算机上已经安装好了MySQL服务了。

(5)  启动MySQL服务

在命令行窗口中敲入net start mysql

net start mysql//启动mysql服务

net stop mysql//停止mysql服务

(6)  在黑框里敲入mysqladmin -u root password 1234,这里的1234就是指默认管理员(即root账户)的密码,可以自行修改成你喜欢的。

mysqladmin  -u  root  password  1234

至此,MySQL配置完毕!

3.登录MySQL

在命令行窗口中输入,mysql -uroot -p1234,若出现下图且左下角为mysq1>,则登录成功。

mysql   -uroot    -p1234

退出mysql:

exit
或quit

登录参数:

mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)

4.MySQL数据模型

关系型数据库

​    关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的 二维表 组成的数据库

优点:

  1. 都是使用表结构,格式一致,易于维护。
  2. 使用通用的SQL语言操作,使用方便,可用于复杂查询。
  3.  数据存储在磁盘中,安全

 

 创建数据库:

create database db1;

(三)SQL

1.SQL简介

  • 英文:Structured Query Language,简称SQL

  • 结构化查询语言,一门操作关系型数据库的编程语言

  • 定义操作所有关系型数据库的统一标准

  • 对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”

2.SQL通用语法

  • SQL语句可以单行或多行书写,以分号结尾。

  • MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
  • 注释:

单行注释:--  注释内容 或 #注释内容(MySQL特有)

-- 后要加空格

  多行注释:/* 注释 */

3.SQL分类

  • DDL(Data Definition Language)数据定义语言,用来定义数据库对象:数据库,表,列等

  • DML(Data Manipulation Language)数据操作语言,用来对数据库中表的数据进行增删改

  • DQL(Data Query Language)数据查询语言,用来查询数据库中表的记录(数据)

  • DCL(Data Control Language)数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户

4.DDL

(1)DDL --操作数据库

1)查询

SHOW DATABASES;

2)创建

  • 创建数据库
CREATE DATABASE 数据库名称;
  • 创建数据库(判断,如果不存在则创建)
CREATE DATABASE IF NOT EXISTS 数据库名称;

3)删除

  • 删除数据库
DROP DATABASE 数据库名称;
  • 删除数据库(判断,如果存在则删除)
DROP DATABASE IF EXISTS 数据库名称;

4)使用数据库

  • 查看当前使用的数据库
SELECT DATABASE();
  • 使用数据库
USE 数据库名称;

(2)DDL--操作表

1)创建(Create)

CREATE TABLE 表名(
	字段名1	数据类型1,
	字段名2	数据类型2,
	...

	字段名n	数据类型n
);

注意:最后一行末尾,不能加逗号!

2)查询(Retrieve)

  • 查询当前数据库下所有表名称
SHOW TABLES;
  • 查询表结构
DESC 表名称;

3)修改(Update)

修改表名

ALTER TABLE 表名 RENAME TO 新的表名;

添加一列

ALTER TABLE 表名 ADD 列名 数据类型;

修改数据类型

ALTER TABLE 表名 MODIFY 列名 新数据类型;

修改列名和数据类型

ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;

删除列

ALTER TABLE 表名 DROP 列名;

4)删除(Delete)

  • 删除表
DROP TABLE 表名;
  • 删除表时判断表是否存在
DROP TABLE IF EXISTS 表名;

5)数据类型

MySQL支持多种类型,可以分为三类:

  • 数值

  • 日期

  • 字符串

 

6)创建案例

需求:设计一张学生表,请注重数据类型、长度的合理性

  1. 编号

  2. 姓名,姓名最长不超过10个汉字

  3. 性别,因为取值只有两种可能,因此最多一个汉字

  4. 生日,取值为年月日

  5. 入学成绩,小数点后保留两位

  6. 邮件地址,最大长度不超过64

  7. 家庭联系电话,不一定是手机号码,可能会出现–等字符

  8. 学生状态(用数字表示,正常、休学、毕业...)

             

  

5.图形化客户端工具---Navicat

​​​​​​

6.DML

(1)添加(insert)

  • 给指定列添加数据
INSERT INTO 表名(列名1,列名2...) VALUES(值1,值2,...);
  • 给全部列添加数据
INSERT INTO 表名 VALUES(值1,值2,.…);
  • 批量添加数据
INSERT INTO 表名(列名1,列名2...)VALUES(值1,值2...),(值1,值2...),(值1,值2,...);
INSERT INTO 表名 VALUES(值1,值2...),(值1,值2,...),(值1,值2,...)...;

查询所有数据

select * from 表名;

(2)修改(update)

修改表数据

UPDATE 表名 SET 列名1=值1,列名=值2,... [WHERE条件];

注意:修改语句中如果不加条件,则将表中所有数据都修改!

(3)删除(delete)

DELETE FROM 表名 [WHERE条件];

注意:删除语句中如果不加条件,则将所有数据都删除!

7.DQL

查询语法

SELECT
	字段列表
FROM
	表名列表I
WHERE
	条件列表
GROUP BY
	分组字段
HAVING
	分组后条件
ORDER BY
	排序字段
LIMIT
	分页限定

(1)基础查询

  • 查询多个字段
SELECT 字段列表 FROM 表名;
SELECT * FROM 表名; -- 查询所有数据

  • 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
  • 起别名
AS: AS也可以省略

(2)条件查询(WHERE)

SELECT 字段列表 FROM 表名 WHERE 条件列表;

 举例:

  • 查询年龄大于20岁的学员信息 
SELECT * FROM test WHERE age>20;
  • 查询年龄大于等于20岁的学员信息
SELECT * FROM test WHERE age>=20;
  • 查询年龄大于等于20岁并且年龄小于等于30岁的学员信息
SELECT * FROM test WHERE age>=20 && age<=30;
或SELECT * FROM test WHERE age>=20 AND age<=30;
或SELECT * FROM test WHERE age BETWEEN 20 AND 30;
  • 查询入学日期在'1998-09-01’到'1999-09-01'之间的学员信息
SELECT * FROM test WHERE date BETWEEN '1998-09-01' AND '1999-09-01'; 
  • 查询年龄等于18岁的学员信息
SELECT * FROM test WHERE age=18;

查询年龄不等于18岁的学员信息

SELECT * FROM test WHERE age!=18;
或者SELECT * FROM test WHERE age<>18;


查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息

SELECT * FROM test WHERE age=18 || age=20 || age=22;
或 SELECT * FROM WHERE age=18 OR age=20 OR age=22;
或 SELECT *FROM WHERE age IN (18,20,22);

查询英语成绩为null的学员信息 

SELECT * FROM test WHERE english IS NULL;

LIKE 占位符

模糊查询 _单个任意字符 %多个任意字符

  • 查询姓'马'的学员信息 
SELECT * FROM test WHERE name LIKE '马%';
  • 查询第二个字是'花'的学员信息
SELECT * FROM test WHERE name LIKE '_花%';
  • 查询名字中包含'德’的学员信息 
     
SELECT * FROM test name LIKE '%德%';

(3)排序查询(ORDER BY)

SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2]...;

排序方式:

  • ASC:升序排列(默认值)

  • DESC:降序排列

注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序!

  • 查询学生信息,按照年龄升序排列
SELECT * FROM test ORDER BY age ASC;
或SELECT * FROM test ORDER BY age;
  • 查询学生信息,按照数学成绩降序排列
SELECT * FROM test ORDER BY math DESC;
  • 查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列 查询学生信息
SELECT * FROM test ORDER BY math DESC,english ASC;
或SELECT * FROM test ORDER BY math DESC,english;

(4)聚合函数

概念: 将一列数据作为一个整体,进行纵向计算.

聚合函数分类:

SELECT 聚合函数名(列名) FROM 表名;

注意: null值不参与所有聚合函数运算!

count()

1.主键

2.*

  • 统计班级一共有多少个学生
SELECT count(id) FROM test;
  • 查询数学成绩的最高分
SELECT max(math) FROM test;
  • 查询数学成绩的最低分
SELECT min(math) FROM test;
  • 查询数学成绩的总分
SELECT sum(math) FROM test;
  • 查询数学成绩的平均分
SELECT avg(math) FROM test;

(5)分组查询(GROUP BY)

SELECT 字段列表 FROM 表名〔MHERE分组前条件限定] GROUP BY 分组字段名[HAVING 分组后条件过滤];

注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义!

where和having区别:

  • 执行时机不一样::where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。

  • 可判断的条件不一样:where不能对聚合函数进行判断,having可以。

执行顺序: where >聚合函数> having

  • 查询男同学和女同学各自的数学平均分
SELECT sex,avgmath FROM test GROUP BY sex;
  • 查询男同学和女同学各自的数学平均分,以及各自人数
SELECT sex,avg(math),count(*) FROM test GROUP BY sex;
  • 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组

SELECT sex,avg(math),count(*) FROM test WHERE math>=70 GROUP BY sex;
  • 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2 
     
SELECT sex,avg(math),count(*) FROM test WHERE math>=70 GROUP BY sex HAVING count(*)>2;

(6)(LIMIT)

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
  • 从开始查询,查询3条数据 
SELECT * FROM test LIMIT 0,3;
  • 每页显示3条数据,查询第1页数据

SELECT * FROM test LIMIT 0,3;
  • 每页显示3条数据,查询第2页数据 
SELECT * FROM test LIMIT 3,3;
  • 每页显示3条数据,查询第3页数据 
     
SELECT * FROM test LIMIT 6,3;

起始索引:从0开始

计算公式:起始索引=(当前页码-1)*每页显示的条数

tips:

  • 分页查询limit是MySQL数据库的方言

  • Oracle分页查询使用rownumbers

  • SQL Server分页查询使用top

实例:

 

 

(a)约束

1.概念&分类

约束的概念:

  • 约束是作用于表中列上的规则,用于限制加入表的数据

  • 约束的存在保证了数据库中数据的正确性、有效性和完整性

约束的分类:

 Tips : MySQL不支持检查约束

 

-- 演示非空约束
INSERT INTO emp (id,name,joindate,salary,bonus) VALUES(2,'李四','1999-11-11',NULL,5000);

-- 演示唯一约束
INSERT INTO emp (id,name,joindate,salary,bonus) VALUES(2,'张三','1999-11-11',8800,5000);

-- 演示默认约束
INSERT INTO emp (id,name,joindate,salary) VALUES(2,'李四','1999-11-11',8800);

-- 演示自动增长:auto_increment:当列是数字类型且唯一约束
 INSERT INTO emp (name,joindate,salary,bonus) VALUES('张三','1999-11-11',8800,5000);
 INSERT INTO emp (id,name,joindate,salary,bonus) VALUES(NULL,'李四','1999-11-11',8800,5000);

2.非空约束

非空约束用于保证列中所有数据不能有NULL值

  • 添加约束
--创建表时添加非空约束
CREATE TABLE 表名(
	列名 数据类型 NOT NULL,
	...
);
--建完表后添加非空约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT  NULL;
  • 删除约束
ALTER TABLE 表名 MODIFY 字段名 数据类型;

3.外键约束

外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

  • 添加约束
--创建表时添加外键约束
CREATE TABLE 表名(
	列名数据类型,
	...
	[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENC ES 主表(主表列名)
);
--建完表后添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FORETGN KEY(外键字段名称)REFERENCES 主表名称(主表列名称);

  • 删除约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

要先创建主表,再创建从表

先添加主表中的数据,再添加从表中的数据

 

--删除外键

alter table emp drop FOREIGNkey fk_emp_dept;

(b)数据库设计

1.数据库设计简介

数据库设计简介

  • 软件的研发步骤

  • 数据库设计概念

    数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型。

    建立数据库中的表结构以及表与表之间的关联关系的过程。

    有哪些表?表里有哪些字段?表和表之间有什么关系?

  • 数据库设计的步骤

    1.需求分析(数据是什么?数据具有哪些属性?数据与属性的特点是什么)

    2.逻辑分析(通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统

    3.物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)

    4.维护设计(1.对新的需求进行建表;2.表优化)

2.表关系

  • 一对一

如:用户和用户详情 一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能

实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)

  • 一对多

如:部门和员工

 

  • 多对多

如:商品和订单

一个商品对应多个订单,一个订单包含多个商品

3.表关系之一对多

实现方式:在多的一方建立外键,指向一的一方的主键

 4.表关系之多对多

实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

 

 

 5.表关系之一对一

实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE) 
 

 

 

6.数据库设计案例

 

(c)多表查询

(d)事务

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐