当前主要使⽤两种类型的数据库:⾮关系型数据库、关系型数据库。非关系型数据库NoSQL指的是Not Only SQL——不仅仅是SQL,并没有替代SQL,甚至还要兼容SQL的语法。关系型数据库SQL,使用二维表的方式来存储数据,关系型数据库管理系统则称为RDBMS,RDBMS一些常见的概念如下。
1、事务的ACID特性
数据库中的事务指的是逻辑上的一组操作,具有如下特性。
(1)原子性(Atomicity)
事务是一个不可再分割的工作单位。整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态。
(2)一致性(Consistency)
在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。即数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
(3)隔离性(Isolation)
隔离状态执行事务,一个事务不能影响另一个事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
(4)持久性(Durability)
在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
2、键
键主要包括超键、候选键、主键、外键。
(1)超键:存在于数据库中,是数据库中用来唯一标识一条记录的属性或者属性集。PS:通常是由数据库来管理维护,和业务数据无关。
(2)候选键:是关系中能够唯一标识记录的属性或者属性集。候选键可以有多个,是由用户根据业务的特性来设定的。关键字:unique。
(3)主键:是指关系中当前正在使用的候选键。具有唯一和非空特性。关键字:primary key。
(4)外键:如果关系B中的属性M的值全部来源于关系A中的属性N,且在关系A中,属性N是其候选键之一。关键字:foreign key。
3、范式
范式:简称NF,NF分为六类,分别是:1NF、2NF、3NF、BCNF、4NF、5NF。范式的实现是从低到高实现,要实现后面的范式首先得保证前面的范式达成。即满足2NF,则必然满足1NF。范式的实现成本也是从低到高,一般来说,业务只需要满足3NF即可。关系型数据库进行建表时候普遍需要遵循三范式。
(1)1NF:表中不存在重复的列。列名不重复,一列不能分为多个子列。
(2)2NF:表中不存在重复的行。只需要表中存在候选键即可。
(3)3NF:关系中不存在可传递的依赖关系(主从)。
4、约束
约束的存在是为了保证数据库中的数据的实体完整性和参照完整性。
约束一般分为五类:
(1)主键约束:primary key,由用户指定。主键约束具有唯一性和非空性。同时,数据库会自动对主键创建索引。
(2)外键约束:foreign key,由用户指定。一旦建立外键约束,则被引用的数据不能轻易删除。
(3)唯一约束:unique、唯一性,但是允许为空。
(4)非空约束:not null,不允许为空。
(5)检查约束:check,这个一般是根据业务需要去人为添加。
PS:目前来说,一般至少要保证有主键。主流的做法就是将其它约束前移到应用层进行处理。
5、视图
视图是一个虚拟表,它可以是数据库中一个或多个表中导出来的表,也可以从已经存在的视图的基础上定义。通过视图看到的数据是放在基本表中的数据。对视图的操作与对表的操作一样,可以查询、修改、删除。当通过视图看到的数据进行变化时,相应的基本表中的数据也要发生变化;同时,若基本表的数据发生变化,则这种变化会自动反映到视图中。
(1)视图的优点
1)简单化,视图可以简化用户对数据的理解,简化操作,经常被使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
2)安全,通过视图用户只能查询和修改他们所能见到的数据,数据库中的其他数据则既看不见也取不到。
3)逻辑数据独立性,视图可帮助用户屏蔽真实表结构变化带来的影响。
(2)视图操作
创建视图语句格式:create view 别名 as 查询语句
后续查询即可直接操作视图 select * from 别名
查看视图语句格式:show create view 别名
修改视图语句格式:alter view 别名(表列名) as 查询语句
删除视图语句格式:drop 别名
6、索引
索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录,通俗的说,数据库索引好比是一本书的目录,能加快数据库的查询速度,因此,索引本身是能够提升查询语句的效率的。
(1)索引的特点
1)通过创建唯一索引,可以保证数据库表中每一行数据的唯一性。
2)可以加快数据的查询速度。
3)创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
4)索引需要占磁盘空间。
5)索引使用率也不是越高越好,要避免出现热点块问题。
(2)索引操作
创建索引语句格式:create index 索引名 on 表名(字段名(属性))
查看表索引语句格式:show index from 表名
删除索引语句格式:drop index 索引名 on 表名
7、explain
explain:执行计划,用来查看sql语句(查询)本身的执行效率的重要的命令。
使用格式:explain 查询语句