关于MySQL的学习笔记(超详细超完整)

SQL

1.什么是数据库?

​ 1)全称: DataBase 简称:DB
​ 2)数据库其实就是按照一定的格式进行存储数据的一些文件或者文件集合
​ 理解:存储数据的仓库,而这些数据在实时存储的过程中是有特定格式的.

2.什么是数据库管理系统?

​ 1)全称: DataBaseManagement System 简称:DBMS

2).数据库管理系统专用来管理数据库中数据
可以对数据库中的数据进行增删改查操作

3)数据库管理系统类型:
(1)关系型数据库
a.以行和列的方式进行存储
b.常见的关系型数据库:
Mysql Oracle sqlServer DB2 MariaDB
sybase MariaDB
(2)非关系型数据库 - 大数据背景下产生
a.数据结构化存储方式的集合
b.常见的非关系型数据库:
MongoDB Redis Hbase neo4j

3.安装Mysql数据库管理系统

​ 1).默认安装
​ 2).需要进行myql数据库的配置
​ Mysql默认端口号: 3306
​ 端口号通常会和IP地址在一起,IP地址是用来定位计算机的,而端口号是用来定位计算机中某个服务器/应用!

4.配置MYSQL环境变量

​ 1).其实就是配置MYSQL的bin目录
​ 2).默认路径:
​ C:\Program Files\MySQL\MySQL Server 8.0\bin
​ 3).我的电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> 系统变量 -> path -> 添加默认路径(bin)

5.安装的配置

​ 1).Mysql Server --> Mysql服务
​ Mysql workbench --> Mysql官方客户端

2).连接服务器的协议:
C/S -> Client(客户端)/Server(服务器) TCP/IP协议
B/S -> Broswer(浏览器)/Server(服务器) HTTP协议

3).ip + 端口号(port) -> 套接字
a. ip:
本机IP: 127.0.0.1
域名:DNS

​ b. 端口号
​ 端口号是唯一的,所以可以根据端口号找到电脑上相对应的程序.

​ Mysql: 默认3306
​ Oracle: 默认1521
​ SQLServer: 默认1433
​ Tomcat: 默认80

6.命令行使用mysql服务

​ 1). mysql -hlocalhost(127.0.0.1) -uroot -p
​ 2)查看所有数据库
​ show databases;
​ 注意: 以英文的 ; 结尾
​ 3)切换选择数据库
​ use + 数据库名
​ 4)创建一个数据库
​ create database 数据库名
​ 5)退出mysql
​ exit/quit

7.常见连接数据库的客户端:

​ workbench --只能连接mysql

SQL Developer --只能连接Oracle,纯java开发的,依赖JRE

navicat --支持连接多种数据库

SQLog --支持连接多种数据库(win)

PLSQL --支持连接多种数据库

8.他们之间都存在什么样的关系?

​ 数据库 数据库管理系统 表 记录

任何一张表中都是存在行 和 列
行(row): 被称为记录/数据
列(column): 被称为字段

总结:
1.一个数据库管理系统中包含多个数据库
2.一个数据库中包含多张表
3.一张表中包含多条记录

9.什么是SQL?

​ 全称: Structured Query Language
​ 结构化查询语言

SQL是一套标准,DBMS负责执行SQL语句,来最终完成的数据库中的增删改查操作

10.SQL语句中的分类有哪些?

​ DQL:数据查询语言
​ 凡是带有select关键词的都是属于查询语句
​ select…

DML:数据操作语言
凡是对表中的数据进行增删改的操作
insert:增
delete:删
update:改

DDL:数据定义语言
凡是带有create drop alter都是属于DDL
主要操作的是表的结构,而不是表中的数据
create:增
drop:删
alter:改
show:查

TCL:事务控制语言
事务提交:commit
事务回滚:rollback

DCL:数据控制语言
对用户权限进行设置
例如:
grant(授权)
revoke(撤销权限)

DDL:数据定义语言
一.操作数据库:CRUD

1.C(Create):创建
创建数据库:
create database 数据库名字;
创建数据库之前,判断是否存在,再进行创建:
create database if not exists 数据库名字;

2.R(Retrieve):查询
查询所有数据库的名字:
show database;
查询某个数据库的字符集;查询某个数据库的创建语句
show create database 数据库名字.

3.U(update): 修改
修改数据库的字符集
alter database db_2107 character set ‘字符集名字’

4.D(delete):删除
删除数据库
drop database 数据库名字;

删除数据库之前,进行判断
drop database if exists 数据库名字;

