什么是数据库?什么是MySQL?

438 阅读7分钟

数据库到底是啥?

​ 简单来说, 数据库是一个软件(准确的说是一类软件)这一类软件的功能就是 ”管理数据“ ,实现数据库软件的内部会广泛的使用到各种数据结构。

  • 数据库可以是一类软件 ---- 管理数据的软件,往往是把数据存储在硬盘上(持久化存储), 很方便的进行增删查改
  • 一个独立的分组(或数据集合)也可以称为是一个数据库!!!例如: 一个MySQL服务器上可以管理多个数据库
  • SQL: Structured Query Language

典型的数据库软件代表有:

  1. MySQL

    免费且好用~

  2. Oracle

    世界上最强数据库~ 收费! 并且价格昂贵!

  3. SQL Server

    这是一个微软搞得数据库软件

  4. SQLite

    这个数据库可以说是世界上 "装机量最大" 的数据库, 特点: 小巧轻量~

其实不管是哪个数据库, 其实最核心东西就是 SQL 语句(编程语言), 虽然不同的数据库支持的数据库语法略有不同, 但 %90 的东西都是相同的

  • SQL: Structured Query Language
  • 上述的数据库都称为 "关系型数据库" 典型特征就是使用 "数据表" 的格式来组织数据的

关于MySQL

MySQL 结构

​ MySQL 是数据库的一种~ MySQL这个数据库,是一个"客户端-服务器"结构的程序. 对于MySQL来说,你安装好了MySQL相当于既是安装了客户端,也是安装了服务器,客户端和服务器之间是通过 "网络" 来通信的

  • MySQL服务器才是数据库的本体(在服务器端来保存数据和管理数据)
  • 服务器程序一般都是不需要界面的,默认在后台运行

数据库管理的数据,保存在哪里呢?

​ 一般情况下,是保存在硬盘上的所以数据库也叫 "持久化存储" 方式但也有少数数据库,是把数据存在内存中的(Redis,Tair...)

关于内存和外存

内存: 例如手机的运行内存

外存: 即硬盘. 软盘、磁盘、光盘、flash(U盘)...

内存和外存的区别:

  1. 内存空间较小,外存的存储空间较大
  2. 内存的访问速度快、外存的访问速度慢(大概要差3~4个数量级)
  3. 内存成本高、外存成本低
  4. 内存中的数据,断电后消失。外存中的数据,断电后还会存在

计算机常用操作的时间:

  • 访问网络: s ~ ms
  • 访问磁盘: ms ~ us(微秒)
  • 访问内存: us ~ ns(纳秒)
  • 操作cup: ps(皮秒)

字符集

​ 所谓的字符集(或编码方式)就是描述了数字与汉字间的对应关系(或映射关系) 我们所知道的 ASCII 码表是适用于英文的并不适用于中文, 本质上就是使用 数字 来表示 字符, 即数字和汉字的对应关系, 并且表格是存在多个版本的. 常用的主要是两个版本: GBK 和 UTF-8

​ 创建数据库可以指定字符集和校验规则, 字符集描述了存储的数据都支持啥样的字符, 校验规则就描述了当前字符之间该如何进行比较. 我们所知道的 ASCII 码表是适用于英文的并不适用于中文, 本质上就是使用 数字 来表示 字符, 即数字和汉字的对应关系, 并且表格是存在多个版本的.常用的主要是两个版本: GBK 和 UTF-8

GBK

使用两个字节来表示一个汉字, 然后指定出了一个大表格, 这个表格就是 GBK 字符集

UTF-8

