MYSQL数据管理与运用(整本复习知识点重要理论)

### 第一章的命令部分
#### 1. 建库命令
1.1 建立数据库命令
create database 数据库名字;
1.2 查看当前服务器下所有的数据库
show databases;
1.3 查看已创建的指定数据库
show create database 数据库名;
1.4 删除数据库
drop database 数据库名;
1.5 修改数据库
alter database 旧库名 rename 新库名
1.6 切换当前使用数据库
use 数据库名;
#### 2. 建表命令
1. 建表命令的语法
create table 表名(
    列名1 数据类型 [约束],
    列名2 数据类型 [约束],
    列名3 数据类型 [约束],
    ........
    列名n 数据类型 [约束]
);
2. 查看当前数据库下所有的数据表
show tables;
3. 查看指定数据表的结构
desc 数据表的名字;
4. 修改表名
alter table 旧表名 rename 新表名;
5. 修改数据类型
alter table 表名 modify 列名 数据类型;
6. 修改列名
alter table 表名 change 旧列名 新列名 数据类型;
7. 删除列
alter table 表名 drop 列名;
8. 添加列
alter table 表名 add 新列名 数据类型 [约束];
9. 修改列的位置
alter table 表名 modify 列名1 数据类型 first|after 列名2;
10. 删除数据表
drop table 表名;
### 第一章的理论部分
#### 数据库的发展阶段
人工管理阶段  文件系统阶段  数据库系统阶段
#### 数据库的数据模型
1. 层次模型
2. 网状模型
3. 关系模型
4. 面向对象的关系模型
5. NoSQL模型
#### 数据库的特有名词
IOS:
DBMS:数据库管理系统 DataBase ManagerMent System
DBS:DataBase  System  数据库系统  net start mysql57
DB:Database 数据库
TABLE: 数据表  一组相同实体的集合
ROW: 数据行  行  一个具体的实体
COLUMN: 字段 列   属性
#### 打开 关闭MySQL服务器
net start mysql57  启动
net stop mysql57   停止
#### MySQL数据库的系统数据库有哪些:
1. information_schema: 当前服务器下所有的数据库的名字 表的名字 列名  以及数据库中所有数据类型的定义
2. proformance_schema:explain性能测试等管理员工具
3. sys: 相当于前两个数据库结合
4. mysql:核心数据库 存放的是用户 权限 角色等安全信息
默认安装的示例数据库
skaila
world
#### 数据类型
1. 数值类型
整形 int  浮点型:flaot double  定点数类型:decimal(长度,小数点后的精度) decimal适合存放货币
2. 字符串类型
定长字符串 char(n) N=1~255  可变长字符串 varchar(n) n = 0~65535   文本类型 text
3. 二进制数据类型
BLOB: 适合存放图片 视频  音频
4. 日期和时间类型
date 日期
time: 时间
datetime:日期时间
year 年份类型
##### 数据类型需要注意的事项
字符串类型 二进制类型 日期和时间类型 的值都需要单引号!!!

### 第二章 数据库和表的设计
#### 数据完整性
特指数据库中数据的精确性和可靠性
##### 数据完整性的分类
1. 实体完整性
确保表中每一行数据都是唯一的 ,对应的约束: 主键primary key  唯一 unique
自增列: auto_increment 自增列在表中只能有一列
2. 域完整性
确保表中每一列数据的有效性,注意数据类型在一定程度上增强了域完整性
对应的约束: 外键 foreign key  非空 Not null 默认值:default
3. 引用完整性
确保数据库中表和表之间的数据应用关系 约束: 外键
4. 自定义完整性
为了使用户能够根据实际业务的需要,指定相应的规则操作,对应: 存储过程 触发器 规则等

### 使用约束建立数据表
P60~P61 示例2.6   P62 示例2.8  必须能够默写

#### 数据库的设计
1. 需求分析阶段
2. 概念设计阶段
3. 逻辑结构设计阶段
4. 物理实现阶段
5. 实施阶段
6. 运维阶段
##### E-R图
e: entity 实体
r: relation 关系
###### 图形表示
矩形:实体
椭圆:属性
菱形:关系
###### 数据与数据之间的关系
一对一   1:1  一对多 1:M   多对一 N:1  多对多 M:N
#### 数据表设计范式
1. 第一范式 1nf
确保表中每一列数据的原子性, 就是说每一列的数据都不能再被分割
例如: 收货地址信息如果考虑第一范式,就不能采用1列,需要设置: 省  市   区/县    乡镇/街道   详细地址
2. 第二范式 2nf
确保表中的每一列数据都和主键相关(包括直接相关和间接相关)
例如:学生表中 有classid列 还有className列,这时候 className和学生之间就是间接关系
3. 第三范式 3nf
确保表中的每一列数据都和主键是之间相关,没有间接相关的列
###### 设计方式需要注意的细节:
1. 设计表时 最低要求是满足第二范式,虽然第三范式数据冗余少,但是开发成本高