二.操作表:CRUD

​ 1.C(Create):创建
​ create table user(
​ id int comment ‘序号’,
​ name varchar(20) comment ‘名字’,
​ age int(3) comment ‘年龄’
​ );
​ 注意: 最后一列,不需要添加 (,)

​ Mysql数据类型 和 Oracle数据类型对比:
​ 1).数值类型
​ 整数类型
​ int: 不规定长度
​ int(2):最大值99,以10进制方式输出

​ 小数类型:
​ double - 不规定长度
​ double(3,1) - 最大值为99.9,一共有3位数,其中一位是小数

​ oracle数值类型:
​ number(3)
​ number(3,1)

​ 2)文本类型:
​ varchar: 字符串
​ varchar(20): 最大长度为20
​ char(3): 固定长度为3

​ 3)时间类型:
​ date:日期,只包含年月日
​ datetime:日期,包含年月日时分秒
​ timestamp:日期包含年月日时分秒
​ 如果不给这个字段赋值,或者赋值为null
​ 则默认使用当前系统时间,自动赋值

2.R(Retrieve):查询
查询某个数据库中的所有表名称:
show tables;
查询表结构:
desc 表名;
3.U(update): 修改
修改表名:
alter table 表名 rename to 新的表名
修改列名:
alter table 表名 change 列名 新列名 新列名类型;
修改列的类型:
alter table 表名 modify 列名 新数据类型
新增列:
alter table 表名 add 列名 数据类型
修改表的字符集:
alter table 表名 character set ‘字符集名字’

4.D(delete):删除
drop table 表名;
drop table if exists 表名;

DML:数据操作语言

1.添加数据:
语法:
insert into 表名(列名1,列名2)values(值1,值2…)
注意:
a.列名要和值一一对应
b.如果表名后,不定义列名,则默认给所有列添加值
c.除了数字类型,其他类型需要使用引号(‘’ 或者 “”)引起来

2.删除数据:
语法:
delete from 表名 [where 条件]
注意:
1.如果不加条件,则删除表中所有记录
2.如果要删除表中所有记录
truncate table 表名;
注意: 先删除表,后创建一张一模一样的表,推荐使用!! 因为效率高

3.修改数据:
语法:
update 表名 set 列1 = 值1,列2 = 值2 [where 条件]
注意:
如果不添加任何条件,则会将表中所有的记录全部修改

DQL:查询语句
1.简单查询

a.查询一个字段
select 字段名 from 表名;
注意:
a. select 和 from都是关键词
b. 字段名 和 表名 都是标识符

b.查询多个字段
注意: 使用 , 隔开

c.查询所有字段
方式一: 可以把所有的字段名都写上
方式二: 使用 * 表示全部
注意: 这种方式有缺点,查询效率低,可读性差,在实际开发过程中不建议使用

d.给查询的列起别名
使用as 关键词起别名
as 关键字可以省略

e.字段可以结合运算符使用 + - * /

2.条件查询

1).where子句后跟的就是查询条件
2)运算符
> < >= <= = <>

3.模糊查询

like:

占位符:
_: 表示单个任意字符
%: 表示多个任意字符

in(集合)
is null
and 相当于 &&
or 相当于 ||
not 相当于 !

4.分组查询

group by: 按照某个字段或者某些字段进行分组
having: 是对分组后的数据在进行再次过滤

注意:
a.执行顺序:
from xx -> group by xx -> avg(sal)

b.where 后不能跟 分组函数
因为执行顺序: from xx -> where 条件 -> group by xx -> avg(sal)

c.普通函数 和 聚合函数(分组函数)
1).聚合函数是所以数据库通用的函数
count():求总数
max():求最大值
min():求最小值
avg():求平均值
sum():求和
2)注意:
a.在mysql中是不支持聚合函数的嵌套使用
但是在oracle中是支持聚合函数的嵌套使用
b.在mysql中支出聚合函数和普通函数的嵌套使用
c.聚合函数会自动将null值排除在外
①.选择不包含非空的列进行计算,则直接计算
②.如果要包含 则需要结合 ifnull()使用
d.聚合函数得出的结构都是单行单列的结果

3)count() 和 count(字段名)
count(
):不是统计某个字段中数据的个数,而是统计总记录数.
count(comm):表示统计comm字段中不为null的数据总数量.

5.分页查询

1)语法: limit 开始的索引,每页查询的条数
2)公式: 开始的索引 = (当前的页面 - 1) * 每页查询的条数
3)limit 属于mysql中独有的

