MySQL是什么
MySQL是一个关系型数据库管理系统
MySQL优点
免费开源
:MySQL是一个开源的关系型数据库管理系统,使用和修改都不需要付费
性能高效
:MySQL是一个高性能的数据库管理系统,支持大量的并发访问,适合在高并发的环境中使用
稳定可靠
:MySQL是经过多年的发展和改进,稳定可靠,在大型网站和应用程序中广泛使用
可移植性好
:MySQL可以在多种操作系统平台上运行,包括Windows,Linux,Mac OS 等
完善的管理工具
:MySQL提供了丰富的管理工具,可以方便的进行数据库的维护和优化
功能丰富
:MySQL提供了许多强大的功能,例如数据库触发器、存储过程、视图等
易于使用
:MySQL的语法简单易懂,适合初学者学习
MySQL的四种分类
DDL
:数据定义语言。(操作数据库、表)关键字:create、drop、alter
DML
:数据操作语言(增删改表中的数据)关键字:insert、delect、update
DQL
:数据查询语言(查询表中的数据)关键字:select、where
DCL
:数据库操作控制语言(授权)
数据库的三大范式
第一范式
(1NF):属性不可分割
,即每个属性都是不可分割的原子。(实体的属性即表中的列)
第二范式
(2NF):满足第一范式
;且不存在部分依赖
,即非主属性必须完全依赖于主属性。(主属性即主键;完全依赖是针对于联合主键的情况,非主键列不能只依赖于主键的一部分)
第三范式
(3NF):满足第二范式
,且不存在依赖传递
,即非主属性不能与非主属性之间有依赖关系,非主属性必须直接依赖于主属性,不能简介依赖主属性。(A -> B ,B -> C , A -> C)
比如姐姐结婚,来往的宾客就不符合第一范式
,宾客还可以分为男方宾客和女方宾客。
主属性为新娘和新郎,他们为联合主键,然后其他的属性为伴娘伴郎团,这就不符合第二范式了
,他们不能放在一个表中,因为伴娘不依赖于新郎,伴郎也不依赖于新娘,所以新娘和伴娘团为一个表、新郎和伴郎团为一个表,新娘和新郎为一个表。
表中有ID、新郎、新娘、新娘的父母,这不符合第三范式
,虽然新郎也叫爸妈,但是这是新娘的父母,是因为结婚了所以才能叫爸妈,存在着传递依赖,所以新娘和新娘的父母应该单独提出来独立为表。
这里就有一个问题了,第二范式和第三范式很像,那么怎么区分
他们呢,看主键
,第二范式主要是针对联合主键的情况,如果只有一个主键那自然是满足第二范式的,那如果是联合主键呢,就看是否完全依赖主键了,就像伴娘团,跟你伴郎有鸡毛关系啊。
多表查询
左连接
左表+共有的部分
语法关键字为 LEFT JOIN
右连接
右表+共有的部分
语法关键字为 RIGHT JOIN
内连接
共有的部分
语法关键字为 INNER JOIN
或 JOIN
交叉连接
每条数据对应每条数据,返回两个表的乘积,就像2*3等于6一样,表一有2条数据,表二有3条数据,就返回6条数据
显式
语法关键字为CROSS JOIN
隐式
例如 select * from 表1,表2;
子查询
将一个查询语句嵌套在另一个查询语句中
事物
特性
原子性
要么同时成功要么同时失败。就像人,要么生要么死
一致性
表示数据库执行前后,数据库中的数据都是一致性的状态。就像人,你的状态是一致的,你还是你,你不会变成另外一个人
隔离性
多个事务之间相互隔离,互不干涉。人也是独立的一个个体
持久性
事务一旦提交,对数据库中的数据所做的修改就是永久的,人也是永久的,如果做了什么决定,我们也不能再让时间倒流,我们没有后悔的权力
并发问题
脏读(读未提交)
读到了已经修改但是没有提交的数据
不可重复读(读已提交)
事务A读取一个数据,但是事务B修改并提交了,事务A再次读取,数据不一样了
幻读(可重复读)
把数据删除了,但是读到了被删除的数据
幻读的问题可以用串行化
解决
MySQL索引
- 功能分类
- 普通索引: 最基本的索引,它没有任何限制
- 唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值组合必须唯一
- 主键索引:一种特殊的唯一索引,不允许有空值。一般在建表时同时创建主键索引
- 组合索引:顾名思义,就是将单列索引进行组合
- 外键索引:只有InnoDB引擎支持外键索引,用来保证数据的一致性、完整性和实现级联操作
- 全文索引:快速匹配全部文档的方式。InnoDB引擎5.6版本后才支持全文索引。MEMORY引擎不支持
- 结构分类
- B+Tree索引 :MySQL使用最频繁的一个索引数据结构,是InnoDB和MyISAM存储引擎默认的索引类型
- Hash索引 : MySQL中Memory存储引擎默认支持的索引类型