数据库知识总结(MySQL8.0)

目  录

       序 言 数据的存储方式

存储方式

优 点

缺 点

第一章  数据库相关概念

第二章 数据库介绍与安装

第三章  SQL-定义语言DDL

第四章 SQL-数据操作语言DML

第五章 SQL-数据查询语言DQL

第六章 数据完整性

第七章 多表查询

第八章 子查询

第九章 常用函数

第十章 事务

第十一章 视图

第十二章 索引

第十三章 存储过程

第十四章 索引

第十五章 权限管理

第十七章 SQL优化

第十八章 数据库优化

第十九章 数据库范式


数据的存储方式

1)当我们学了面向对象的时候,new了一个Animal对象,是把该对象存储到内存中的.

2)当我们学了IO流以后,是把数据存储到我们电脑上的磁盘文件中的.

3)当我们学了数据库后,是把数据存储到数据库当中的.

数据存储方式

存储方式

优 点

缺 点

数据存储在内存中 读取速度快 断电或重启数据丢失
数据存储在磁盘文件中 永久保存 读取速度相比内存慢\查询效率低\管理不方便
数据存储在数据库 永久保存\读写速读快\方便管理 会占用一定的系统资源

第一章  数据库相关概念

1)关系型数据库(RDBMS)

      关系型数据库是指:使用关系模型,把数据组织到二维表格中,表格与表格之间,数据之间的关系比较紧密,像这样一种数据存储方式就称之为关系型数据库.

      比如:师生关系,部门员工关系;

常用的关系型数据库有:mysql/oracle/sql server/db2...数据库

2)非关系型数据库

      是一种key/value结构的,分布式缓存数据库,比如redis、elasearch

3)数据库(DataBase)

      是指按照一定的数据结构(二维表格形式)来存储、管理数据的仓库。

4)数据库管理系统(DBMS)

     是一款管理、维护数据库的软件。

第二章 数据库介绍与安装

1.MySQL数据库简述

    mysql最早是瑞典AB公司的开发的产品,在2018年的时候被sun以10亿美收购,在2019年sun又被oracle公司收购,目前属性oracle旗下的产品;由于该产品是开源的、体积小的、免费的,基于这些特点,已经被中小型公司作为主要的数据库,目前使用最广泛的版本是mysql8.0版本,mysql的默认端口号为3306.

2.Mysql下载、安装、配置、卸载(win10为例)

2.1下载

2.2安装

2.3配置

此电脑->属性->高级系统变量->环境变量->系统设置

在Path末尾增加;C:\Program Files\MySQL\MySQL Server 8.0\bin

2.4卸载

第三章  SQL语句分类

SQL语言是一种结构化查询语言,英文全称是Structured Query Language,按不同的功能可划分为以下4类:

  • 数据据定义语言DDL(Data Definition Language):主要有CREATE,DROP,ALTER等对逻辑结构有操作的,包括表结构、视图和索引。
  • 数据库查询语言DQL(Data Query Language):主要以SELECT为主
  • 数据操纵语言DML(Data Manipulation Language):主要包括INSERT,UPDATE,DELETE
  • 数据控制功能DCL(Data Control Language):主要是权限控制能操作,包括GRANT,REVOKE,COMMIT,ROLLBACK等。

操作数据库(CRUD)
C(Create):创建数据库

创建数据库:create datebase 数据库名字;

创建数据库,并判断是否存在:create datebase if not exists 数据库名字;

创建数据库并指定字符集:create datebase 数据库名字 character set gbk;

创建数据库,先判定是否存在,并指定字符集:create datebase 数据库名字 if not exists character set gbk;

R(Retrieve):查询数据库

查询所有数据库的名称:show databases;

查看某个数据库的字符集(查看某个数据库的创建语句):show create datebase 数据库名字;

U(Update):修改数据库

修改数据库的字符集:alter datebase 数据库名字 character set 字符集;

D(Delete):删除数据库

删除数据库:drop datebase 数据库名字;

判断数据库存在,删除数据库:drop datebase if exists 数据库名字;