### 第三章 数据操作
#### 添加数据
insert into 表名[(列名1,列名2,.....列名N)] values(值1,值2,......值N);
需要注意的事项:
1. 如果不写表名后的列名 这要求VALUES后的值列表部分中的数值必须和表中列的顺序和数量保持一致
2. 如果写了列名,则values部分的值列名中要求和列名部分一一匹配(顺序和数量都需要一致)
3. 针对auto_increment列的表来说,建议写列名,这样自增列就不需要添加了
4. 默认值,需要调用默认值时,可以直接使用default关键字来代替值
#### 删除数据
delete from 表名 [where 筛选条件];
1. 如果不写WHERE部分则整张表的数据全部被删除
2. delete命令后的WHERE部分支持子查询
truncate table 表名;
也可以删除整表的数据,但是不能进行部分数据删除.同时,如果表中有外键也不允许使用
#### 修改数据
update 表名 set 列名1=值,列名2=值.....列名n=值 [where 筛选条件]
1. 如果不写WHERE部分则整张表的数据全部被修改
#### 运算符
1. 逻辑运算符
NOT   AND   OR
取反  并且   或者
2. 关系运算符 比较运算符
 <  >    <=  >=     等于 =    不等于 !=    <>
 is null 是否为空
 is not null  是否不为空
 in  是否在一组值得范围内
 not in 不在一组值内
 like 模糊查询
 between and    两个值之间  age between 20 and 30     age>=20  and  age<=30
### 第四章 查询
#### 1. 查询命令的语法结构
select 列名1,列名2,......列名N from 表名 [where 筛选条件] [group by 分组列名[,分组列名.....] [having 筛选条件]] [order by 排序列名1 [[asc|desc] 列名2 [asc|desc]]] [limit [偏移量,]行数];
##### 列的别名
两种形式: 第一种 空格 别名
            第二种 as 别名
##### 关键字
distinct : 去除重复行
limit: 返回结果集中限定的行数
asc: 升序
desc:降序
#### 排序
order by 字段名1,字段名2
#### 系统函数

##### 字符串处理函数
concat:连接两个字段 或者是两个字符串进行连接
substring:截取字符串
length:字符串的长度
toUpper: 转大写
todown:转小写
trim:去除左右两边的空格
ltrim:去除左边的空格
rtrim:去除右边的空格
replace:替换字符串
##### 日期时间处理函数
year()  month() day()  dayofweek()
now() 当前的系统日期和时间
curdate() 当前的系统日期
curtime() 当前的系统时间
datediff(日期1,日期2) 去两个日期差值
date_format() 对日期进行格式化操作
##### 数学函数
ABS: 绝对值
ceil:向上取整
floor:向下取整
sqrt:开方

##### 系统函数
database() 返回当前数据库的名字
version() 返回当前数据库的版本

#### 聚合函数
max() 最大值
min() 最小值
sum() 汇总求和
avg() 平均值
count() 求记录的行数
#### 分组查询
group by 列名1....列名N having 筛选条件
having: 特指对分组查询后的结果集进行数据的筛选
注意:having和where区别
where: 数据筛选 形成结果集 或进行分组查询 排序等操作
having: 对分组查询后结果集进行数据的筛选 
where 比 having 先执行
#### 模糊查询
like 关键字
_:某一位
%:任意位

### 多表连接查询
#### 交叉连接
笛卡尔乘积连接 ,它是所有连接的基础
#### 内连接
from 表1 [inner] join 表2 on 表1.公共字段=表2.公共字段
返回两张表之间的交集部分,非交集部分会丢失
#### 外连接
##### 左外连接
from 表1 left [outer] join 表2 on 表1.公共字段=表2.公共字段 
##### 右外连接
from 表1 right [outer] join 表2 on 表1.公共字段=表2.公共字段 
注意:
外连接 出了保留两张表的交集部分外,主表的数据也不会丢失,如果主表的数据没有在从表中出现过,会补NULL显示.
##### 全外连接
MySQL不支持

### 子查询
嵌套在其他查询语句中的查询命令,同时子查询也可以出现在添加 删除 修改命令中
注意:添加命令中如果使用子查询 不得使用values关键字.
通常在添加命令中使用子查询,适用于快速的数据备份操作
子查询和连接查询的区别:
子查询可以替换连接查询
但是连接查询的性能高于子查询
### 第八章 索引和事务
#### 索引
提高查询的性能
##### 索引有哪些
1. 主键索引
2. 唯一索引
3. 外键索引
4. 普通索引
5. 组合索引
6. 分布式索引
7. 全文索引 fullindex 只在myisam数据引擎中可以使用,INNORDB数据引擎不支持.
我们现在使用的MySQL默认都为InnorDB数据引擎,该引擎可以支持事务
MyISAM数据引擎是MySQL5.7版本之前的数据引擎,该引擎不支持事务
##### 索引的注意事项
1. 不用建立太多的索引,会增加数据库的占用空间
2. 避免在经常更新 删除的列上建立索引
3. 避免在列的重复值过多的列上建立索引 ,例如:性别列
4. 数据量小的数据表不适合建立索引

### 事务
一种数据库的执行机制,一个事务可以包含一组SQL命令,这一组命令将作为一个整体运行,要么都运行,要么都不运行
#### 事务的特性
ACID
1. 原子性
2. 一致性
3. 隔离性
4. 持久性
#### 事务对应的代码:
1. 开始一个事务  BEGIN    或者是 start transaction
2. 提交事务   commit
3. 回滚事务  rollback















































































































































































































































































































































你可能感兴趣的:(数据仓库,mysql,前端)