​ UTF-8 变长编码, 一个文字使用几个字节表示,是不确定!是可变的!它的大小是根据你是什么字符来决定的. 例如, 一个英文字符一般占 1个字节 , 一个汉字字符一般占 3个字节 因此 UTF-8 就可以表示全世界所有语言的文字! UTF-8 也被视为是 "世界通用的字符编码"MySQL 默认的字符集是 拉丁文, 不支持中文. 插入中文就会报错, 要想让 MySQL 支持中文, 就需要手动配置字符集为 UTF-8

  • 一个汉字(或字符)占几个字节, 要得先确认是那种字符编码!
  • MySQL设置的是 utf8mb4 和 utf-8 差不多(mb4这里只不过就是多了些特殊字符)

关于环境

几个常见的环境:

  1. 办公环境

    也就是公司给你配的电脑, 你使用这个电脑来完成日常办公工作

  2. 开发环境/测试环境

    一般就是以服务器的形式来提供的,通过办公电脑通过网络远程的连接到你的服务器

  3. 测试环境

    测试岗位的程序猿, 要针对程序进行测试所使用的环境

  4. 线上环境/生产环境

    程序写好了, 最终是需要让外面的用户来使用的, 部署到线上环境的程序, 就能够被全世界的用户来访问了

    • 生产环境是以服务器的形式来提供的,也是通过办公电脑的网络远程连接上去的

如何避免删库操作?或者把删库带来的代价降到最低?

  1. 权限

    设置权限, 不是每个人都能登上数据库, 即使登上了数据库也不是每个人都能修改, 只有少数人才有修改/删除的权限

  2. 备份

    即把数据再拷贝一份, 存在另外一个地方去

  3. 硬盘数据恢复

    如果真的是在极端状况下, 删了库也没有备份, 还有一招那就是回复硬盘数据

    • 操作系统为了方便进行管理, 把整个硬盘又分为若干个 "盘块" , 每个盘块都可以保存一定的数据. 每个文件, 实际上可能是有一个或者多个盘块上面的数据来构成的
    • 当操作系统删除文件的时候, 为了提高删除动作的效率, 在删除的时候并不是真的把硬盘上之前保存的数据擦除掉, 而是把该文件对应的盘块, 标记为了 "无效状态" . 因此像这种删除操作并不是真正的删除, 只是逻辑上删除

MySQL数据库的几个基本操作:

  1. 显示数据库 show databases
  2. 创建数据库 create database 数据库名
  3. 选中数据库 use 数据库名
  4. 删除数据库 drop database 数据库名

关于数据表的几个基本操作

  1. 查看表结构: desc 表名

    • Field: 表示字段名字. 一个字段代表一列, 你有几个字段就有几列
    • Type: 表示字段的类型
    • Null: 表示当前这列是否允许内容为空 (类似于有的表格的必填项和选填项)
    • Key: 表示索引类型
    • Default: 表示默认值, null 表示这个字段为空, 啥也不填
    • Extra: 表示扩充内容, 额外信息
  2. 创建表: create table 表名

  3. 删除表: drop table 表名

MySQL 是如何组织数据的

​ 一个主机, 一个 MySQL 服务器, 就可以把这些都管理起来. 但是为了让这些数据之间不要相互影响, 因此就可以逻辑上分开, 也就放到不同的数据库里了

  • MySQL是通过数据表的方式来组织具体的数据的(类似与excel表格)

  • 就好比一栋楼里有好几家餐馆, 几家餐馆都在同一栋楼中但它们之间并不影响, 并且他们的菜品也都不一样

  1. 一个数据库中,可以有很多个数据表
  2. 每个数据表又有很多行,每一行称为是一条"记录"
  3. 每一行又有很多列,每一列称为是一个"字段"
  4. MySQL这样的数据库,就要求每一行这里的列都是一样的
  5. 为了描述这个数据表中的列的信息,在创建数据表的时候,就需要指定表头

注意:

  • 不是所有数据,都是按照表格的方式来组织的 !
  • 像MySQL,Oracle,SQL Serve都是按照表格来组织的,称为"关系型数据库"
  • 像Redis, HBase, MongoDB不要求按照表格方式组织(类似于 文档/键值对), 称为"非关系型数据库"