使用数据库

查询当前使用的数据库:select datebase();

使用数据库:use 数据库名字;

操作表(CRUD)
C(Create):创建表

语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
列名3 数据类型3
);
注意:最后一列不加","

创建stu表例子:

create table stu(
    id int,
    name varchar(20),
    sex varchar(2),
    birthday date,
    insert_time timestamp
);


复制表: create table 表名 like 被复制的表名;

R(Retrieve):查询表

查询某个数据库中所有表名字:show tables;

查询表结构:desc 表名称;

U(Update):修改表

修改表名:alter table 表名 rename to 新表名;

修改字符集:alter table 表名 character set 字符集类型;

添加一列:alter table 表名 add 列名 列类型;

修改列名称、类型:alter table 表名 change 列名 新列名 新数据类型;

修改列名称、类型:alter table 表名 modify 列名 新数据类型;

删除列:alter table 表名 drop 列名;

D(Delete):删除表

drop table 表名;

drop table if exists 表名;

第四章 SQL-数据操作语言DML

主要功能是对数据库中的表作增加、删除、修改操作

一、插入数据(INSERT)

insert into tb_user(id,name,age)values(1,"张三",20);

二、删除数据(delete)

delete from tb_user;

三、修改数据(update)

update tb_user set name="李四" where id=1;

第五章 SQL-数据查询语言DQL

主要是对数据库中表作查询操作

例如:select * from tb_user 

第六章 数据完整性

指数据的精确性(Accuracy) 和可靠性(Reliability)

  • 主键约束:主键为在表中存在一列或者多列的组合,能唯一标识表中的每一行。一个表只有一个主键,并且主键约束的列不能为空。
  • 外键约束:外键约束是指用于在两个表之间建立关系,需要指定引用主表的哪一列。只有主表的主键可以被从表用作外键,被约束的从表的列可以不是主键,所以创建外键约束需要先定义主表的主键,然后定义从表的外键。
  • 唯一约束:确保表中的一列数据没有相同的值,一个表可以定义多个唯一约束。
  • 默认约束:在插入新数据时,如果该行没有指定数据,系统将默认值赋给该行,如果没有设置没默认值,则为NULL。
  • Check约束:Check会通过逻辑表达式来判断数据的有效性,用来限制输入一列或者多列的值的范围。在列更新数据时,输入的内容必须满足Check约束的条件。

第七章 多表查询

MySQl的连接查询主要可以分为外连接,内连接,交叉连接

  • 外连接
    外连接主要分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)、全外连接。
    左外连接:显示左表中所有的数据及右表中符合条件的数据,右表中不符合条件的数据为null。

数据库知识总结(MySQL8.0)_第1张图片


右外连接:显示左表中所有的数据及右表中符合条件的数据,右表中不符合条件的数据为null。

数据库知识总结(MySQL8.0)_第2张图片


MySQL中不支持全外连接。

  • 内连接:只显示符合条件的数据