6.排序查询

order by

asc

desc

11.约束:

1.什么是约束?
在创建表的时候,可以给表中的一些字段添加上一些约束,来保证表中数据的完整性/有效性.

作用: 为了保证数据的有效!

2.约束的分类:
非空约束: not null
主键约束: primary key (简称PK)
唯一约束: unique
外键约束: foreign key (简称FK)
检查约束: check(mysql不支持,oracle支持)

1)非空约束: not null
特点: 值不能为空

2)主键约束: primary key (简称PK)
特点:非空且唯一
作用: 用来标识唯一

主键类型:
使用代理主键高达8 90%
代理主键: 没有任何业务意义,只需要保证是非空且唯一
自然主键: 在表中本身存在一个非空且唯一的有效字段

自动增长:
varchar: 使用java代码随机生成一套字符串
int: 在数据库内部使用自增长来完成 -> auto_increment

3)唯一约束: unique
特点:
a.值不能为null
b.mysql中可以存在多个null值

4)外键约束: foreign key (简称FK)
a.特点: 让表和表之间产生关联关系,从而保证数据的正确性

b.语法:
constraint 外键名 foreign key
(外键列名) references class(主表列名)

12.数据库的设计三范式:

1.什么是数据库的设计范式?
数据库表的设计依据,教你怎么进行数据库表的设计.

2.数据库的设计范式 - 6个 -> 重点 3个
第一范式:
要求任何一张表必须要有主键,每一个字段原子性不可再分.
第二范式:
建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,不要产生部分依赖.
第三范式:
建立在第二范式的基础之上,要求所有非主键字段值直接依赖主键,不要产生传递依赖.

目的:数据库的设计是为了解决数据冗余的情况.

3.表的设计:
1)一对多(多对一)
两张表,多的表添加外键
实现方式: 在多的一方添加外键,指向一的一方的主键

2)多对多
三张表,关系表两个外键
实现方式: 需要借助第三张表作为中间表,中间表至少含有两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键

3)一对一(了解)
一对一,唯一外键
实现方式: 一对一关系实现,可以在任意一方添加唯一外键,指向另一方的主键.

用户表
------------------------
用户id(pk)              用户名字           

分类表
----------------------
分类id(pk)                 分类内容                    

关系表
-------------
id(pk)                             用户id(fk)               分类id(fk)


路线表
------------
路线id(pk)                 路线内容                 分类id(fk)

13.多表查询(连接查询/表连接查询)

1.什么是表连接查询?
a.从一张表中单独查询,称为单表查询
b.例如:想要找员工对应的部门名字
emp表中和dept表联合起来进行查询数据,需要先从emp表中取出员工姓名,再从dept表中取出部门名字
这种跨表查询,多张表联合起来查询数据,被称为多表查询.

2.表连接查询分类:
1)从语法上进行区分:
SQL92
SQL99(算是比较新的语法)

2)表连接的连接方式区分:
a.内连接
等值连接
例如:e.deptno = d.deptno
条件是等量关系,所以被称为等值连接
非等值连接
例如:e.sal between s.losal and s.hisal
条件不是一个等量关系,被称为非等值连接
自连接
技巧:将一张表看成两张表使用
使用起别名的方式

b.外连接
左外连接(左连接): 驱动表放在 join 之前
语法:left outer join
outer可以省略
右外连接(右连接): 驱动表放在 join 之后
语法:right outer join
outer可以省略

驱动表: 如果你需要一张表中所有的数据都显示出来
那么这张表就作为驱动表

c.全连接(不讲 - mysql)

3.当两张表连接没有任何条件限制的时候
最终查询出来的结果条数 -> 是两张表条数的乘积 这种现象被称为: 笛卡尔积现象

如何避免笛卡尔积现象的发生?
在连接时添加条件,满足这个条件的记录则被筛选出来

14.子查询

1.什么是子查询?
select语句中嵌套select语句,被嵌套的select语句被称为子查询.

2.子查询都可以出现在什么地方?
select
…(select子查询)…
from
…(select子查询)…
where
…(select子查询)…

15.存储引擎

show engines;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MPqKjDyr-1631270534553)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210825092517594.png)]

每一种存储引擎都有自己的优缺点,默认InnoDB

1.什么是存储引擎?存储引擎有什么用?
存储引擎其实就是mysql中的一个术语,每一个存储引擎都对应一种不同的存储方式.
每一种存储引擎都有自己的优缺点.默认InnoDB

1)MYISAM存储引擎
三个文件组成一张表:
mytable.frm - 负责表中格式文件
mytable.MYD - 负责表中的数据文件
mytable.MYI - 负责表中索引文件

优势:可以转换为压缩,只读表来节省空间.
缺点: 不支持事务

2)MEMORY存储引擎
优点:因为是存储在内存中,所以运行速度比较快
缺点: 不支持事务

3)InnoDB存储引擎 - 默认存储
优点: 支持事务,外键,行级锁,这种存储引擎方式中的数据安全会得到保障.
这种存储引擎在数据库崩溃后会提供自动恢复机制.

可以修改字符集方式:
默认utf8mb3
修改: gbk

存储文件: xxx.frm

16.事务

(Transaction Control Language)TCL

1.什么是事务?

​ 一个事务是一个完整的业务逻辑单元,不可再分

什么是完整的业务逻辑单元?

例如:转账,

  1. 和事务相关的语句只有:DML语句

    (insert delete update) 因为只有以上这三个语句是对数据库中的数据进行增删改,一旦涉及数据的增删改操作就一定会考虑数据安全问题,而事务的存在就是为了保证数据的完整性和安全性

  2. 事务实现的原理:

1)事务的本质
一个事务其实就是多条DML语句同时成功或者同时失败

2)事务提交:commit
事务回滚:rollback
设置保存点:savepoint 名字
回滚到保存点: rollback to 保存点名字

4.事务的四大特性:ACID

A -> 原子性:事务最小的工作单位,不可再分
C -> 一致性:事务必须保证多条DML语句同时成功或者同时失败.
I -> 隔离性:事务A 与 事务B之间具有隔离.
D -> 持久性:持久性就是说最终的数据必须持久化到硬盘文件中,事务才算成功的结束.

5.事务之间的隔离等级:
第一级别:读未提交(read uncommitted)

​ 对方事务还没有提交,我们当前事务就可以读到了对方未提交的数据.
​ 读未提交存在脏读(dirty read)现象: 表示读到脏的数据.

第二等级:读已提交(read committed)

对方事务提交之后的数据我们当前事务可以读到
这种隔离等级解决了: 脏读现象
存在问题: 不可重复读.

第三等级:可重复读(repeatable read)

​ 这种隔离等级解决了: 不可重复读.
​ 存在问题: 读到的数据是幻象

第四等级:序列化读/串行化读(serializable)

​ 解决了所有问题.
​ 但是因为是事务需要排队执行,所以效率低下

oracle默认隔离等级: 读已提交
mysql默认隔离等级: 可重复读

6.修改事务隔离等级.
1.进入数据库
2.修改事务隔离等级
set global transaction isolation level 隔离等级

3.关闭数据库重新进入
a.进入数据库
b.关闭自动提交,开启手动提交方式
strat transaction;
b.在事务1添加数据
在事务2查看数据

17.索引

1.什么是索引?有什么用?

a.索引相当于是一个目录,通过目录快速定位找到对应的资源

b.在数据库中,查询一张表的检索方式:

​ 全表查询

​ 根据索引进行扫描(效率很高)

注意:

添加索引是给某一个字段添加,也可以给某些字段添加

索引虽然可以大大的提高检索效率,但是不能随意添加,因为索引也是数据库中的对象,也是需要数据库进行维护,需要维护成本

2.怎么创建索引对象?怎么删除索引对象?

-- 给sal添加索引   on
create index sal_index on emp(sal); 
explain select ename, sal from emp where sal=5000;
-- 删除索引对象  drop
drop index sal_index on emp;
explain select ename, sal from emp where sal=5000;

3.什么时候考虑给字段添加索引?(满足什么条件)

​ a.数据量庞大(根据客户需求)

​ b.该字段很少进行DML操作(增删改)

​ c.出现在where子句中(经常根据哪个字段进行查询)

4.索引的实现原理

原理实现: 底层数据结构是B + Tree来进行缩小查询范围,底层索引进行了排序,排序完成后进行分区
分区中的数据会携带表中的’物理地址’
最终会通过索引检测到数据之后,获得相关联的物理地址,通过物理地址定位到表中的数据,从而得到最高的查询效率.

通过索引转换为:
select ename form emp where 物理地址 = 0x1

5.索引的分类:
主键索引: 主键上会自动添加索引
唯一索引: 有unique约束的字段上会自动添加索引
单一索引: 给单个字段添加索引
复合索引: 给多个字段添加索引

6.索引什么时候会失效?
select ename from emp where like ‘%S%’
注意:模糊查询的时候,第一个通配符使用的是 % ,这个时候索引是失效的.

