2022.2.1-2022.2.3mysql学习笔记

过年没回老家,在这没事做就开始学习,还是学习效率低,但是我尽力了&#…

过年没回老家,在这没事做就开始学习,还是学习效率低,但是我尽力了,今天终于把这个mysql的视频看完,总结一下。

参考:
老杜 – mysql入门基础 + 数据库实战:https://www.bilibili.com/video/BV1Vy4y1z7EX(较新、内容相对精炼,有习题)

视频感受:总体看完,感觉很新手,合适所有没学过数据库的人员学习,而且讲的比较详细,还有习题练习,缺乏的是对索引原理的详细解析,但是对于一个开发人员来说,完全足够

DB:数据库
DBMS:数据库管理系统,如mysql,oracle
SQL:结构化查询语言
关系:DBMS执行SQL操作DB

SQL可在DBMS使用,是个标准

安装卸载网上很多,就不详细写了

  • DQL:查询
  • DML:CRUD
  • DDL:数据库定义语言(操作表结构)
  • TCL:事务控制语言
  • DCL:数据控制语言(grant,revoke)

单表查询

DQL语句分类

  • 单行处理函数
  • 分组函数

关键字格式

执行顺序

注:

  • 分组函数必须先分组再使用,因此不能再where中使用
  • having不能单独使用,必须联合group by使用
  • wherehaving,优先使用where

连接查询

分类:

  • 内连接

  • 外连接

外连接中,表与表存在主次关系,内连接不存在

子查询

...中均可出现select…,即套娃行为

Union

union效率比连接查询高,连接查询每次连接则匹配满足笛卡尔积现象,而union使乘法转换为加法

limit

limit 5取前5条
limit startIndex,len取下标为startIndex开始后len

关系:(pageIndex-1)*pageSize,pageSize=startIndex,len

数据类型

  • varchar:变长
  • char:固定长度
  • int
  • clob:字符大对象
  • blob:二进制大对象,如图,声音,视频

CURD

快速建表

delete和truncate

  • delete一个一个删除,物理存储空间还在,可以回滚,效率低
  • 快速删除,不支持回滚
  • not null
  • primary key
  • unique
  • foreign key

  • MyISAM
    • 便于压缩
    • 不支持事务
  • InnoDB
    • 支持事务
  • MEMORY
    • 查询快
    • 断电即失,不安全

一个事务需要多个DML语句,因为一个业务不可能一个DML语句可以完成,因此需要事务

如何做到

使用事务性活动的日志文件

mysql默认自动commit,需要使用start transcation关闭自动提交事务

事务特性

ACID

  • 原子性:一个事务为基本单位,不可分割
  • 一致性:要么成功,要么失败
  • 隔离性:事务存在隔离级别
  • 持久性:持久化到硬盘中

隔离级别

  • 读未提交read uncommitted
    • A可读B未提交的数据
    • 存在脏读现象
    • 一般没人用这个隔离级别
  • 读已提交read committed
    • A只能读到B提交的数据
    • 存在不可重复读数据(即同一条语句,产生不同结果)
    • 每次读的数据是绝对的真实
  • 可重复读repeatable read
    • mysql默认
    • 存在幻读现象
    • 永远读的是事务开始前的数据
  • 串行化serializable
    • 事务排队,不能并发

修改隔离级别
set global transaction isolation level ____
查看隔离级别
select @@tx_isolation

本质就是目录
原理使用B树的搜索,更细致是B+树搜索

mysql特性:

  • 主键自动添加索引
  • unique约束自动添加索引

创建索引
create index emp_ename_index on emp(ename);

删除
drop index emp_ename_index on emp;

索引失效

使用explain查看是否使用索引,expalin是查看执行计划

索引分类

  • 单一索引
  • 复合索引
  • 主键索引
  • 唯一性索引

本质就是一个表,可以认为是个临时表,但是操作数据又会影响原表数据

作用:便于操作复杂的联合select出来的表格,建个临时表,筛选需要的字段,便于操作

语法:
create view emp_view as select * from emp;

由于自身不是DBA,只是开发人员,不需要记住太多命令,需要去查找即可

  • 导出数据
    mysqldump 库名(表名,选填)> 路径

  • 导入数据
    source 文件

这种就不符合,应该把邮箱和手机分开写

多对多关系,就产生部份依赖

一对多,产生传递依赖

总结建表:

  • 一对多,两张表,多的表加外键
  • 多对多,三张表,关系表加两外键
  • 一对一,字段多,拆多表,外键唯一

由于表和表之间连接次数越多,效率越低,因此又是可能存在冗余字段,但是为了减少表连接次数,这样做也是合理的,并且这对于开发人员来说,sql语句的编写难度也会降低

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/5732.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部