黑马Mysql重点笔记(2万字)

注意,该笔记来自于黑马Mysql的听课记录且尚未扩展,希望通过这篇博客你能完美入门mysql。

Mysql DataBase Management System(DBMS)

ad56dcf1c753a2ac0005a7bfcbcd6acc.png

7d490bb0f9ebe8720fd5f819e2cf233a.png

SQL分类:

DCL DDL DQL DML

c5fe0244211e1f622b2d84286b2d0d3e.png

数据类型

数值类型

c4221b2878b603b2b6fb2c2ff4982998.png

字符串数据

1d3fa913ee537038634ad1f208b80771.png

日期类型

d4bf6842af7a1849cbfe9ca8ba4a618b.png

DDL data definition language

1.查询所有数据库 show databases

2.查询当前数据库 select database

3.创建 create database[if not exists] 数据库名 [default charset 字符集] [collate]排序规则

4.删除 drop database[if exists]数据库名

5.use 数据库名 使用指定的数据库

6.DESC 表名 查询表结构

7.show create table表名 查询指定表的建表语句

8.添加字段 alter table 表名 ADD 字段名 类型(长度) [comment 注释] [约束]

9.修改数据类型 alter table 表名 modify 字段名 新数据类型(长度)

10.修改字段名和字段类型 alter table 表名 change 旧字段名 新字段名 类型(长度)[comment注释] [约束]

11 修改表名 alter table 表名 rename to 新表名

12 删除表 drop table[if exists] 表名

13 删除指定表,并重新创建该表 truncate table 表名(在删除表时,表中的全部数据也会被删除)

DML data manipulation language

1.insert into 表名(字段名1, 字段名2...) values(值1,值2); 给指定字段添加数据

2.insert into 表名 values(值1, 值2);给全部字段添加数据

3.insert into 表名(字段名1, 字段名2) values(值1, 值2...), (值1, 值2...), (值1, 值2, ...); 批量添加数据

4.insert into 表名(值1, 值2...), (值1, 值2...), (值1, 值2...); 批量添加数据


注意

插入数据时,指定的字段顺序需要与值的顺序是一 一对应的

字符串和日期型数据应该包含在引号中

插入的数据大小,应该在批量添加数据


5.update 表名 set 字段名=值1 字段名=值二,...[where 条件] 修改数据

6.delete from 表名 [where 条件] 删除语句


注意

7.7delete 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据

8.delete语句不能删除某一个字段的值(可以使用update)


DQL data query language

略,已拿捏(把力扣数据库的题刷完就行了, 2-3天就能刷完)。

DCL data control language

1.use mysql;

2.select * from user 查询用户

3.create user '用户名'@'主机名' identified by ’密码'; 创建用户

4.alter suer '用户名'@'主机名' identified with mysql_native_password by '新密码'; 修改用户密码

5.drop user '用户名'@'主机名' 删除用户

权限控制

ee777c178e5a7c9aa6c7e49f32e99394.png

6.show grants for '用户名'@'主机名';查询权限

7.grant 权限列表 on 数据库.表名 to '用户名'@'主机名' 授予权限

8 revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名' 撤销权限


多个权限之间,使用逗号分隔

授权时,数据库名和表名可以使用*进行通配,代表所有。

函数

是指一段可以直接被另一段程序调用的程序或代码

字符串函数

156a2945b3577e1bf3c4365ca1284d3e.png

数值函数

f50f0d52cf989ed75c20038f483c651d.png

日期函数

21fad221b51c13fbcfb3165c59aa0808.png

流程函数

861e40ec72e27aec099ff06ab5ec106c.png

约束

概念:约束时作用于表中字段上的规则,用于限制存储在表中的数据

目的:保证数据库中数据的正确,有效性和完整性

分类:

1d7963d0112fa526282d977fa503a923.png

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束

外键约束

0ddf7b44742d6d3fe99a25395ff4e8de.png

删除外键

alter table 表名 drop foreign key 外键名称

799f87f510d34b8db958d1c2a554ad14.png

多表查询

分类:

一对多