18.视图

1.什么是视图
站在不同的角度去看到数据
(看到的是同一张表的数据)

2.怎么创建视图?怎么删除视图
创建视图:
create view 表 as select,ename from emp;
删除视图:
drop view 表名;

注意:只有DQL语句才能以视图的对象方式创建出来.

3.对视图进行增删改查,都会影响到原表中的数据.

  • 9
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《MySQL DBA运维笔记详细》是一本专门介绍MySQL数据库管理员运维工作的详细笔记MySQL是一种流行的开源数据库管理系统,许多企业和网站都在使用它来存储和管理数据。 这本笔记MySQL数据库的运维工作为核心,内容较为全面。它从基础知识开始,介绍了数据库的安装和配置,包括数据库实例、表空间、数据文件等的管理。同时,它还涉及到了数据库的备份和恢复策略,如何设计高可用的数据库架构,以及如何进行性能优化等。这些内容对于MySQL数据库管理员来说,是非常重要的。 除了基础的运维工作外,这本笔记还介绍了一些高级的技术和工具。例如,它详细解释了如何进行数据库的监控和诊断,如何进行慢查询分析以及如何优化SQL语句。此外,它还介绍了一些与MySQL数据库相关的常用工具,并提供了一些实战案例,帮助读者更好地理解和应用知识。 总体而言,这本《MySQL DBA运维笔记详细》是一本适合MySQL数据库管理员的实用手册。通过阅读这本书,读者可以系统地学习MySQL数据库的运维知识,提高自己的技术水平。无论是刚刚接触MySQL数据库的新手,还是已经有一定经验的运维人员,都可以从中受益匪浅。 ### 回答2: "Mysqldba运维笔记详细pdf"是一本关于MySQL数据库管理员运维笔记详细电子书。该电子书的主要内容涵盖了MySQL数据库的各个方面,提供了大量的技术细节和操作指南。 首先,该电子书介绍了MySQL的基础知识,包括数据库的概念、常用的SQL语法以及数据类型等。这为初学者提供了一个良好的入门点,让他们快速掌握MySQL的基本操作。 接着,该电子书深入讨论了MySQL数据库的架构和原理,包括存储引擎、查询优化、事务处理和并发控制等相关内容。这对于高级用户和数据库管理员来说是非常有价值的,可以帮助他们更好地理解MySQL的内部工作原理,从而优化数据库的性能和稳定性。 此外,该电子书还详细介绍了MySQL数据库的备份和恢复策略,包括物理备份和逻辑备份的方法。它提供了一些实用的技巧和建议,帮助用户确保数据库的安全性和可靠性。 除了基础知识和高级技巧,该电子书还涵盖了一些常见问题和故障排除的方法。它列出了一系列常见的错误和异常情况,并提供了解决方案和调试指南,使用户能够快速识别和解决问题。 总之,"Mysqldba运维笔记详细pdf"是一本全面而详细MySQL数据库管理员运维指南。它适用于初学者和有经验的用户,提供了从基础知识到高级技巧的全方位指导,是学习和实践MySQL数据库管理的必备资料。 ### 回答3: "Mysqldba运维笔记详细"是一本提供了关于MySQL数据库管理员运维方面详尽知识的PDF。这本书包含了丰富的内容,从基本的MySQL概念开始,涵盖了各种常见问题的解决方案和最佳实践。 这本书首先介绍了MySQL数据库的概念和基本原理,包括数据库架构、存储引擎、事务处理等。然后,它详细讲解了如何安装和配置MySQL数据库,包括安装步骤、配置文件的修改以及相关工具的安装和使用。 接下来,这本书通过实用的案例和示例来介绍如何进行数据库管理和维护。它讲解了数据库备份和恢复的方法,包括全量备份和增量备份的技巧。此外,它还详细介绍了如何进行数据库监控和性能调优,包括查看数据库日志、优化SQL查询和调整系统参数等。 除了基本的运维知识,这本书还介绍了一些高级主题。它讲解了如何配置MySQL高可用性方案,包括主从复制和主备切换。它还介绍了如何进行数据库的故障诊断和排除,包括常见问题的解决方法和故障恢复策略。 总的来说,"Mysqldba运维笔记详细"这本PDF提供了一个全面而详细MySQL数据库管理员运维指南。无论是初学者还是有经验的专业人士,都可以从中学习到宝贵的知识和实践经验。它是一本对于那些想要更好地理解和管理MySQL数据库的读者来说必不可少的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值