MySQL知识点总结

目录

什么数据库

数据库分为:

关系型和非关系型:

MySQL数据库

什么是SQL语句:

SQL语句的分类:

常用的操作:

数据类型:

命名规范:

分类:字符、数字、日期、图片

什么是字段约束:

字段约束分为几类

主键约束:

非空约束: not null

唯一约束 :unique

默认约束:default

检查约束:check

外键约束:

基础函数有

条件查询有

聚合函数:

什么是分组

having:完成分组后过滤

什么是事务:

事务的特性:ACID

隔离级别

索引

什么是索引

索引的好处与坏处

索引的(好坏处的具体)优缺点

观察SQL的性能,执行计划关键字

为什么索引快

什么是表关联

表关系的分类

多表联查有几种

什么是子查询

什么是视图

SQL优化

SQL优化详见


什么数据库

存储数据,管理数据的仓库

数据库分为:

关系型数据库: Oracle、MySQL、SQLServer、Access ​ 非关系型数据库:Redis、MongoDB、Solr、ElasticSearch、Hive、HBase ​

关系型和非关系型:

数据库建立在数据的紧密关系基础之上,称其为关系型数据库,也称为传统数据库 ​ 数据库建立在数据的松散关系基础之上,称其为非关系型数据库

MySQL数据库

mysql服务端,它来处理具体数据维护,保存磁盘 ​ mysql客户端,CRUD新增,修改,删除,查询

什么是SQL语句:

SQL全称---Structured Query Language

  1. 结构化查询语言

  2. 是一种特殊目的的编程语言

  3. 是一种数据库查询和程序设计语言用于存取数据以及查询、更新和管理关系数据库系统

  4. 同时也是数据 库脚本文件的扩展名。

SQL语句的分类:

  • DML : 数据操纵语言,是指对数据进行CRUD

  • DDL: 数据定义语言,是指创建的SQL语法

  • DCL: 数据控制语言,是指权限的分配

  • DQL: 数据查询语言,是指对数据的各种查询语法

常用的操作:

  1. 对数据库的操作

  2. 对表的操作

  3. 对数据/记录的操作

数据类型:

命名规范:

  1. 字段名必须以字母开头,尽量不适用拼音

  2. 长度不能超过30个字符(不同数据库,不同版本会有不同)

  3. 不能使用SQL的保留字--->where、Order、group

  4. 只能使用如下字符az、AZ、0~9、$ 等

  5. Oracle习惯全大写:USER_NAME,mysql习惯全小写:user_name

  6. 多个单词用下划线隔开,而非java语言的驼峰规则

分类:字符、数字、日期、图片

什么是字段约束:

约束是对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。

字段约束分为几类

主键约束:

如果为一个列添加了主键约束,那么这个列就是主键,主键的特点是唯一且不能为空。通常情况下,每张表都会有主键

  • primary key ------唯一、非空

  • auto_increment----自增

非空约束: not null

  • 如果为一个列添加了非空约束,那么这个列的值就不能为空,但可以重复

唯一约束 :unique

  • 如果为一个列添加了唯一约束,那么这个列的值就必须是唯一的(即不能重复),但可以为空

默认约束:default

检查约束:check

外键约束:

  • 什么是外检约束:用于在两个表之间建立关系,需要指定引用主表的哪一列

  • 设置外键约束

    FOREIGN KEY (本表(子表)主键) REFERENCES 外表(主表)名(外表主键)
  • 注意

    1. 子表主键不能自增

    2. 子表的主键值必须取自主表的主键值

    3. 想要删除主表数据,必须先删除子表中数据

基础函数有

  • 全转小写:lower

  • 全转大写:upper

  • 获取长度:length

  • concat:拼接字符串

  • substr:截取字符串

  • replace:替换字符

  • ifnull:判断是否为空

  • round:四舍五入

  • ceil 向上取整

  • floor 向下取整

  • 时间函数:

条件查询有

  • distinct:去重

  • where条件:

  • 模糊查询:like

  • null操作空数据:

  • 区间范围:between...and...是包含的关系

  • 分页:limit

  • 排序:order by

聚合函数:

  • max

  • mix

  • avg

  • sum

  • count

什么是分组

对于查询的结果进行分组,统计一组数据中的最大值与最小值

having:完成分组后过滤

什么是事务:

作为单个逻辑工作单位执行的一系列操作

事务的特性:ACID

