【数据库】基本知识一览

【数据库】基本知识一览

1. 数据库的分类: 关系型数据库和非关系型数据库。

1.1 关系型数据库:MariaDB、SQLite、SQL Server、 MySQL、PostgreSQL、Oracle

优点:

1. 易于维护:都是二维表结构,格式一致;
2. 使用方便,容易理解:SQL语言基本通用,可用于复杂查询;
3. 复杂操作 : 支持SQL,可用于一个表以及多个表之间非常复杂的查询;
4. 安全,存储在磁盘,基本不可能丢失。

缺点:

1. 读写性能比较差,尤其是海量数据的高效率读写;
2. 固定的表结构,灵活性稍欠;
3. 高并发读写需求,传统关系型数据库来说,硬件IO是一个很大的瓶颈;
4. 浪费空间:表中对应的字段可能没有值,但是仍然要占用空间,而且字段空间划分以最大字段字段划分,非常浪费。

1.2 非关系型数据库:HBASE、Redis、CouchDB、Cassandra、Neo4j、

  非关系型数据库严格上说不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对。

优点:

1. 格式灵活:存储数据的格式可以是 key、value形式,文档形式、图片形式等等,应用场景广泛,而关系型数据库只支持基本类型;
2. 速度快,效率高:nosql 可以使用硬盘或者随机储存器作为载体,而关系型数据库只能使用硬盘;
3. 高扩展性;
4. 成本低:nosql数据库部署简单,基本都是开源软件。

缺点:

1. 不提供sql 支持,学习和使用成本较高;
2. 无事务处理;
3. 数据结构相对复杂,复杂查询方面稍欠;
4. 不安全(内存,断电会造成丢失);

2. 关系型数据库是什么?

关系型数据库是一种建立在关系模型上的数据库。
关系模型:一种建立在关系上的模型,主要包含三个方面:
   数据结构:数据存储的方式,二维表(行和列)
   操作指令集合:所有的SQL语句
   完整性约束:表内数据约束(字段),表与表之间约束(外键)

3.数据库系统的结构是什么结构?

 3.1 数据库 database

 3.2 数据库系统 DBS (Database System) = DBMS( Database Management System) + DBA(Database Administrator)

 3.3 SQL( Structured Query Language) 结构化查询语言,分为三个部分: DDL、 DML 、DCL

DDL:数据定义语言,用来维护存储数据结构,代表指令 : create 、 drop 、alter;
DML:数据操作语言,用来对数据操作,代表指令:insert、delete、update,其内包含 
     DQL(select);
DCL:数据控制语言,主要负责权限管理(对用户管理),代表指令:grant、revoke;

数据库系统分为四层:DBMS—–>DB—–>table——>field

4. 数据库存储引擎有哪些?

数据库存储引擎是数据库底层软件组织,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎体用不同的存储机制、存储技巧、锁定水平等功能。使用不同的存储引擎,还可以获得特定的功能。MySQL的核心就是存储引擎。

存储引擎的选择:

如果需要 提交、回滚、奔溃恢复能力的事务安全能力,并要求实现并发控制,InnoDB是一个好的选择。

如果数据库的主要作用是 插入 和 查询,可以考虑 MyISAM 引擎,具有较高的处理效率。

如果只是临时存放数据, 数据量小,并且不需要较高的安全性,可以使用 Memory 引擎,MySQL的临时表就是用该引擎。

如果只有 insert 和 select ,支持 高并发的插入操作,可以使用 Archive,但本身不是事务安全的,Archive 适合归档和记录日志。 

使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能

5. 数据库事务:ACID

原子性(Atomic):事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。通常,与某个事务关联的操作具有共同的目标,并且是相互依赖的。如果系统只执行这些操作的一个子集,则可能会破坏事务的总体目标。原子性消除了系统处理操作子集的可能性

一致性(Consistency):事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的

隔离性(Isolation):由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,到底是另一个事务执行之前的状态还是中间某个状态,相互之间存在什么影响,是可以通过隔离级别的设置来控制的

持久性(Durability):事务结束后,事务处理的结果必须能够得到固化,即写入数据库文件中即使机器宕机数据也不会丢失,它对于系统的影响是永久性的

6. 事务的隔离级别:一个事务在开启时,读取数据就锁定,保持状态

数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读

Read uncommitted(未提交读):一个事务可以读取另一个未提交事务的数据,脏读

Read committed(读提交):一个事务要等另一个事务提交后才能读取数据,可以解决脏读问题,但是一个事务范围内两个相同的查询可能返回了不同数据,这就是不可重复读,主动为待修改记录加X锁

Repeatable read(重复读):开始读取数据(事务开启)时,加锁,内部实现通过Next-Key Locking 实现,Next-Key Locking 通过对 记录 和 记录间隙 (及范围)加锁,保证不会出现 更新、插入、删除的问题,解决不可重复读

Serializable:(序列化,串行)最高的事务隔离级别.在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读(幻读).但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用,通过加X锁的方式彻底解决更新丢失的问题,多出现在多用户的场景下
A读取,B读取,A修改,B修改(B修改前依赖了之前的数据)1000--》1 1000--》999

Mysql的默认隔离级别是 Repeatable read + Next-Key Locking 解决所有问题

5. 字段设计使用定长char 还是 变长varchar?

定长 用于 身份证、手机号码等长度不变的字段,如果有某个值长度不够,会自动补充空格。效率高,但是容易出错。

变长 用于 长度可变字段,储存什么值,结果就是什么值,效率低,但是正确性高。

6. 常用的列属性约束:

NULL、NOT NULL、default、primary key、unique key、auto_increment、comment、

7. 主键:

Primary key。一张表只能有一个主键,用来唯一约束该记录不能重复。

主键的设置方法:

  7.1 在创建表的同时,直接在某个字段后面添加 primary key,指定主键。非常直接,但是只能使用一个字段作为主键。

  7.2 在创建表的同时,在语句结束出,添加 primary key (number,course) 可以指定多个字段作为主键,成为联合主键。

  7.3 当表已经创建完成,再次额外追加主键。

8. 主键分为 业务主键 和 逻辑主键,业务主键 使用真实的业务数据,逻辑主键使用没有实际意义的字段做主键。

8. 唯一键: 一张表只能有一个主键,但可以有多个唯一键,唯一键用 unique key修饰。保证值唯一,不重复。特点是允许空。

9.范式: 数据库的设计应该满足第三范式。Noraml Foramt 是一种离散数学中的知识,是为了解决一种数据存储和优化的问题。

分为6层,范式为了节约空间而产生,范式越高,效率越低,所以基本满足第三范式就是合格的设计。

第一范式:1NF(保证原子性) 从表中取出的数据在使用之前,不需要再做额外的处理,表示数据不可再拆分。
第二范式:2NF(避免部分依赖)当表中存在复合主键时,有某些字段不是全部依赖主键确定,而依赖部分主键就能确定,成为部分依赖。 解决方法: 取消复合主键,使用逻辑主键。
第三范式:3NF(避免非主键依赖)表中存在字段不直接依赖主键确定,就称为非主键依赖。
解决方法: 将存在传递依赖的字段,以及依赖的字段本身单独取出,形成一个独立的表,然后将对应的实体主键添加到旧表中。

逆范式化:如果一个表中某些字段需要从其他表中获取值,效率低。可以将其值直接存储到当前表中,这样查询操作比较方便和直接,但是可能会导致数据冗余。

10 . 脏读、幻读和不可重复读

…continue…

0 0 vote
Article Rating
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments