MySQL

写在前面

最早接触的数据库就是MySQL,包括之前写项目的时候基本上用的也是这个,虽然之前学过数据库这门课,但是只停留在用的基础上。这次抽时间又从头理了一下,确实发现之前项目中数据库存在了很多问题,至于数据库中底层的原理,等以后深究数据结构时在进行总结,现在就只对数据库中主要的应用部分进行个梳理,以便日后可以正规地使用数据库。

MySQL综述

1、什么是数据库

定义:数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。

作用:保存,并能安全管理数据(如:增删改查等),减少冗余...

数据库分类

  • 关系型数据库(SQL):
    • MySQL , Oracle , SQL Server , SQLite , DB2 , ...
    • 关系型数据库通过外键关联来建立表与表之间的关系
  • 非关系型数据库(NOSQL):
    • Redis , MongoDB , ...
    • 非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定

2、MySQL存储引擎

MySQL的数据表的类型 : MyISAM , InnoDB , HEAP , BOB , CSV等...

常见的为MyISAM 与 InnoDB 类型

名称 MyISAM InnoDB
事务处理 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
数据锁 表锁,锁住整个表(不适合高并发场景) 行锁,只锁住某一行的操作(适合高并发场景)
表空间大小 较小 较大(约为2倍)
关注点 性能 事务
缓存 缓存索引,不缓存真实的对象 缓存索引和真实的数据,对内存要求高

适用场合

  • MyISAM : 节约空间及相应速度
  • InnoDB : 安全性 , 事务处理及多用户操作数据表

数据表的存储位置 :

  • MySQL数据表以文件方式存放在磁盘中

    • 包括表文件 , 数据文件 , 以及数据库的选项文件
    • 位置 : Mysql安装目录\data\下存放数据表 . 目录名对应数据库名 , 该目录下文件名对应数据表 .
  • 注意 :

    • InnoDB类型数据表只有一个 *.frm文件 , 以及上一级目录的ibdata1文件
    • MyISAM类型数据表对应三个文件 :
      • * . frm -- 表结构定义文件
      • * . MYD -- 数据文件(data)
      • * . MYI -- 索引文件(index)

3、MySQL事务

什么是事务

  • 事务就是将一组SQL语句放在同一批次内去执行
  • 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行
  • MySQL事务处理只支持InnoDB和BDB数据表类型

事务的ACID原则

  • 原子性(Atomic):整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节,也不可能只执行对的操作。当事务在执行过程中发生错误,会被回滚(ROLLBACK)到事务开始前的状态,之前执行过的操作复原。

  • 一致性(Consist):事务必须始终保持系统整体处于一致的状态,不管在任何给定的时间并发事务有多少。相当于能量守恒定律,无论多个事务怎样操作,系统中的总量和是保持一致的

  • 隔离性(Isolated):隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。

  • 持久性(Durable):在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

4、数据库索引

作用 :

  • 提高查询速度
  • 确保数据的唯一性
  • 可以加速表和表之间的连接 , 实现表与表之间的参照完整性
  • 使用分组和排序子句进行数据检索时 , 可以显著减少分组和排序的时间
  • 全文检索字段进行搜索优化.

分类 :

  • 主键索引 (Primary Key)
  • 唯一索引 (Unique)
  • 常规索引 (Index)
  • 全文索引 (FullText)

主键索引

主键 : 某一个属性组能唯一标识一条记录

特点 :

  • 最常见的索引类型
  • 确保数据记录的唯一性
  • 确定特定数据记录在数据库中的位置

唯一索引

作用 : 避免同一个表中某数据列中的值重复

与主键索引的区别

  • 主键索引只能有一个
  • 唯一索引可能有多个

常规索引

作用 : 快速定位特定数据

注意 :

  • index 和 key 关键字都可以设置常规索引
  • 应加在查询找条件的字段
  • 不宜添加太多常规索引,影响数据的插入,删除和修改操作

全文索引

作用 : 快速定位特定数据

注意 :

  • 只能用于MyISAM类型的数据表
  • 只能用于CHAR , VARCHAR , TEXT数据列类型
  • 适合大型数据集

索引类型

  • hash类型的索引:查询单条快,范围查询慢
  • btree类型的索引:b+树,层数越多,数据量指数级增长(我们就用它,因为innodb默认支持它)

索引准则

  • 索引不是越多越好
  • 不要对经常变动的数据加索引
  • 小数据量的表建议不要加索引
  • 索引一般应加在查找条件的字段

5、数据库设计

软件项目开发周期中数据库设计 :

  • 需求分析阶段: 分析客户的业务和数据处理需求
  • 概要设计阶段:设计数据库的E-R模型图 , 确认需求信息的正确和完整.

设计数据库步骤

  • 收集信息

    • 与该系统有关人员进行交流 , 座谈 , 充分了解用户需求 , 理解数据库需要完成的任务.
  • 标识实体[Entity]

    • 标识数据库要管理的关键对象或实体,实体一般是名词
  • 标识每个实体需要存储的详细信息[Attribute]

  • 标识实体之间的关系[Relationship]

三大范式

第一范式 (1st NF)

第一范式的目标是确保每列的原子性,如果每列都是不可再分的最小数据单元,则满足第一范式

第二范式(2nd NF)

第二范式要求每个表只描述一件事情

第三范式(3rd NF)

如果一个关系满足第二范式,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式.

实例参考文章

规范化和性能的关系

为满足某种商业目标 , 数据库性能比规范化数据库更重要

在数据规范化的同时 , 要综合考虑数据库的性能

通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间

通过在给定的表中插入计算列,以方便查询

posted @ 2020-02-13 17:46  Trizz  阅读(36)  评论(0)    收藏  举报