【数据库】基本知识一览

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/ca1m0921/article/details/89856542

眨眼工作时间都快一年了,感觉自己还是很菜。很害怕遇到 数据库的问题,对于一些基本概念都搞不太清楚,今天 认真学习下。

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

bbb

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

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

存储引擎的选择:

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

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

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

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

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

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(避免非主键依赖)表中存在字段不直接依赖主键确定,就称为非主键依赖。

解决方法: 将存在传递依赖的字段,以及依赖的字段本身单独取出,形成一个独立的表,然后将对应的实体主键添加到旧表中。

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

数据库的字符集问题:  set names 字符集;(三码合一)

猜你喜欢

转载自blog.csdn.net/ca1m0921/article/details/89856542
今日推荐