一.数据库分类
1.关系型数据库(EDMS)以数据表为核心
1.1关系数据库代表作
- Oracle:在大型项目中使用(收费)
- MySQL:Web 项目中使用最广泛的关系型数据库(免费)
- Microsoft SQL Server:在微软项目中使用
- SQLite:轻量化数据库,主要用于移动平台
1.2关系型数据库的核心要素
- 数据行(一条数据)
- 数据列(字段)
- 数据表(数据行的集合)
- 数据库(数据表的集合,一个数据 库中有n个数据表)
2.非关系型数据库(不存在数据表的概念)
2.1 将数据以kye,value,文本,图片等形似存储的数据构成
1.Redis 2.MongoDB
(非关系型数据库不常用)
二.SQL介绍
SQL(结构化查询语言),通过SQL语言对数据库进行操作
1.SQL语言的分类
- DQL:数据查询语言,对数据库进行查询(必须熟练掌握)
- DML:数据操作语言,对数据进行增加,修改,删除(insert,update,delete)
- DCL:数据控制语言,进行授权与权限回收(grant,revoke)
- DDL:数据定义语言,进行数据库,数据表的管理(create,drop)
(在MySQL中,默认对SQL语法不区分大小写)
三.MySQL介绍
- MySQL是一个关系型数据库管理系统,属于Oracle(甲骨文)旗下
- MySQL社区版是免费使用的
- 官方网站:www.mysql.com
1.MySQL的特点
开源,社区版免费,支持多平台多语言,使用性广泛,是学习数据库开发与使用的首选
数据库连接工具:Navicat (不免费,由于数据库软件处于服务器中,想要操作数据库,就必须使用工具远程连接数据库)
四.数据类型与约束
1.常用数据类型
- 整数:int,有符号范围(-2147483648 -2147483647),无符号(unsigned)范围(0-4294967295)
- 小数:decimal (例:decimal(5,2)表示共存5位,小数占2位,整数占3位
- 字符串:varchar ,范围(0-65533),例如;varchar(3)表示最多存在三个字符,一个中文或者一个字母都占一个字符
- 日期时间:datetime ,范围(1000-01-01 00:00:00~9999-12-31 23:59:59)例如:‘2020-01-01 12:29:59'
2.约束
- 主键(primary key):能唯一标识表中的每一条记录的所属组
- 非空(not null):此字段不允许填写空值
- 唯一(unique):此字段不允许重复
- 默认值(default):当不填写此值时会使用默认值,如果填写时以填写为准
- 外键(foreign key):一个表中的一个字段引用另一个表的主键
五.数据库的操作
1.创建数据库
- 语法格式
创建数据库
create database 数据库名 【charset】【字符编号】【collate】【校验规则】;
创建结果查看
show create database 数据库名;
- 举例说明
创建一个叫python的数据库
create database python charset=utf8 collate=utf8_general_ci;
查看创建结果
show create database python;
2.数据库的使用
- 语法格式
使用(打开)数据库;
use 数据库名;
查看当前使用的数据库
select database();
- 举例说明
使用(打开)数据库;
use python
3.修改数据库
- 语法格式
alter database 数据库名
default character set 字符名
default collate 校对规则名;
- 举例说明
创建testpython数据库,字符集为gd2312
create database testpython charset = gd2312
修改testpython的指定字符集修改为utf8mb4,默认校对规则修改为utf8mb4_general_ci;
alter database testpython
default character set utf8mb4
defaulr collate utf8mb4_general_ci;
4.删除数据库
- 语法格式
drop database 数据库名;
- 举例说明
删除python数据库
drop database python;
5.数据库其他操作
- 查看所有数据库
show database;
- 备份数据库(重点!!!!!)图形法
在测试工作中,为了防止对数据库产生错误操作或产生垃圾数据,都需要在操作前,适当对数据库进行备份操作
- 恢复数据库 图像法
- 备份数据库 命令法
1,在服务器打开输入命令连接数据库:mysql -u数据库用户名 -p密码
2,在服务器打开输入格式:mysqldump - uroot -p 数据库名 > 数据库名.sql
3,提示输入:数据库密码
- 恢复数据库 命令法
1,在服务器打开输入输入格式:mysql p - uroot -p 数据库名 < 数据库名.sql
2,提示输入:数据库密码
六.数据表的操作
1.创建数据表
语法格式:
- 创建表
create table 表名(
字段名 类型 约束,
字段名 类型 约束
);
- 举例说明
创建学生表,字段要求:姓名(长度为10)
create table students(
name varchar(10)
);
直接获取创表语句的方法
- 查看表
语法格式
show create table 表名;
2.查看表结构(字段)
语法格式
desc 表名;
3.删除表
- 语法格式
格式一:drop table 表名;
格式二:drop table if exists 表名;
- 举例说明
七.数据操作-增删改
1.添加数据
1.1添加一行数据
- 格式一:所有字段设置值,值的顺序与表中字段的顺序对应
说明:主键列是自动增长,插入时需要占位,通常使用0或者default或者null来占位,
后以实际数据为准
insert nto 表名 values(...);
例:插入-一个学生,设置所有字段的信息
- 格式二:部分字段设置值,值的顺序与给出的字段顺序对应
insert into 表名(字段1.,...) values(值1,...);
例子
1.2添加多行数据
- 方式一:将单行插入语句,多句执行,每句分号隔开
举例说明:
insert nto students values(0, '王五', 28,1.78);
insert into students (name,height) values('赵六', 1.68);
- 方式二:写一条insert语句,设置多条数据,数据之间用英文逗号隔开
格式一: insert into 表名 values(...),(...);
例:插入多个学生,设置所有字段的信息
insert into students values(0, ' 亚瑟3' ,23,167.56),(0, '亚瑟4' ,23,167.56);
格式二: insert into 表名(列1....) values(值1...),(值1......);
例:插入多个学生,只设置姓名
insert into students (name) values('老夫子5'),('老夫子6');
2.修改字段值
●语法格式
update 表名 set 列1=值1 ,列2=值2... where 条件
●举例说明
例:修改id为5的学生数据,姓名改为狄仁杰,年龄改为20
update students set name='狄仁杰' ,age=20 where id=5
3.删除表记录
●语法格式
格式一: delete from 表名 where 条件;
●举例说明
例:删除id为6的学生数据
delete from students where id=6;
- 逻辑删除:
对于重要的数据,不能轻易执行 delete 语句进行删除。因为一旦删除,数据无法恢复,这时可以进行逻辑删除。 1、给表添加字段,代表数据是否删除,一般起名 isdelete, 0代表未删除,1代表删除,默认值为0 2、当要删除某条数据时,只需要设置这条数据的 isdelete 字段为1 3、以后在查询数据时,只查询出 isdelete 为0的数据
- 语法类型
1、给学生表添加字段(isdelete),默认值为0,
如果表中已经有数据,需要把所有数据的i sdelete字段更新为0
update students set isdelete=0
2、删除id为1的学生
update students set isdelete=1 where id=1
3、查询未删除的数据
select * from students where isdelete=0
- 其他数据删除方式
格式一;delete from 表名 删除所有数据,但是不重置主键字段的计数
例:delete from stubents;
格式二: truncate table 表名 (删除表的所有数据,保留表结构)
例:删除学生表的所有数据
truncate table students;
格式三: drop table 表名;(删除表,所有数据和表结构都刪掉)
例:删除学生表
drop table students;
Truncate、Delete、 Drop 的区别
1、Delete删除数据时,即使删除所有数据,其中的自增长字段不会从1开始
2、Truncate 删除数据时,其中的自增长字段恢复从1开始
3、Drop 是删除表,所有数据和表结构都删掉
八.数据操作-查询(重点)
1.基础查询
2.复杂查询
- 条件查询:按照一定条件筛选需要的结果
语法格式:
select 字段1,字段2,... from 表名 where 条件;
条件构成:
where后面支持多种运算符, 进行条件的处理
-
比较运算
-
逻辑运算
逻辑运算符:
and(与)
or(或)
not(非)
-
模糊查询
like
% 任意多个任意字符
_ 表示一个任意字符
-
范围查询
in 表示在一个非连续的范围内,格式为 in(...,...)
between ... and ... 表示在一个连续的范围内
-
空判法
判空 is null
判非空 is not null
- 排序:按照一定的排序规则筛选所需结果
1.1 语法格式
select * from 表名 order by 列1 asc/desc,列2 asc/desc,. ..
(将数据按照列1进行排序,如果某些列1的值相同,则按照列2排序,以此类推)
默认按照列值从小到大排列
asc(从小到大排列,即升序)
desc(从大到小排列,即降序)
- 聚合函数:对一组数据进行计算得到-一个结果的实现方法
1.1常用的聚合函数
count(): 查询总记录数
max(): 查询最大值
min0: 查询最小值
sum(): 求和
avg(): 求平均值
- 分组:在同一属性(字段)中,将值相同的放到- -组的过程
1.1简单分组
语法格式
select 字段1,字段2,聚合() from 表名 group by 字段1,字段2...;
1.2分组后筛选:
语法格式:
select 字段1,字段2,聚合() from 表名 group by 字段1,字段2... having 字段1,字段2聚合()
having后面的条件运算符与where的相同
1.3 where与having
●where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
●having是对group by的结果进行筛选
●having 后面的条件中可以用聚合函数,where 后面不可以
例:查询班级平均年龄大于22岁的班级有哪些
select class from students group by class having avg(age)>22;
- 分页: 对大批量数据进行设定数量展示的过程
语法格式
select * from 表名 limit 起始行,数据行
从start开始,获取count条数据
start索引从0开始
分页格式
limit典型的应用场景就是实现分页查询
已知:每页显示m条数据,求:显示第n页的数据
select * from students limit (n-1)*m,m
- 连接查询:将不同 的表通过特定关系连接的过程
内连接:inner join
查询的结果为两个表匹配到的数据
语法格式:
selecr * from 表1 inner join 表2 on 表1 ,列=表2,列
左连接: left join
查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null
语法格式:
selecr * from 表1 left join 表2 on 表1 ,列=表2,列
右连接: right join
查询的结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null
语法格式:
selecr * from 表1 right join 表2 on 表1 ,列=表2,列
- 自关联:将同一表通过特定关系连接的过程
前提: >数据表只有一张2>数据爱中至少有两个字段之间有某种联系
方式:通过给表起别名的形式,将原本只有张的数据表 变为两张,然后通过对应宇段实现连接查询即
可
结合连接查询
- 子查询:在-个查询套入另一个查询的过程
子查询:在-个select语句中,嵌入了另外-个select语句,那么嵌入的select语句称之为子查
询语句
作用:子查询是辅助主查询的,要么充当[条件],要么充当[数据源]
九.数据库拓展内容
1.ER模型
E表示entry, 实体:描述具有相同特征事物的抽象[数据表]
属性:每个实体的具有的各种特征称为属性[数据(表内的字段)]
R表示relationship, 联系:实体之间存在各种关系,关系的类型包括包括一对一、一对多、多对
多[表和表之间的联系])
2.主键与外键
设置主键
删除主键
设置外键
说明:通过外部数据表的字段,来控制当前数据表的数据内容变更,以避免单方面移除数据,导致关联
表数据产生垃圾数据的一种方法
注意:如果大量增加外键设置,会严重影响除数据查询操作以外的其他操作(增/删/改)的操作效率,因
此在实际项目中很少会被采用,但是在面试中容易被问到,
删除外键
十.索引
索引概念
说明:可以大幅度提高查询语句的执行效率
注意:如果大量增加索引设置,会严重影响除数据查询操作以外的其他操作(增/删/改)的操作效率,不
方便过多添加.
设置索引
删除索引
案例