MySQL 服务器的进程也被称为 MySQL 数据库实例,简称数据库实例。MySQL 服务器进程的默认名称为 mysqld
, 而 MySQL 客户
端进程的默认名称为 mysql
。
基本概念 #
表 #
数据库可以理解是一个文件柜。此文件柜是一个存放数据的物理位置,不管数据是什么以及如何组织的。 在将资料放入文件柜时,并不是随便将它们扔进某个抽屉就完事了,而是在文件柜中创建文件,然后将相关的资料放入特定的文件中。 这种文件称为表。是一种结构化的文件,可用来存储某种特定类型的数据。
列和数据类型 #
列是表中的一个字段。所有表都是由一个或多个列组成的。
数据类型(datatype)所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。
行 #
行是表中的一个记录。
主键 #
主键是表中的一列(或一组列),其值能够唯一区分表中每个行。
表中的任何列都可以作为主键,只要它满足以下条件:
- 任意两行都不具有相同的主键值
- 每个行都必须具有一个主键值(主键列不允许
NULL
值)。
主键通常定义在表的一列上,但这并不是必需的。
外键 #
外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。
索引 #
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
索引的原理 #
- 对要查询的字段建立索引其实就是把该字段按照一定的方式排序
- 建立的索引只对该字段有用,如果查询的字段改变,那么这个索引也就无效了,比如图书馆的书是按照书名的第一个字母排序的,那么你想要找作者叫张 三的书就不能用这个索引了
索引是优缺点 #
首先明白为什么索引会增加速度,DB 在执行一条 SQL 语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。 如果对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。不应该加索引 的场景:
- 如果每次都需要取到所有表记录,无论如何都必须进行全表扫描了,那么是否加索引也没有意义了。
- 对非唯一的字段,例如“性别”这种大量重复值的字段,增加索引也没有什么意义。
- 对于记录比较少的表,增加索引不会带来速度的优化反而浪费了存储空间,因为索引是需要存储空间的,而且有个致命缺点是
对于
update/insert/delete
的每次执行,字段的索引都必须重新计算更新。
可伸缩性 #
可伸缩性(scale)能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序称之为可伸缩性好(scale well)。