目录
[(1)、关系型数据库 (Relational Database Management System)](#(1)、关系型数据库 (Relational Database Management System))
[(2)、非关系型数据库(not only SQL)](#(2)、非关系型数据库(not only SQL))
[(3)关系型数据库 和非关系型数据库的区别](#(3)关系型数据库 和非关系型数据库的区别)
[(3)、使用MySQL 8.0 Command Line Client - Unicode](#(3)、使用MySQL 8.0 Command Line Client - Unicode)
今天我们来开始了解数据库。你可能问什么是数据库?等等一系列问题。现在我们带着疑惑来学习数据库的基础知识,在这篇文章里你将会找到答案。
一、数据库的介绍
1、什么是数据库(DataBase)
数据库(DB)是"按照数据结构来组织、存储和管理数据的应用程序",是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
简单来说数据库就是一个仓库,对数据进行存储和管理。
👧🏻:数据库和数据结构之间有什么关系?
👩🏻💻:数据结构是组织数据的一种方式,而数据库的底层用一些合适的数据结构把数据组织并保存起来,主要作用管理数据。
👧🏻:为什么要使用数据库?
👩🏻💻:因为数据库把数据保存在磁盘中 ,完成对数据的持久化 ,每次程序重新加载可以从数据库中读取以前的数据,确保数据在断电或系统崩溃后不会丢失。而数据结构将数据保存在内存中,数据在断电或系统崩溃后将会丢失。
👧🏻:文件也存储在磁盘中,为什么不用文件存储数据呢?
👩🏻💻:因为文件存在安全性问题,不利于数据查询和管理,不利于存储海量数据并且在程序中控制不方便。而数据库具有更好数据管理能力和查询能力,可以更方便地进行数据的增删改查操作,支持事务处理和数据的完整性约束,并且数据库可以支持多用户同时访问和操作同一数据。
📌:扩展点:一般在数据库中,不建议存储文件,而是把文件存储在磁盘上,在数据库相应的字段中保存文件路径。在查询文件的时候,先在数据库中找到文件路径,再根据文件路径在磁盘上加载或返回具体真实的文件。
2、数据库的存储介质
(1)、分类:
- 内存
- 磁盘
(2)、区别:
|---------|------------------|
| 内存 | 外存 |
| 容量小 | 容量大 |
| 速度快 | 速度慢 |
| 造价高 | 造价低 |
| 断电后数据丢失 | 断电后数据不丢失(数据永久保存) |
[内存和外存的区别]
3、数据库的基本操作
对数据进行增删改查
- 增 -- 增加 (Create) --- 新增数据
- 删 -- 删除 (Delete) --- 删除数据
- 改 -- 修改(Update) --- 修改数据
- 查 -- 查询 (Retrieve) --- 查询数据
4、数据库的分类
- 关系型数据库
- 非关系型数据库
(1)、关系型数据库 (Relational Database Management System)
①、概念
关系型数据库(RDBMS):采用关系模型来组织数据的数据库。简单来说关系模型是二维表格模型,一个关系型数据库是由二维表及其它们之间的联系所组成的的一个数据组织。
比如:

👩🏻💻:关系型数据库 使用表、行和列的方式来组织和存储数据。

②、常见的关系型数据库:
- SQL Server:Microsoft开发的一种关系型数据库管理系统(专业级的数据库),广泛应用于Windows平台。
- MySQL:MySQL是一种开源、免费的关系型数据库,中小型企业用的多。
- Oracle:一种商业级关系型数据库系统(业内最强数据库),是收费的,适用于大型企业应用。
- SQLite:SQLite是一种轻量级的嵌入式关系型数据库(小型数据库),处理简单的数据存储,常用于手机APP。
- ACCESS:由微软的OFFICE中集成的一个小型数据库,主要用于个人和小型组织。
- PostgreSQL:一种强大的开源关系型数据库系统。
- IBM Db2:由IBM公司开发和维护的商业关系型数据库,用于企业级应用程序和数据分析。
- MariaDB:MySQL的分支,是一个由社区支持的开源项目,提供高可用性和可扩展性。
(2)、非关系型数据库(not only SQL)
①、概念:
非关系型数据库(NoSQL):是一种不使用传统关系型数据库模式的数据库。可以基于文档、列存储、键值对等不同的数据结构进行存储。
②、常见的非关系型数据库:
- Redis:内存级别的数据库,可以把数据持久化到磁盘
- MongDB:文档数据库
(3)关系型数据库 和非关系型数据库的区别
|--------|---------------------|-------------------------------|
| | 关系型数据库 | 非关系型数据库 |
| 使用SQL | 是 | 不强制要求 |
| 事务支持 | 支持 | 不支持 |
| 复杂操作 | 支持 | 不支持 |
| 海量读写操作 | 效率低 | 效率高 |
| 基本结构 | 基于表和列,结果固定 | 灵活性比较高 |
| 使用场景 | 业务方面的OLPT(联机事务处理)系统 | 用于数据的缓存或基于统计分析的OLAP(联机分析处理)系统 |
5、数据库服务器
数据库服务器:指一种专门用于存储、管理和处理数据库的硬件设备或软件程序。

👩🏻💻:从上面的图可以看出,一台计算机提供的数据库服务中可以创建多个数据库,每个数据库中有多张数据表,每个数据表含有多条数据行,每条数据行含有多个列。
👩🏻💻:扩充点:数据库、数据库管理系统、数据库服务器的区别
数据库(DB):存储数据的仓库;
数据库管理系统(DBMS):管理这些数据的软件;
数据库服务器:运行着数据库管理系统的软件和硬件的系统
二、MySQL数据库
1、为什么要使用MySQL数据库?
👩🏻💻:MySQL是一种开源的关系型数据库,运行速度快、免费、易使用、可移植性强、丰富的接口支持、安全性高、历史悠久且社区活跃等。
2、MySQL的安装官网
https://www.mysql.com/downloads/

👩🏻💻:需要自己安装和配置环境哟
3、常见的客户端工具(了解)
(1)、通过终端使用mysql.exe

(2)、使用命令提示符


mysql -uroot -p命令 -- 用于连接到MySql数据库服务器,并以root用户身份登录。
🎯注意:
出现这就话,不要慌,这个表示一个错误提示,表示当前用户(root),在访问本机的mysql服务器出现了密码错误
(3)、使用MySQL 8.0 Command Line Client - Unicode
👩🏻💻:扩充点:客户端与数据库服务器之间的通讯方式
请求:是发送请求到服务器时明确的指定自己要操作的目标
比如:访问哪个数据库中的哪个表;哪个表中的哪个数据行,哪个数据行中的哪些列
响应:服务器将会把处理后的结果返回个客户端
请求和响应在整个过程中是成对出现的。
客户端与服务器之间的交互模型为C/S架构,通过网络进行交互的。⭐易错点:本机客户端与本机服务器端之间也是通过网络进行交互的。
172.0.0.1表示本机IP地址。无论本机是否有网络,始终访问本机地址。
👧🏻:我知道了为什么要使用MySQL数据库,那如何操作数据库呢?
👩🏻💻:我们知道数据库使用来保存数据的,而操作数据库需要使用SQL这门语言。
👧🏻:为什么使用SQL这门语言?
👩🏻💻:因为SQL本身就是针对数据库操作的语言。
通过上面对话,我们认识SQL是针对数据库操作的语言,接下来我们认识SQL。
4、SQL
(1)、SQL分类
- DDL(Data Definition Language) -- 数据定义语言,用来维护存储数据的结构
- DML(Data Manipulation Language) -- 数据操纵语言,用来对数据进行操作
- DCL(Data Control Language) -- 数据控制语言,主要负责权限管理和事物
- DQL(Data Query Language):数据查询语言,用来查询数据库中的记录
(2)、SQL语法规范
- MySQL数据库的SQL语句不区分大小写
- SQL语句可以单行或多行书写,并且以分号结尾
- SQL语句可以使用空格,提高代码的可读性
- 注释:单行注释:--注释内容;多行注释:/*注释内容*/
通过对前面数据库和MySQL数据库的认识,我们开始学习数据库以及表的操作。
⭐⭐⭐三、数据库的操作
当我们想要创建数据库的时候,我们并不知道是否有我们想创建的数据库。因此,我们需要先查看在数据库服务器中当前存在的数据库,是否有我们想要创建的表。
1、显示当前数据库
show databases;

通过执行**show databases;**显示出上面几个数据库,
蓝色框表示的数据库是用户自己创建的数据库,每个数据库的名字不能相同(可以删除);
⭐⭐红色框中的四个数据库是MySQL自带的数据库,记录一些关于MySQL自身的一些的配置、性能、系统变量信息。(一定不要删除这四个数据库)
在我们查看数据库之后,我们需要创建数据库
2、创建数据库
(1)、语法
sql
create {database | schema} [ if not exists] db_name
[create_ option] ...
create_ option:[default]{
character set [=] charset_name
|collate [=] collation_name
|encryption [=] {'Y'|'N'}
}
- db_name -- 自己创建的数据库名
- database 、schema -- 都表示数据库
- character set -- 字符集
- collate -- 排序规则
- encryption -- 是否加密
👩🏻💻注意:
- create、database 、schema、 if not exists、default、character set、collate、encryption 是MySQL的关键字
- [ ] -- 表示可选项
- { } -- 表示必须有这个关键字
比如:创建test和db_test3的数据库

⭐:易错点:
①、**在创建数据库时,不能重复建相同的数据库(数据库名不能相同)。如果在创建数据库时不加if not exists(校验)**时,创建与数据库服务器的某一个数据库名相同时,可能会因为这条 SQL 出错导致整个SQL中断执行。如果在创建数据库时加if not exists时,可以执行但会多一条警告。
比如:

②、MySQL中允许使用关键字来命名数据库,但需要用反引号来引用
比如:

(2)、指定字符集和排序规则
①、字符集
- 在MySQL的8.0版本中默认字符集 --utf8mb4。
- 在MySQL的5.7版本中默认字符集 --latin1(不能存储中文)。
②、排序规则
- 在MySQL的8.0版本中默认排序规则 -- utf8mb4_0900_ai_ci (ai(accent insencitive)表示口音不敏感、ci (case insencitive)表示大小写不敏感)
- 在MySQL的5.7版本中默认排序规则 -- utf8mb4_genneral_ci
注意:我建议手动指定字符集和排序规则
比如:

③、查看当前数据库服务的默认字符集
可以通过
sql
show variables like '%character%';
来查看当前数据库服务的默认字符集
比如:

3、使用数据库
语法
sql
use 数据库名;

👩🏻💻:扩充点:我们如何查看当前选择哪个数据库,我们可以使用
sql
select database();

4、删除数据库
语法
sql
drop database [if exists] 数据库名;
注意:删除数据库要慎之又慎。因为在删除数据库之后,数据库里面的表和数据全部被删除。

⭐⭐⭐四、表的操作
我们需要在操作表的时候,要先选择需要使用的数据库。
1、选择数据库
sql
use 数据库名;
2、创建表
sql
create table if not exists 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型
);
比如:创建一个学生表

👩🏻💻:可以使用comment增加字段说明
比如:创建一个教师表并增加字段说明

注意:在定义字段时,需要写在( )中,并在在结尾处加上分号(;);定义字段时,字段和字段之间加上逗号,但定义最后一个字段时,不需要加逗号。
3、查看当前数据库中的表
sql
show tables ;

4、查看表结构
sql
desc 表名;

- Field -- 字段名
- Type -- 字段类型
- Null -- 是否允许为空
- Key -- 键值的类型
- Default -- 默认值,什么都不指定的时候就是NULL
- Extra -- 扩充内容
5、删除表
sql
drop [ temporary] table [if exists] 表名 [,表名] ... ;
temporary -- 用户创建的临时表
一条语句可以删除多张表,表与表之间用逗号分隔开

如果再次执行drop table if exists student,teacher;,则出现警告

注意:删除表操作一定要慎重
五、常用数据类型
1、数值类型
|----------------------------|------------|---------------------------------|----------------------------|
| 数据类型 | 大小 | 说明 | 对应java类型 |
| bit[(M)] | M指定长度,默认为1 | 二进制数,M的范围1~64,存储数值范围从0~2^M-1 | boolean 对应bit,默认是1位,只能存0和1 |
| tinyint (bool= tinyint(1)) | 1字节 | | byte |
| smallint | 2字节 | | short |
| int | 4字节 | | integer |
| bigint | 8字节 | | long |
| float(M,D) | 4字节 | 单精度,M指定长度,D指定小数位数。会发生精度丢失 | float |
| double(M,D) | 8字节 | 双精度,M指定长度,D指定小数位数。会发生精度丢失 | double |
| decimal(M,D) | M/D最大值+2 | 双精度,M指定长度,D指定小数位数。精度数值 | bigdecimal |
| numeric(M,D) | M/D最大值+2 | 双精度,M指定长度,D指定小数位数。精度数值 | bigdecimal |
注意:我们使用decimal类型表示小数,decimal一般用于表示金钱。decimal中的M最大位数65
,D的最大小数30。M的默认值为10,D的默认值为0。
👩🏻💻:扩充点:
- 数值类型可以指定为无符号(unsigned),但尽量不使用unsigned。
- 1字节(bytes)= 8bit。
- 对于整型类型的范围:
①、 有符号范围:-2^(类型字节数*8-1)到2^(类型字节数*8-1)-1,如int是4字节,就
是-2^31到2^31-1
②、 无符号范围:0到2^(类型字节数*8)-1,如int就是2^32-1
2、字符串类型
|---------------|--------------|-------------|-----------|
| 数据类型 | 大小 | 说明 | 对应java类型 |
| varchar(size) | 0-65535 字节 | 可变长度字符串 | String |
| text | 0-65535字节 | 长文本数据 | String |
| mediumtext | 0-16777215字节 | 中等长度文本数据 | String |
| blob | 0-65535字节 | 二进制形式的长文本数据 | byte[ ] |
注意:varchar(size)中size可指定长度。在utf8mb4编码集情况下,一个varchar字段最多存放16383个字符(utf8mb4编码集中一个字符最多占4个字节)。
👩🏻💻:扩充点:文本文件和二进制文件的含义
文本文件:人可以直接看懂的文件。
二进制文件:只有机器读懂的文件。
3、日期类型
|--------------------------------|-----|---------------------------------|-------------------------------------|
| 数据类型 | 大小 | 说明 | 对应java类型 |
| datetime (YYYY-MM-DD hh:mm:ss) | 8字节 | 范围从 1970 到 2038年,自动检索当前时区并进行转换。 | java.util.Date 、 java.sql.Timestamp |
| timestamp | 4字节 | 范围从 1970 到 2038年,自动检索当前时区并进行转换。 | java.util.Date 、 java.sql.Timestamp |
这篇文章我们初始数据库,也了解了什么是数据库,为什么使用MySQL数据库以及学习了MySQL数据库基础--数据库操作、表操作、数据类型。