数据库的三大特性
‘实’:表
‘属性’:表中的数据
‘关系’:表与表之间的关系
三范式
- 列不可分,属性不可分
- 确保表中的每列都是和主键相关,有主键,非主键字段依赖主键
- 保每列都和主键直接相关,而不是间接相关,非主键字段不能相互依赖
五大约束
primary KEY:设置主键约束;
UNIQUE:设置唯一性约束,不能有重复值;
DEFAULT 默认值约束
NOT NULL:设置非空约束,该字段不能为空;
FOREIGN key :设置外键约束。
索引
帮助mysql高效获取数据的数据结构。
hash索引
缺点:
- 只满足= in ,不能使用范围查询
- 无法被用来避免数据的排序操作
- 不能利用部分索引键查询
- 不能避免表扫描
密集索引与稀疏索引
- 密集索引文件中的每个搜索码值对应一个索引值
- 稀疏索引文件中只为索引码的某些值建立索引项
InnoDB
- 若一个主键被定义,该主键作为密集索引
- 若没有主键被定义,该表的第一个唯一非空索引则作为密集索引
- 若不满足以上条件,innodb内部会生成一个隐藏主键
- 非主键索引存储相关键位和其对应的主键值,包含两次查找
优化慢查询sql
- 根据慢日志定位慢查询sql
- 使用explain等工具分析sql
- 修改sql或者尽量让sql走索引
MyISAM适合场景(表级锁)
- 频繁执行全表count语句
- 对数据进行增删改的频率不高,查询频率频繁
- 没有事务
InnoDB适合场景(表级锁、行级锁)
- 数据增删改查频繁
- 可靠性要求比较高,支持事务
事务
事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
事务并发访问引起的问题以及如何避免
脏读 事务读到另一个事务的未更新数据
read-committed隔离级别以上可避免
更新丢失 mysql所有事务隔离级别在数据库层面上均可避免
不可重复读 repeatable-read隔离级别以上
事务特性
- 原子性:事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。
- 一致性:数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对同一个数据的读取结果都是相同的。
- 隔离性:一个事务所做的修改在最终提交以前,对其它事务是不可见的。
- 持久性:一旦事务提交,则其所做的修改将会永远保存到数据库中。
b+tree
B Tree 指的是平衡树,是一颗查找树,并且所有叶子节点位于同一层。
B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。
B+ 树有更低的树高
B+ 树相对于红黑树有更低的树高,进行寻道的次数与树高成正比,在同一个磁盘块上进行访问只需要很短的磁盘旋转时间,所以 B+ 树更适合磁盘数据的读取。
隔离级别
- 未提交读:事务中的修改,即使没有提交,对其它事务也是可见的。
- 提交读:一个事务只能读取已经提交的事务所做的修改。
- 可重复读:保证在同一个事务中多次读取同一数据的结果是一样的。
- 可串行化:强制事务串行执行,这样多个事务互不干扰,不会出现并发一致性问题。
MySQL 索引
- B+Tree 索引
有序性,所以除了用于查找,还可以用于排序和分组.
InnoDB 的 B+Tree 索引分为主索引和辅助索引。主索引的叶子节点 data 域记录着完整的数据记录,这种索引方式被称为聚簇索引。因为无法把数据行存放在两个不同的地方,所以一个表只能有一个聚簇索引。 - 哈希索引
哈希索引能以 O(1) 时间进行查找,但是失去了有序性:无法用于排序与分组;只支持精确查找,无法用于部分查找和范围查找。 - 全文索引
用于查找文本中的关键词 - 空间数据索引
空间数据索引会从所有维度来索引数据,可以有效地使用任意维度来进行组合查询。
删除表
- drop (删除表):把整个表去掉.以后要新增数据是不可能的,除非新增一个表。
- delete (删除表中的数据):delete 语句用于删除表中的行。
- truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)。与drop不同的是,只是清空表数据而已。
注意:truncate 不能删除行数据,要删就要把表清空。
转自https://www.cnblogs.com/konglingxi/p/10208510.html