3e1d6de8540343c75e7c9b4f73e39a3e.png

多对多

a8598b5aa01b6b2970c671e8fd4322ed.png

一对一

ceaf83add814a6d69a1e3b942bf14017.png

笛卡尔积:笛卡尔乘积是指在数学中,两个集合A集合和B集合的所有组合情况.(在多表查询时,需要消除无效的笛卡尔积)

连接查询

内连接:

相当于查询A,B交集部分数据

隐私内连接:select 字段列表 from 表1,表2 where 条件...;

显示内连接:select 字段列表 from 表1 [inner] join 表2 on 连接条件...;

外连接

左外连接:查询左表所有数据,以及两张表交集部分数据

select 字段列表 from 表1 left [outer] join 表二 on 条件...;

右外连接:查询右表所有数据,以及两张表交集部分数据

select 字段列表 from 表1 right [outer] join 表二 on 条件...;

自连接

当前表与自身的连接查询,自连接必须使用表名

select 字段列表 from 表A 别名A join 表A 别名B on 条件...;

子查询

标量子查询(子查询结果为单个值)

列子查询(子查询结果为一列) in, not in, any, some, all,

54404b112f04695d8ff94ae5535c8a3c.png

行字查询(子查询结果为1行)= != <> in not in

表子查询(子查询结构为多行多列) in

根据子查询位置,分为: where之后,from之后,select之后

事务

是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败(默认mysql的事务是自动提交的,也就是说,当执行一条DML语句,mysql会立即隐私的提交事务)

查看/设置事务提交方式

select @@autocommit;

set @@autocommit=0

开始事务

start transaction/begin

提交事务

commit

回滚事务

rollback

事务的四大特性

64fc3d053d67cd072bda62737896ac2a.png

并发事务问题

04e02fef1284d68a3fd01534abe0ed01.png

隔离

693b98c513432895ec3ce20691e20815.png

mysql体系结构

db8c15dcd1e4d5605e13a018a035d867.png

连接层

最上层是一些客户端和链接服务,主要完成一些类似于连接处理,授权认证即相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限

服务层

第二层架构主要完成大多数的核心服务功能,如sql接口,并完成缓存的查询,sql的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程,函数等。

引擎层

存储引擎真正的负责了mysql中数据的存储和提取,服务器通过api和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。

存储层

主要是将数据存储在文件系统上,并完成与存储引擎的交互

存储引擎 InnoDB

6d79098993fd70129bcad29ce4c35a61.png

a236df9915b4727b64e3e03f75072306.png

b81b822f6f78cda1c74e06fd42dc0a4d.png

存储引擎memory和MyIsam

37eac9bf18de8c7a508aef64f40f5b0b.png

c5cf668965dd1e15846bcbaacf5f78e5.png

三者差异对比

4e2a715b80f6e2c1f41a93de7db3c893.png

存储引擎选择

InnoDB: 是mysql的默认存储引擎,支持事务,外键。如果应用对事务的完整性有比较高的要求,在并发条件要求下数据的一致性,数据操作除了插入和查询之外,还包含很多的更新,删除操作。那么InnoDB存储引擎是比较合适的选择.

MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性,并发性要求不是很高,那么选则这个存储引擎是非常合适的

MeMory(不推荐,以被替代): 将所有数据保存在内存中,访问速度快,通常用于临时表即缓存。memory的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性

索引

概念:是帮助Mysql高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引

索引概述

f5967788f3e250228b58169c8acae659.png

索引结构

在存储引擎层实现的,不同的存储引擎有不同的结构。

7b172f4ceae6b43da61cba842a8fce5a.png

4e68c158334e427d5b6f897a750e85d3.png

B+树索引

77c5ad99f7d5d06a1dcf992337c95661.png

优点

相对于二叉树,层级更少,搜索效率高。

相对于Hash索引,B+tree支持范围匹配即排序操作

对于B-tree,无论是叶子结点还是非叶子结点,都会保存数据,这样导致一页中存储的键值减少,指针跟着减少,要同样保存大量数据,只能增加树的高度,导致性能降低

Hash索引

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值