由于考研的准备,知识点很多且凌乱,本着理清知识点的目的,打算分科目整理知识点,这是第一篇博客,可能有很多不足,希望帮助我回忆知识点的同时也能更好地帮助大家。知识点不足或者不正确的请见谅。
提示:本文参考多所高校的考试大纲,可能章节内的知识点有冲突或者位置不正确。
数据库系统的特点及其相关概念;数据模型;数据库系统的结构;网状数据库和层次数据库。
数据:数据库存储的对象,描述事物的记录。
数据库:长期存储在计算机内的数据集合。
数据库管理系统:用于管理数据库的软件。
数据库系统:包括数据库,和数据库管理系统,应用程序,数据库管理员组成的存储,管理,处理和维护的系统。
数据定义
数据操作
数据库的运行管理
数据库的建立和维护
层次模型:
网状模型:
关系模型
关系模型的基本概念;关系代数;关系演算。
关系:通常指一张表。
元组:表中的一行即为一个元组。
属性:表中的一列为属性。
码:码键,表中的某个属性组,可以唯一确定一个元组。
域:一组具有相同数据类型的值的集合,例如:{0,1}、{男,女}。
分量:元组中的一个属性值。
差:A表减去AB量表中共有的。
笛卡尔积:A表的每一行和B表的每一行分别相乘。
选择:选择显示出某一属性满足某种条件的所有元组。
投影:投影属性(列)中消除了重复的元组(行)。
SQL概貌、特点及其相关基本概念;SQL数据定义功能;SQL数据操纵功能;数据查询;视图的定义和作用;SQL数据控制功能。
一、操作库
-- 创建库
create database db1;
-- 创建库是否存在,不存在则创建
create database if not exists db1;
-- 查看所有数据库
show databases;
-- 查看某个数据库的定义信息
show create database db1;
-- 修改数据库字符信息
alter database db1 character set utf8;
-- 删除数据库
drop database db1;
二、操作表
--创建表
create table student(
id int,
name varchar(32),
age int ,
score double(4,1),
birthday date,
insert_time timestamp
);
-- 查看表结构
desc 表名;
-- 查看创建表的SQL语句
show create table 表名;
-- 修改表名
alter table 表名 rename to 新的表名;
-- 添加一列
alter table 表名 add 列名 数据类型;
-- 删除列
alter table 表名 drop 列名;
-- 删除表
drop table 表名;
drop table if exists 表名 ;
一、增加 insert into
-- 写全所有列名
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
-- 不写列名(所有列全部添加)
insert into 表名 values(值1,值2,...值n);
-- 插入部分数据
insert into 表名(列名1,列名2) values(值1,值2);
二、删除 delete
-- 删除表中数据
delete from 表名 where 列名 = 值;
-- 删除表中所有数据
delete from 表名;
-- 删除表中所有数据(高效 先删除表,然后再创建一张一样的表。)
truncate table 表名;
三、修改 update
-- 不带条件的修改(会修改所有行)
update 表名 set 列名 = 值;
-- 带条件的修改
update 表名 set 列名 = 值 where 列名=值;
关于查询语句有很多,这里基础的不再介绍。主要介绍排序查询、聚合函数、模糊查询、分组查询、分页查询、内连接、外连接、子查询
一、基础关键字
BETWEEN…AND (在什么之间)和 IN( 集合)
-- 查询年龄大于等于20 小于等于30
SELECT * FROM student WHERE age >= 20 && age <=30;
SELECT * FROM student WHERE age >= 20 AND age <=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
-- 查询年龄22岁,18岁,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
SELECT * FROM student WHERE age IN (22,18,25);
is null(不为null值) 与 like(模糊查询)、distinct(去除重复值)
-- 查询英语成绩不为null
SELECT * FROM student WHERE english IS NOT NULL;
_:单个任意字符
%:多个任意字符
-- 查询姓马的有哪些? like
SELECT * FROM student WHERE NAME LIKE '马%';
-- 查询姓名第二个字是化的人
SELECT * FROM student WHERE NAME LIKE "_化%";
-- 查询姓名是3个字的人
SELECT * FROM student WHERE NAME LIKE '___';
-- 查询姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';
-- 关键词 DISTINCT 用于返回唯一不同的值。
-- 语法:SELECT DISTINCT 列名称 FROM 表名称
SELECT DISTINCT NAME FROM student ;
二、排序查询 order by
语法:order by 子句
order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
注意:
如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
-- 例子
SELECT * FROM person ORDER BY math; --默认升序
SELECT * FROM person ORDER BY math desc; --降序
三、 聚合函数:将一列数据作为一个整体,进行纵向的计算。
1.count:计算个数
2.max:计算最大值
3.min:计算最小值
4.sum:计算和
5.avg:计算平均数
四、 分组查询 grout by
语法:group by 分组字段;
注意:分组之后查询的字段:分组字段、聚合函数
– 按照性别分组。分别查询男、女同学的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数
SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;
五、 分页查询
- 语法:limit 开始的索引,每页查询的条数;
- 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
- limit 是一个MySQL"方言"
-- 每页显示3条记录
SELECT * FROM student LIMIT 0,3; -- 第1页
SELECT * FROM student LIMIT 3,3; -- 第2页
SELECT * FROM student LIMIT 6,3; -- 第3页
六、内连接查询:
1. 从哪些表中查询数据
2. 条件是什么
3. 查询哪些字段
1.隐式内连接:使用where条件消除无用数据
-- 查询员工表的名称,性别。部门表的名称
SELECT emp.name,emp.gender,dept.name FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
SELECT
t1.name, -- 员工表的姓名
t1.gender,-- 员工表的性别
t2.name -- 部门表的名称
FROM
emp t1,
dept t2
WHERE
t1.`dept_id` = t2.`id`;
2.显式内连接
-- 语法:
select 字段列表 from 表名1 [inner] join 表名2 on 条件
-- 例如:
SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`;
SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;
七、外连接查询
1.左外连接 – 查询的是左表所有数据以及其交集部分。
-- 语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;
-- 例子:
-- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称
SELECT t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;
2.右外连接 – 查询的是右表所有数据以及其交集部分。
-- 语法:
select 字段列表 from 表1 right [outer] join 表2 on 条件;
-- 例子:
SELECT * FROM dept t2 RIGHT JOIN emp t1 ON t1.`dept_id` = t2.`id`;
八、子查询:查询中嵌套查询
-- 查询工资最高的员工信息
-- 1 查询最高的工资是多少 9000
SELECT MAX(salary) FROM emp;
-- 2 查询员工信息,并且工资等于9000的
SELECT * FROM emp WHERE emp.`salary` = 9000;
-- 一条sql就完成这个操作。这就是子查询
SELECT * FROM emp WHERE emp.`salary` = (SELECT MAX(salary) FROM emp);
1.子查询的结果是单行单列的:
子查询可以作为条件,使用运算符去判断。 运算符: > >= < <= =
-- 查询员工工资小于平均工资的人
SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);
2. 子查询的结果是多行单列的:
子查询可以作为条件,使用运算符in来判断
-- 查询'财务部'和'市场部'所有的员工信息
SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部';
SELECT * FROM emp WHERE dept_id = 3 OR dept_id = 2;
-- 子查询
SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部');
3. 子查询的结果是多行多列的:
子查询可以作为一张虚拟表参与查询
-- 查询员工入职日期是2011-11-11日之后的员工信息和部门信息
-- 子查询
SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2011-11-11') t2 WHERE t1.id = t2.dept_id;
-- 普通内连接
SELECT * FROM emp t1,dept t2 WHERE t1.`dept_id` = t2.`id` AND t1.`join_date` > '2011-11-11'
管理用户
添加用户
语法:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
删除用户
语法:DROP USER '用户名'@'主机名';
权限管理
查询权限
-- 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
SHOW GRANTS FOR 'lisi'@'%';
授予权限
-- 授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
-- 给张三用户授予所有权限,在任意数据库任意表上
GRANT ALL ON *.* TO 'zhangsan'@'localhost';
撤销权限
-- 撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';
提示:本章节为CSDN博主「小小张自由—>张有博」的原创文章。
原文链接:https://blog.csdn.net/promsing/article/details/112793260
关系属性上的**索引(index)**是一种数据结构,它允许数据库系统高效地找到在关系中具有该属性指定值的那些元组,而不是扫描关系的所有元组,还可以在一个属性列表上创建索引。
索引对于正确性来说不是必需的,因为它们是冗余的数据结构。
大多数 SQL 实现允许程序员通过数据定义语言的命令对索引的创建和删除进行控制。
1.create index <索引名> on <关系名>(<属性列表>);
2.create unique index
3.drop index<索引名>;
视图是从一个表或是多个表导出的表,视图与表不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中指存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。
如下图所示
在SQL中,外模式一级数据结构的基本单位是视图,视图是从若干基本表和其他视图构造出来的表,这种构造方法采用SELECT语句实现。由于视图不像基本表那样实际存在,因引如何对视图的更新转换成对基本表的更新,是系统应该解决的问题。为了简单起见现在在一般只对“行列子集视图”才能更新。
创建视图的语法:
CREATE VIEW <视图名>(<列表序列>)
AS <SELECT查询语句>
[WITH CHECK OPTION]
如果视图是从单个基本表只使用选择、投影操作导出的,并且包含了基本表的主键,那么这样的视图称为“行列子集视图”,并且可以被执行更新操作,允许用户更新的视图在定义时必须加“WITH CHECK OPTION
”。
删除视图:
DROP VIEW <视图名>
**数据库的安全性:**是指保护数据库以防止不合法使用所造成的数据泄露、更改或损坏。系统安全保护措施是否有效是数据库系统的主要技术指标之一。
1.非授权用户对数据库的恶意存取和破坏
措施:包括用户身份鉴别、存取控制和视图等技术。
2.数据库中重要或敏感的数据被泄露
措施:强制存取控制、数据加密存储和加密传输等。
3.安全环境的脆弱性
措施:加强计算机系统的安全性保证,建立完善的可信标准(安全标准)。
数据库授权机制有两种方式
直接方式和间接方式
a)直接方式就是直接的授权给某个用户
b)间接方式是指先授权给某个角色,然后将该角色赋予一个或多个用户(重点项目中的角色分配是不是这个原理)
数据库完整性的含义和完整性约束条件
含义:数据完整性是指数据的精确性和可靠性。防止低级错误,减少工作量。防止错误信息的输入造成的无效操作或错误信息而提出的
包括外键、约束、规则和触发器。
完整性约束:
实体完整性 : 主键约束 主属性独一无二
参照完整性 : 一个表的外键是另一表的主键值或者为空
用户定义完整性 :某种属性用户来定义约束,比如说性别只能为男女
关系规范化的作用;函数依赖;关系模式的规范化。
用规范化理论来改造关系模式以解决插入异常、删除异常、更新异常、数据冗余问题。
候选码:唯一表示元组的属性或属性组
主码:候选码中选定一个作为主码
主属性:包含在任何一个候选码中的属性称为主属性
非主属性:不包含在任何候选码中的属性成为非主属性
全码:关系模型的所有属性组组成该关系模式的候选码,成为全码
外码:某个关系的主码相应的属性在另一关系中出现,此时改主码在就是另一关系的外码。
什么是数据库范式:设计关系数据库时,遵循不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据冗余越小
为什么引入范式:
1.数据冗余
2.跟新异常
3.插入异常
4.删除异常
第一范式:数据库表的每一列(属性)都是不可分割的数据项
第二范式:在第一范式的基础上消除了非主属性对码的部份依赖,一张表保持一个主键
第三范式:在第二范式的基础上消除了非主属性对码的传递依赖,确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
BCNF范式:在第三范式的基础导航消除了主属性对码的部份依赖和传递依赖
部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
举个例子:通过AB能得出C,通过A也能得出C,通过B也能得出C,那么说C部分依赖于AB。
完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
举个例子:通过AB能得出C,但是AB单独得不出C,那么说C完全依赖于AB.
传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
举个例子:通过A得到B,通过B得到C,但是C得不到B,B得不到A,那么成C传递依赖于A
数据库设计的任务、一般策略、步骤和基本概念;概念结构设计;逻辑结构设计;物理结构设计;数据库实时和维护。
E-R图又称实体关系图,由三部分组成:实体、属性、联系。用来进行关系数据库的系统的概念设计。
实体:用矩形表示,矩形内写实体名。
属性:用椭圆形表示,并用无向边将其与相应实体连接起来。
联系:用菱形表示,零星框内写联系名称,并在无向边的两侧指明是那种关系。
E-R图转换为关系模式的原则:
1:1:两个实体中任选一个,添加另一个实体的主键即可
1:n:在多的一端添加另一端的主键
m:n:需要将联系转换为实体,并在该实体上加上另外两个实体的主键,作为联系实体的主键,再加上联系本身的属性即可
此处实例引用博主 诚o 的文章
原文连接:[https://blog.csdn.net/m0_67828087/article/details/123702624]
数据库的三级模式是外模式、概念模式和内模式。用户级对应外模式,概念级对应概念模式,物理级对应内模式,使不同级别的用户对数据库形成不同的视图。
外模式(用户模式)
外模式又称子模式或用户模式,对应于用户级。它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。外模式是从模式导出的一个子集,包含模式中允许特定用户使用的那部分数据。用户可以通过外模式描述语言来描述、定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data
Manipulation Language,DML)对这些数据记录进行操作。外模式反映了数据库系统的用户观。模式(概念模式)
概念模式又称模式或逻辑模式,对应于概念级。它是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是对数据库中全部数据的逻辑结构和特征的总体描述,是所有用户的公共数据视图(全局视图)。它是由数据库管理系统提供的数据模式描述语言(Data
Description Language,DDL)来描述、定义的。概念模式反映了数据库系统的整体观。内模式(存储模式)
内模式又称存储模式,对应于物理级。它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存储介质上的数据库。内模式由内模式描述语言来描述、定义的。内模式反映了数据库系统的存储观。
数据库的二级映像分为外模式/模式、模式/内模式。数据独立性分为逻辑独立性和物理独立性。
逻辑独立性:是由外模式/模式映像保证的,当模式发生改变时,DBA对外模式/模式的映射做出相应的改变,使外模式保持不变,保证了数据的逻辑独立性
物理独立性:是由模式/内模式映像保证的,当数据库存储结构发生变化时,DBA对模式/内模式映射做出改变,使得模式不变,保证了数据的物理独立性
数据字典是对数据表中的数据元素的定义和描述,目的是对数据流程图中的各个元素进行详尽的说明。数据字典和数据流程图共同构成了系统的逻辑模型。
关系数据库系统的查询优化算法;RDBMS的查询处理步骤;查询优化的基本概念,查询优化的两种类型:代数优化和物理优化。
• 查询优化是关系数据库管理系统的关键技术又是关系数据库管理系统的优点所在
• 减轻了用户对于底层存取路径的负担,只需要关注查询的正确表达上面,而不需要关注查询的效率
• 系统优化后的程序往往比用户程序做的更好
- 查询分析
- 查询检查
- 查询优化
查询优化包括代数优化(优化树)、物理优化
1.选择运算尽量先做
2.投影运算和选择运算同时进行
3.把投影同他前后的双目运算符连接起来- 查询执行
选择操作的实现
连接操作的实现
并发控制基本概念和基本技术;数据库恢复基本概念和基本技术;数据库安全基本概念和基本技术;完整性约束条件。
丢失修改:A修改后,B修改,覆盖了A的修改
脏读:B访问了A修改还未提交的数据。(读的并不是正确的数据)
不可重复读:B读取A数据后,A修改了数据,B再次读取,重复读取的结果并不相同。
幻读:A查时未发现数据,B插入数据后,A想插入,但是发现数据已存在,等A再查时发现数据没有
ps:用并发控制解决以上问题
事务:是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 CAID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务。
- 原子性:事务必须是原子工作单元;对于其数据修改,要么全部执行,要么全部都不执行。
- 一致性:事务在完成时,必须使所有的数据都保持一致状态,在相关数据库中所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有内部的数据结构(如B 树索引或双向链表)都必须是正确的。
- 隔离性:由并发事务所做的修改必须和任何其他并发事务所做的修改隔离。事务查看数据时所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据,这称为可串行性。因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
- 持久性:事务完成之后,它对于系统的影响是永久性的,该修改即使出现系统故障也将一种保持。
封锁是保证事务并行正确性的一种方法,在事务对数据进行操作时申请对其加锁,对数据对象有了一定的控制,在事务释放锁之前其他事务不能对其进行操作
封锁粒度:行级锁和表级锁。封锁粒度越小,发生征用的可能性就越小,系统并发度就越高,但消耗的资源越多(包括获取锁、检查锁、释放锁),需要在所开销和并发程度之间进行权衡
排他锁(X):写锁,只允许当前事务的读与修改,其他事务不可以
共享锁(S):读锁,只允许当前事务的读不许修改,其他事务可以再次加锁可以读。
读写锁
意向锁:支持多粒度封锁,解决表锁可能和之前的行锁冲突问题,原来加表锁之前会每行检查,看是否有行锁存在,非常耗时。现在要锁一行时先加意向锁,这样加表锁时直接进入阻塞状态,不需要一行一行的检查是否有行锁的存在。
一级封锁协议:(解决丢失修改)修改时加X锁,直到事务结束
二级封锁协议:(解决脏读)读时加S锁,用完就修改
三级封锁协议:(解决不可重复读)读时加S锁,直到事务结束
三种故障:
用户标识和鉴别
该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才能提供系统的使用权
存取控制
通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未授权的人员无法存取数据
视图机制
为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
审计
建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人,时间和内容等。
数据加密
对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。
//语法:
create user username@localhost identified by 'passwd';
//如:创建用户www及密码123456,授权主机localhost。
mysql> create user www@localhost identified by '123456';
//语法:
grant all on dbname.* to username@localhost;
//如:授权localhost主机上www管理test数据库的所有权限。
mysql> grant all on test.* to zd@localhost;
包括授权命令GRANT和撤销权限命令REVOKE
Grant和revoke相同 只是将grant to 换为 revoke from
本文相仅为知识点总结,没具体讲解并不全面,喜欢的同学别忘了点赞收藏哦!!