01数据库

数据库

    • 1、为什么要使用数据库
    • 2、数据库的类型
    • 3、关系数据库的特点
      • 3.1、理论基础
      • 3.2、具体表象
      • 3.3、编程语言:SQL---结构化查询语言
    • 4、关系数据库产品
    • 5、结构化查询语言(SQL)
      • 5.1、DDL 数据定义语言
      • 5.2、DML 数据操作语言
      • 5.3、DQL 数据查询语言
        • 聚合函数
        • 窗口函数
      • 5.3、DCL 数据控制语言
    • 6、数据类型
      • 6.1 整数
      • 6.2 小数
      • 6.3 字符串
      • 6.4 日期时间
      • 6.5 JSON
    • 7、MySQL图形化客户端工具
    • 8、表关系
    • 9、视图
    • 10、函数
      • 10.1、MySQL内置的函数
      • 10.2 、用户自定义函数(UDF)
    • 11、过程(存储过程)
    • 12 执行计划
    • 13 索引
    • 14、Tips

本章节介绍一下数据库的基础知识,如果大家觉得写得还行,请各位看官点赞收藏

1、为什么要使用数据库

  • 数据持久化:将数据从内存转移到硬盘(长久保存数据的存储介质)

  • 数据库(database)— 存储数据,管理数据

2、数据库的类型

  • 关系数据库
  • 非关系型数据库 NoSQL数据库 —> No SQL —> No, SQL —> Not Only SQL
    • KV数据库
    • 文档数据库
    • 列族数据库
    • 图数据库

3、关系数据库的特点

3.1、理论基础

​ 关系模型–关系代数–关系运算–谓词逻辑

​ 关系运算:选择,投影,笛卡尔积,并集,差集,重命名

3.2、具体表象

用二维表保存数据

  • 行(row)—记录(record)—元组(tuple)

  • 列(col)—字段(field)—属性(attribute)

  • 主键(primary key )

  • 外键(foreign key)

3.3、编程语言:SQL—结构化查询语言

数据定义语言(DDL) - create / drop / alter / rename / truncate
	用于建库建表
数据操作语言(DML) - insert / delete / update / select
数据控制语言(DCL) - grant / revoke
事务控制语言(TCL) - start transaction / commit / rollback

4、关系数据库产品

Oracle/MySQL/DB2/SQLserver/PostgreSQL/MariaDB
MySQL
	reliable/mature/open-source
	中小型网站开发的黄金组合---LAMP=Linux+APache+MySQL+PHP

5、结构化查询语言(SQL)

不区分大小写,声明式编程语言,关注结果不关注过程,领域控制语言(DCL)

5.1、DDL 数据定义语言

Data Definition Language-数据定义语言:create / drop / alter

创建数据库

create database school default charset utf8mb4;
	create database:固定写法
	school:库名
	default charset:设置默认的字符集
	utf8mb4:库中数据的格式,最大4字节的utf-8编码--MySQL8默认

删除数据库

drop database if exists school;  如果数据库不存在也不会报错

修改数据库的字符集

alter database school default charset utf8mb4;  
修改数据库的字符集,不要轻易修改,最好在创建的时候就设置好

切换数据库

use school;

创建数据表

create table tb_student
(
    stu_id integer not null comment '学号',
    stu_name varchar(20) not null comment '姓名',
    stu_gender boolean not null default 1 comment '性别',
    stu_birth datetime default '2000-1-1' comment '出生日期',
    primary key (stu_id)
) engine=innodb comment '学生表';
:: comment--起解释作用
:: default--默认

删除表

drop table if exists tb_student;

修改表

修改表添加列----alter table tb_student add column 新列的信息
alter table tb_student add column stu_addr varchar(200) default '' comment '家庭住址';
alter table tb_student add column stu_tel varchar(20) not null comment '联系电话';
修改表删除列
alter table tb_student drop column stu_tel;
修改表修改列
修改列的信息
alter table tb_student modify column stu_gender char(1) default '男' comment '性别';
修改列的名字
alter table tb_student change column stu_gender stu_sex char(1) not null default 'M' comment '性别';

5.2、DML 数据操作语言

数据操作语言

插入数据

insert into 表名 (列名,...)  values (...,...,....);
批处理--批量插入数据
insert into 表名 (列名,...)  values (...,...,....),(...,...,....),(...,...,....)...;

删除数据

-- 在删除操作中,=表示相等性判断,不是复制操作
-- 删除的时候通常会带上where子句,而其中条件通常都是主键 
delete from 表名 where 判断条件
-- 删除college_id为5的数据
delete from college where college_id=5;
-- 删除college_id 为 3 和 4 的数据
delete from college where college_id in (3,4);
delete from college-- 删除全表的话会报错,如果必须要这种操作,必须要将安全模式关掉
on delete set null--设置为空值,在删除父表的时候子表将引用父表的列设置为空-前提是该项允许为空
on update cascade--级联,在更新父表的时候子表也会同时更新
on update restrict--默认restrict表示不允许父表删除和更新