ACID A--原子性 C---一致性 I---隔离性 D---持久性 原子性:事务的所有操作,要么都执行成功,要么都执行失败,不会结束在中间的某个环节。如果事务执行失败的话,事务 会回滚到事务执行之前的状态,就好像从未被执行过一样 一致性:事务执行之前和事务执行之后,不会破坏数据库的完整性。这表示写入的资料必须完成符合规则。其中包含了资料的精确度 、串联性以及数据库可以自发性的完成预定的工作 隔离性:数据库允许多个并发事务同时对数据有插入、修改的功能。隔离性可以防止多个并发事务时由于交叉执行而导致的数据不一致 持久性:事务处理完,对数据的修改是永久性的。系统故障也不会丢失

隔离级别

读未提交:安全性最差,可能发生并发数据问题性能最好 ​ 读提交:牺牲了效率,提高了安全性---Oracle数据的默认级别 ​ 可重复读:牺牲了效率,提高了安全性---MySQL数据的默认级别 ​ 串行化:安全性最高,但是效率太低

索引

什么是索引

索引是一种排好序的快速查找的数据结构,它可以帮助数据库高效的进行数据的检索。

索引的好处与坏处

好处是最大的作用就是提高查询效率

坏处是索引本身也是一张表不适合大量的添加

索引的(好坏处的具体)优缺点

  • 索引的优点

    1. 索引是数据库优化

    2. 表的主键会默认自动创建索引

    3. 每个字段都可以被索引

    4. 大量降低数据库的IO磁盘读写成本,极大提高了检索速度

    5. 索引事先对数据进行了排序,大大提高了查询效率

  • 索引的缺点

    1. 索引本身也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也要占用空间

    2. .索引表中的内容,在业务表中都有,数据是重复的,空间是“浪费的”

    3. 虽然索引大大提高了查询的速度,但对数据的增、删、改的操作需要更新索引表信息, 如果数据量非常巨大,更新效率就很慢,因为更新表时,MySQL不仅要保存数据,也要保存一下索引文件

    4. 随着业务的不断变化,之前建立的索引可能不能满足查询需求,需要消耗我们的时间去更新索引

观察SQL的性能,执行计划关键字

  • 关键字:explain

  • 找 possible_keys的值

为什么索引快

  • 因为:索引表可以类似二分查找,非常有效的提高了查询的速度。

  • 过程:先到事先排序好的索引表中检索查询,找到其主键后,就直接定位到记录所在位置,然后直接返回这条数据。

什么是表关联

  • 表关联则代表了表之间的关系

表关系的分类

  • 一对一 one to one QQ和QQ邮箱,员工和员工编号

  • 一对多 one to many 最常见,部门和员工,用户和订单

  • 多对一 many to one 一对多反过来,员工和部门,订单和用户

  • 多对多 many to many 老师和学生,老师和课程

多表联查有几种

  • 笛卡尔积

  • 连接查询

  • 子查询

什么是子查询

把上次的查询结果,用来作为下次查询的条件

什么是视图

可视化的表,视图当做是一个特殊的表。是指把sql执行的结果,直接缓存到了视图中,下次还要发起相同sql,直接查看视图

SQL优化

  1. 查询SQL尽量不要使用select *,而是具体字段

  2. 避免在where子句中使用or来连接条件

  3. 使用varchar代替char

  4. 尽量使用数值替代字符串类型

  5. 查询尽量避免返回大量数据

  6. 使用explain分析你SQL执行计划

  7. 是否使用了索引及其扫描类型

  8. 创建name字段的索引

  9. 优化like语句

  10. 字符串怪现象

  11. 索引不宜太多,一般5个以内

  12. 索引不适合建在有大量重复数据的字段上

  13. where限定查询的数据

  14. 避免在where中对字段进行表达式操作

  15. 避免在where子句中使用!=或<>操作符

  16. 去重distinct过滤字段要少

  17. where中使用默认值代替null

  18. 批量插入性能提升

  19. 批量删除优化

  20. 伪删除设计

  21. 提高group by语句的效率

  22. 复合索引最左特性

  23. 排序字段创建索引

  24. 删除冗余和重复的索引

  25. 不要有超过5个以上的表连接

  26. inner join 、left join、right join,优先使用inner join

  27. in子查询的优化

  28. 尽量使用union all替代union

  29. where限定查询的数据

  30. 避免在where中对字段进行表达式操作

  31. 避免在where子句中使用!=或<>操作符

  32. 去重distinct过滤字段要少

  33. where中使用默认值代替null

  34. 批量插入性能提升

  35. 批量删除优化

  36. 伪删除设计

  37. 提高group by语句的效率

  38. 复合索引最左特性

  39. 排序字段创建索引

  40. 删除冗余和重复的索引

  41. 不要有超过5个以上的表连接

  42. inner join 、left join、right join,优先使用inner join

  43. in子查询的优化

  44. 尽量使用union all替代unio

SQL优化详见

https://blog.csdn.net/u012932876/article/details/117359992

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值