数据库到底是啥?
简单来说, 数据库是一个软件(准确的说是一类软件)这一类软件的功能就是 ”管理数据“ ,实现数据库软件的内部会广泛的使用到各种数据结构。
- 数据库可以是一类软件 ---- 管理数据的软件,往往是把数据存储在硬盘上(持久化存储), 很方便的进行增删查改
- 一个独立的分组(或数据集合)也可以称为是一个数据库!!!例如: 一个MySQL服务器上可以管理多个数据库
- SQL: Structured Query Language
典型的数据库软件代表有:
MySQL
免费且好用~
Oracle
世界上最强数据库~ 收费! 并且价格昂贵!
SQL Server
这是一个微软搞得数据库软件
SQLite
这个数据库可以说是世界上 "装机量最大" 的数据库, 特点: 小巧轻量~
其实不管是哪个数据库, 其实最核心东西就是 SQL 语句(编程语言), 虽然不同的数据库支持的数据库语法略有不同, 但 %90 的东西都是相同的
- SQL: Structured Query Language
- 上述的数据库都称为 "关系型数据库" 典型特征就是使用 "数据表" 的格式来组织数据的
关于MySQL
MySQL 结构
MySQL 是数据库的一种~ MySQL这个数据库,是一个"客户端-服务器"结构的程序. 对于MySQL来说,你安装好了MySQL相当于既是安装了客户端,也是安装了服务器,客户端和服务器之间是通过 "网络" 来通信的
- MySQL服务器才是数据库的本体(在服务器端来保存数据和管理数据)
- 服务器程序一般都是不需要界面的,默认在后台运行
数据库管理的数据,保存在哪里呢?
一般情况下,是保存在硬盘上的所以数据库也叫 "持久化存储" 方式但也有少数数据库,是把数据存在内存中的(Redis,Tair...)
关于内存和外存
内存: 例如手机的运行内存
外存: 即硬盘. 软盘、磁盘、光盘、flash(U盘)...
内存和外存的区别:
- 内存空间较小,外存的存储空间较大
- 内存的访问速度快、外存的访问速度慢(大概要差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这里只不过就是多了些特殊字符)
关于环境
几个常见的环境:
办公环境
也就是公司给你配的电脑, 你使用这个电脑来完成日常办公工作
开发环境/测试环境
一般就是以服务器的形式来提供的,通过办公电脑通过网络远程的连接到你的服务器
测试环境
测试岗位的程序猿, 要针对程序进行测试所使用的环境
线上环境/生产环境
程序写好了, 最终是需要让外面的用户来使用的, 部署到线上环境的程序, 就能够被全世界的用户来访问了
- 生产环境是以服务器的形式来提供的,也是通过办公电脑的网络远程连接上去的
如何避免删库操作?或者把删库带来的代价降到最低?
权限
设置权限, 不是每个人都能登上数据库, 即使登上了数据库也不是每个人都能修改, 只有少数人才有修改/删除的权限
备份
即把数据再拷贝一份, 存在另外一个地方去
硬盘数据恢复
如果真的是在极端状况下, 删了库也没有备份, 还有一招那就是回复硬盘数据
- 操作系统为了方便进行管理, 把整个硬盘又分为若干个 "盘块" , 每个盘块都可以保存一定的数据. 每个文件, 实际上可能是有一个或者多个盘块上面的数据来构成的
- 当操作系统删除文件的时候, 为了提高删除动作的效率, 在删除的时候并不是真的把硬盘上之前保存的数据擦除掉, 而是把该文件对应的盘块, 标记为了 "无效状态" . 因此像这种删除操作并不是真正的删除, 只是逻辑上删除
MySQL数据库的几个基本操作:
- 显示数据库
show databases- 创建数据库
create database 数据库名- 选中数据库
use 数据库名- 删除数据库
drop database 数据库名
关于数据表的几个基本操作
查看表结构: desc 表名
- Field: 表示字段名字. 一个字段代表一列, 你有几个字段就有几列
- Type: 表示字段的类型
- Null: 表示当前这列是否允许内容为空 (类似于有的表格的必填项和选填项)
- Key: 表示索引类型
- Default: 表示默认值, null 表示这个字段为空, 啥也不填
- Extra: 表示扩充内容, 额外信息
创建表: create table 表名
删除表: drop table 表名
MySQL 是如何组织数据的
一个主机, 一个 MySQL 服务器, 就可以把这些都管理起来. 但是为了让这些数据之间不要相互影响, 因此就可以逻辑上分开, 也就放到不同的数据库里了
MySQL是通过数据表的方式来组织具体的数据的(类似与excel表格)
就好比一栋楼里有好几家餐馆, 几家餐馆都在同一栋楼中但它们之间并不影响, 并且他们的菜品也都不一样
- 一个数据库中,可以有很多个数据表
- 每个数据表又有很多行,每一行称为是一条"记录"
- 每一行又有很多列,每一列称为是一个"字段"
- MySQL这样的数据库,就要求每一行这里的列都是一样的
- 为了描述这个数据表中的列的信息,在创建数据表的时候,就需要指定表头
注意:
- 不是所有数据,都是按照表格的方式来组织的 !
- 像MySQL,Oracle,SQL Serve都是按照表格来组织的,称为"关系型数据库"
- 像Redis, HBase, MongoDB不要求按照表格方式组织(类似于 文档/键值对), 称为"非关系型数据库"