更新数据

update

01数据库_第1张图片
01数据库_第2张图片

5.3、DQL 数据查询语言

查询数据

select

01数据库_第3张图片

聚合函数

sum / avg / max / min / count / var_pop / var_samp / stddev_pop / stddev_samp /

窗口函数

rank / dense_rank / row_number / lead / lag
rank() over (partition by ... order by ...)

5.3、DCL 数据控制语言

数据控制语言

-- 授权
grant  
-- 召回 
revoke

01数据库_第4张图片

6、数据类型

通过mysql的帮助系统 了解mysql的数据类型

help data types; / ? data types;

6.1 整数

bigint(64bit--->8byte--->-2^63~2^63-1)	bigint unsigned(0~2^64-1)
integer/int(32bit--->4byte--->-2^31~2^31-1)
smallint(16bit--->2byte--->-32768~32767)
tinyint(8bit--->1byte-->-128~127)

6.2 小数

float/double-->不推荐使用
decimal-->decimal(10,2)--10为有效长度,2位小数个数

6.3 字符串

char
varchar--->varchar(20)---65535/16383
longtext-->4G--->不推荐使用

6.4 日期时间

date
time
datetime
timestamp--时间戳---不推荐使用

6.5 JSON

json数组
json对象

7、MySQL图形化客户端工具

MySQL WOrkbench---> 免费,强大,界面不够漂亮
Navicat for MySQL/Premium---> 商业软件
SQLyog---> CE/EE

8、表关系

多对一/一对多关系:在多的一方添加外键列

​ eg:员工-部门,用户-订单

多对多关系:使用中间表,将多对多变成两个一对多关系

​ eg:学生-课程,读者-图书,订单-商品

一对一关系:一对一关系是多对一关系的特例,在多的一方添加外键列

​ eg:用户-身份证,人-指纹,网卡-MAC地址

9、视图

视图(View)是一种虚拟表,它是基于一个或多个表的查询结果而创建的。与实际的物理表不同,视图并不实际存储数据,而是根据查询语句动态地生成结果集。

视图可以看作是一个虚拟的表格,它提供了一种方便的方式来查询和处理数据。通过视图,可以将多个表中的数据组合在一起,从而实现更复杂的查询和分析。

10、函数

封装 在功能上相对独立且会被重复使用的代码

10.1、MySQL内置的函数

字符串函数/ 数值函数 / 逻辑控制函数 / 聚合函数 / 开窗函数(窗口函数)

10.2 、用户自定义函数(UDF)

create function foo(param1 type1,param2 type2)
returns type3 no sql
begin

end

11、过程(存储过程)

把一组SQL语句放在一起,加入程序逻辑,提前编译好保存在服务器上,

将来需要使用这组SQL语句时,直接调用即可

互联网产品因为会遭遇高并发和大流量,所以不推荐使用存储过程,因为使用存储过程会增加数据库的开销。

创建存储过程
create procedure foo(in param1 type1,out param2 type2)
begin

end

使用游标
declare c cursor for select ...;
open c;
fetch c into ...;
close c;

把多个写数据的操作(增删改)视为不可分割的原子性操作,要么全都成功,要么全都失败。

12 执行计划

explain
-- type--->ALL --> index -->range --> ref --> eq_ref --> const
-- key--->实际用到的索引
-- rows--->预估扫描的行数
-- extra

13 索引

主键上自带索引,索引就是数据本身—>聚集索引

我们自己创建的索引都是非聚集索引—>通过列找到主键—>通过主键查聚集索引得到数据

索引通常要创建在经常用作查询条件的列上(where子句)

索引需要额外的存储空间,而且索引虽然让查询变快了,但是增删改操作都会变得更慢,不要滥用索引!!!

​ 复合索引遵循最左匹配原则

​ 模糊查询如果遵循最左匹配索引也能用

where子句中使用了or,在索引列上使用函数都会导致索引失效

~ 创建索引

create index ... on ... (.... ...);

~ 删除索引

drop index ... on ...;
alter table ... drop index ... ;

~索引的底层结构是B+树,因为它有非常好的I/0性能。

14、Tips

~ 加密:把明文变成密文的过程叫加密,把密文变回明文的过程叫解密。
- 对称加密:加密和解密是同一个密钥。
- 非对称加密:加密和解密不是同一个密钥,有公钥和私钥之分。
~ 摘要:通过一个单向哈希函数给一个对象生成一个签名(指纹)。
- MD5 / SHA1 / SHA256
~ 编码:从一种表示方式转换成另外的表示方式,逆操作叫做解码。

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