数据库知识总结(MySQL8.0)_第3张图片

  • 交叉连接:使用笛卡尔积的一种连接。
    笛卡尔积,百度百科的解释:两个集合XY的笛卡尔积表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员 。例如:A={a,b},B={0,1,2},A × B = {(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}

举例如下:有两张表分为L表和R表。

L表

数据库知识总结(MySQL8.0)_第4张图片

R表

数据库知识总结(MySQL8.0)_第5张图片

  • 左外连接 :select L.`*`,R.`*` from L left join R on L.b=R.b

数据库知识总结(MySQL8.0)_第6张图片

  • 右外连接:select L.`*`,R.`*` from L right join R on L.b=R.b

数据库知识总结(MySQL8.0)_第7张图片

  • 内连接:select L.`*`,R.`*` from L inner join R on L.b=R.b

  • 交叉连接:select L.`*`,R.`*` from L,R

数据库知识总结(MySQL8.0)_第8张图片

第八章 子查询

子查询:把一个查询的结果在另一个查询中使用

子查询可以分为以下几类:

  • 标量子查询:指子查询返回的是一个值,可以使用 =,>,<,>=,<=,<>等操作符对子查询标量结果进行比较,一般子查询会放在比较式的右侧。
    SELECT * FROM user WHERE age = (SELECT max(age) from user) //查询年纪最大的人
  • 列子查询:指子查询的结果是n行一列,一般应用于对表的某个字段进行查询返回。可以使用IN、ANY、SOME和ALL等操作符,不能直接使用
    SELECT num1 FROM table1 WHERE num1 > ANY (SELECT num2 FROM table2)
  • 行子查询:指子查询返回的结果一行n列
    SELECT * FROM user WHERE (age,sex) = (SELECT age,sex FROM user WHERE name="zhangsan")
  • 表子查询:指子查询是n行n列的一个数据表
    SELECT * FROM student WHERE (name,age,sex) IN (SELECT name,age,sex FROM class1) //在学生表中找到班级在1班的学生

第九章 常用函数

第十章 事务

第十一章 视图

MySQL视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

对其中所引用的基础表来说,MySQL视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。

视图是存储在数据库中的查询的sql 语句,它主要出于两种原因:安全原因,视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。

案列测试:

测试表:user有id,name,age,sex字段

测试表:goods有id,name,price字段

测试表:ug有id,userid,goodsid字段

视图的作用实在是太强大了,以下是我体验过的好处:

作用一:

    提高了重用性,就像一个函数。如果要频繁获取user的name和goods的name。就应该使用以下sql语言。示例:

        select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;

    但有了视图就不一样了,创建视图other。示例

        create view other as select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;

    创建好视图后,就可以这样获取user的name和goods的name。示例:

        select * from other;

    以上sql语句,就能获取user的name和goods的name了。

作用二:

    对数据库重构,却不影响程序的运行。假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结构如下:

        测试表:usera有id,name,age字段

        测试表:userb有id,name,sex字段

    这时如果php端使用sql语句:select * from user;那就会提示该表不存在,这时该如何解决呢。解决方案:创建视图。以下sql语句创建视图:

        create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name;

        以上假设name都是唯一的。此时php端使用sql语句:select * from user;就不会报错什么的。这就实现了更改数据库结构,不更改脚本程序的功能了。

作用三:

    提高了安全性能。可以对不同的用户,设定不同的视图。例如:某用户只能获取user表的name和age数据,不能获取sex数据。则可以这样创建视图。示例如下:

        create view other as select a.name, a.age from user as a;

    这样的话,使用sql语句:select * from other; 最多就只能获取name和age的数据,其他的数据就获取不了了。

作用四:

    让数据更加清晰。想要什么样的数据,就创建什么样的视图。经过以上三条作用的解析,这条作用应该很容易理解了吧

第十二章 索引

第十三章 存储过程

第十四章 索引

第十五章 权限管理

第十七章 SQL优化

(181条消息) mysql数据库优化方案_wjcreator6027的博客-CSDN博客

第十八章 数据库优化(181条消息) mysql数据库优化方案_wjcreator6027的博客-CSDN博客

第十九章 数据库范式

范式可以理解为给数据库中的表设计一些规范,满足这些规范的数据库应该是简洁的,结构清晰的

第一范式:列不可再分割(值不能再拆分)

第二范式:是在第一范式的基础之上,需要满足另外两个条件,要有主键,其次是非主键列必须依赖于主键,而不是只依赖于主键的一部分

第三范式:是在第二范式的基础之上,非主键列必须依赖于主键,不能存在传递依赖

比如:sudent表中(学号\姓名\年龄\性别\所属学院\学院地址\学院电话),这样一种表结构就存在一种依赖性,学号->所属学院->学院地址->学院电话

应该把它拆分成两张表

student表:(学号\姓名\年龄\性别\所属学院)

college表:(所属学院\学院地址\学院电话)

............................

Mysql常见面试题总结

MySQL数据库优化面试题 - 知乎 (zhihu.com)

你可能感兴趣的:(数据库笔记总结(从头到尾),数据仓库,数据库开发,数据库架构)