☕目录☕

  前言

            一、数据库介绍

                         1.1 什么是数据库

                         1.2 数据库的分类

            二、MySQL数据库的下载与安装(Windows版)

            三、MySQL的结构

                         3.1 MySQL 是一个”客户端-服务器”结构的程序~~

                         3.2 MySQL服务器这里,是如何组织数据的~~

            四、数据库的操作

                         4.1 显示当前的数据库

                         4.2 创建数据库

                         4.3 选中数据库

                         4.4 删除数据库

                         4.5 创建数据库时的存储位置

            五、常用的数据类型

                         5.1 数值类型

                         5.2 字符串类型

                         5.3 日期类型

            六、表的操作

                         6.1 创建表

                         6.2 查看有哪些表

                         6.3 查看表结构

                         6.4 删除表

  后续


前言

学习MySQL数据库,我们应该去学啥?

  1. 数据库基础操作(以SQL语句为核心)~~
  2. 数据库的底层原理~~
  3. 数据库编程(使用Java代码来进行操作)~~

其中,学习 数据库以SQL语句为核心的操作 是最为重要的,后面的两个也是以此为基础的!!!!!!

一、数据库介绍

1.1 什么是数据库

首先我们要知道什么是数据~~

其实,我们每天都在和数据打交道~~

现在的世界,就是由数据构成的世界~~

价格、颜色、身高、……都是数据~~

既然有这么多的数据,就需要把数据保存起来~~

在没有计算机的时候,写在纸上,有的时候会非常不方便~~

当有了计算机,使得保存和处理数据 非常方便,很友好~~

而 数据库,就是一类 专门负责管理(增、删、改、查)数据 的软件~~

ps:

数据结构 和 数据库 虽然都有”数据”,但是其中的区别还是非常大的:

数据结构:是一种”结构”,是一种”抽象的学科”;

数据库:是一类”具体的软件”,可以下载、安装,对其进行操作……

但是,我们也要明确~~

在实现数据库的时候,背后也会应用到很多的数据结构~~


1.2 数据库的分类

我们都知道了~~

数据库是一类具体的软件~~

因此数据库会有很多具体的实现~~

(1)MySQL数据库

MySQL数据库就是本专栏介绍的内容~~

开源、免费~~

现在已经被Oracle收购了~~

(2)Oracle数据库

Oracle数据库 是世界上最强的数据库~~

但是,它是收费的,而且收费还是挺贵的~~

厂商也叫做Oracle~~

现在也是由Oracle来负责维护Java~~

对于数据安全性要求极高,以及不差钱的企业~~

如 银行 用的就是Oracle数据库~~

(3)SQL Server数据库

SQL Server数据库,由 微软(搞Windows,office的公司) 研发的数据库~~

很多学校的数据库的课程,都使用该数据库来讲解的~~

(4)SQLite数据库

SQLite数据库,是世界上”装机量”最大的数据库~~

即使有很多人没有听说过~~

其实,各种安卓上机器自带的内置数据库就是SQLite数据库~~

主要的特点就是 小巧轻量~~

其他数据库 一不小心 就达到 以G为单位,而它仅仅不到几百K~~

虽然 有这么多的数据库~~

但是 不管哪一个数据库~~

其实最核心的东西~~

都是 SQL(编程语言)~~

掌握了SQL,未来无论去使用哪个数据库,都可以快速的上手~~

虽然 不同的数据库,支持的SQL语法都略有差异~~

但是,90%以上的都是相同的~~

上述的数据库,都称为 关系型数据库~~

其典型的特征,就是使用”数据表”的格式来组织数据的~~

即 和excel表格的形式差不多~~ 

随着时代的发展,数据库也有了一些本质的升级~~

发展到2022年,现在业界还有很多流行的”非关系型数据库”~~

不再使用”数据表”,也不再使用SQL了~~

这种数据库 也被称为 NoSQL~~

如 Redis、MongoDB、HBase……

二、MySQL数据库的下载与安装(Windows版)

MySQL安装视频_哔哩哔哩_bilibili

虽然安装时出现的页面可能不一样的,但是都大差不差的~~

怎样算是安装好了~~

开始菜单里面,有mysql的选项~~

如果启动起来,说明安装成功了~~

当然,如果要 从 cmd 窗口进入,输入 mysql -u root -p +密码 的这种就没有必要了~~

在学习阶段的时候,也没有啥必要(公司里面很多事那样做的,但是对于现阶段的我们没有必要)~~

直接根据上面分享的视频链接即可~~

三、MySQL的结构

3.1 MySQL 是一个”客户端-服务器”结构的程序~~

ps:

举个例子:

有一天,张三 来到楼下的 一家餐厅 吃饭~~

张三说:老板,来一份蛋炒饭~~

老板说:稍等~~

不一会儿,老板就把蛋炒饭端到了张三的面前~~

在上述情景里面,张三 是主动的一方,并不是被 餐厅 拉进去吃饭,餐厅是被动的一方,

即 张三 就是 客户端,而 餐厅 就是 服务器~~

 在计算机里面,客户端和服务器之间 通过网络的形式进行连接~~

客户端:主动的一方 就是客户端~~

服务器:被动的一方 就是服务器~~

一家餐厅,不可能仅仅只有 张三 进去吃饭,还有李四、王五等等~~

所以说,一个服务器 同一时刻,可能要给多个服务器 提供服务~~

张三 想要去吃饭的时间 是随机的,餐厅也不知道哪个人是什么时间来就餐~~

所以,它会从早开到晚才关门,甚至是二十四小时营业~~ 

所以说,因为服务器不确定客户端啥时候来,服务器往往要长时间运行,甚至是7*24小时运行~~

客户端给服务器发送的数据,称为”请求”(来一份蛋炒饭)~~

服务器给客户端返回的数据,称为”响应”(端上来一份蛋炒饭)~~ 

换句话说,安装了MySQL,就是 既安装了客户端(黑框框),也安装了服务器~~


客户端与服务器 在同一个主机上~~

MySQL客户端和MySQL服务器,可以在同一个主机上,也可以在不同的主机上~~

实际工作中,更常见的是 客户端和服务器 在不同主机上~~

在当前的学习阶段,就直接安装在一个主机上了~~

虽然是同一个主机,但是仍然是通过网络进行通信的~~

对于MySQL来说,存储和管理数据,都是由 MySQL服务器 来负责的~~

当然,如果把客户端和服务器都部署在一个主机上了,但是电脑没有联网。这个时候客户端依然能访问服务器~~

如果插上网线,连接wifi,网络是通畅的,此时电脑可以通过网络访问其他的主机~~

如果电脑没有插网线,连不上网,那么此时电脑只是访问不了别的主机,但是自己还是能访问自己的~~ 


3.2 MySQL服务器这里,是如何组织数据的~~

一个MySQL服务器上面可以包含多个”数据库”,

此处的”数据库”其实是”数据集合”,这里面就放了 一些有关联关系的数据~~

可以理解成,一栋楼 里面有好几家餐厅,餐厅之间并不影响~~

餐厅里面的菜品 就类似于 数据库里面存的数据表~~

   

数据表(学生表)
学号姓名性别学院专业班级
001张三计算机学院软件工程2班
002李四计算机学院物联网1班

每一个表里有很多行,每一行称为”一条记录”; 

每一行里有很多列,每一列表示不同的含义,每一列称为一个”字段”(field)~~

数据库 整体的一个结构:

数据库—>数据表—>行—>列~~

四、数据库的操作

4.1 显示当前的数据库

我们进入 MySQL客户端时,需要去看看当前服务器上有哪些数据库~~

这就需要可以 显示当前数据库 的命令行:

show databases;

那么,此时我们就可以看出 MySQL服务器 自带了4个数据库了~~

当然,我们也可以自己创建数据库,这个在下面介绍到~~

对此,我们需要注意的是:

  1.  对于其自带的数据库,没事千万不要乱碰,容易搞出问题~~
  2. 数据库中的命令行啥的,一律用的是英文的字母或符号,大小写没有啥关系~~

4.2 创建数据库

自己可以自己来创建数据库,创建数据库的命令行就是:

create database 数据库名;

数据库名的命名规则 依旧是和Java中创建变量的命名规则是一样的~~

当然,也可以这样创建数据库:

create database if not exists 数据库名;

意思是:如果这个数据库名不存在,那么就创建一个以该数据库名为名的数据库~~

如果这个数据库名存在,那就不创建了~~

下面我们来创建一个姓名为java的数据库:

这下说明,java数据库已经创建成功,我们可以看看此时存在的数据库:

当然,有的时候也会有创建错误,或者啥啥错误的情况,不要慌,下面也会有错误的提示~~

大部分的错误提示 都是非常清楚的,已经告诉过哪里有问题了~~

比如:

 错误提示 在哪句话附近错了提示的明明白白~~


4.3 选中数据库

如果我们想要 针对某一个数据库进行具体的操作,如 各种增删改查 数据库,就需要先选中数据库:

use 数据库名;

此时,我们可以来选中 刚刚创建的 java数据库~~

在对某一个数据库 进行操作时,必须得要选中这个数据库~~

类似于 RTS游戏~~

需要先选中某个单位,再释放技能~~ 


4.4 删除数据库

数据库删除非常危险!!!

数据库删除非常危险!!!

数据库删除非常危险!!! 

 删除数据库的命令行是:

drop database 数据库名;

此时,当前所有的数据库是:

删除java数据库后:

观察此时所剩的数据库,发现java数据库已经被删除: 

【注意】

删除数据库操作十分危险~~

删库其实是把库里的数据都删除了~~

千万不要在公司的服务器上删除数据库,尤其是不要在生产环境上进行删除~~ 


4.5 创建数据库时的存储位置

那么,我们所创建的数据库,它的存储位置要怎么去查找到的呢~~

首先,我们需要找到 MySQL数据库的服务器,右键,点击属性:

然后,找出MySQL配置文件的位置,复制其中相关路径:

最后,粘贴相关路径,找到Data文件夹,找到 存储位置:


注意:

当我们点开Data数据库时~~

当我们在MySQL客户端输入 show databases; 时 ~~

会发现 数据库的结果不一样:

好像有一个 information_schema数据库 匹配不上~~

实际上~~

Information_schema数据库 是视图,不是真表,是从别的库毛过来的数据,不需要单独存储~~

注意:

在Data文件夹 目录下,新建一个 名字为java的文件夹,即新建了一个java数据库,

那么 在 MySQL客户端下面输入 show databases; 后,会出现java数据库~~

当然,反过来创建,或者是删除,也都是如此~~

千万不要把自带的数据库删除了~~

这个是 客户端 和 服务器 在一台电脑的情况下,其他的情况不是很清楚~~

五、常用的数据类型

MySQL是一个”关系型数据库”,典型特点就是 通过表的形式来组织数据~~

即 每一行,其列数都是一样的;每一列,其数据类型都是相同的~~

数据类型一方面 一方面能够使我们对数据进行处理,一方面也能够对数据进行校验和检查~~


5.1 数值类型

数值类型 包含了 整型和浮点型:

数据类型大小说明对应java类型
bit [ (M) ] M指定位数,默认为1二进制数,M范围从1到64,存储数值范围从0到2^M-1常用Boolean对应BIT,此时默认是1位,即只能存0和1
tinyint1字节Byte
smallint2字节Short
int4字节Integer
bigint8字节Long
float(M,D)4字节单精度,M指整个数字的有效数字位数不超过M,D指整个数字小数点后的位数不超过D,会发生精度丢失Float
double(M,D)8字节Double
decimal(M,D)M/D最大值+2双精度,M指整个数字的有效数字位数不超过M,D指整个数字小数点后的位数不超过D,不会发生精度丢失Bigdecimal
numeric(M,D)
M/D 最大
+2
和decimal一样Bigdecimal

注意:

float、double的存储,基于IEEE754标准(规定了浮点数是如何存储的)~~

但是,这个标准不能特别精确表示浮点数~~

比如说,6.0000000000002存储的可能就是6.0~~

那么,decimal就出现了~~

相比于float和double,decimal相当于通过字符串的方式来表示浮点数,其优势是可以更加精确的表示浮点数、精确计算~~

但是劣势就是 计算时消耗的时间更多,存储空间也更多~~

所以说,除非是特别需要,才考虑使用decimal~~


5.2 字符串类型

数据类型大小说明对应java类型
varchar(size)
0-65,535 字节
可变长度字符串
String
text
0-65,535 字节
长文本数据
String
mediumtext
0-16 777 215 字节
中等长文本数据
String
blob
0-65,535 字节
二进制形式的长文本数据byte[ ]

说明:

varchar(50),这个字段最多存50个字符,也可能是更短的~~

这个是动态的,根据存入的数据长度来自适应空间~~ 

字符,不是字节!!!

一个字节,就固定是8bit~~

一个字符,就不一定了(取决于具体的字符编码)~~

Java中默认使用的是unicode编码,unicode编码中一个字符是两个字节~~


5.3 日期类型

数据类型大小说明对应java类型
datetime8字节范围从1000到9999年,不会进行时区的检索及转换java.util.Date、java.sql.Timestamp
timestamp4字节范围从1970到2038年,自动检索当前时区并进行转换java.util.Date、java.sql.Timestamp

说明:

timestamp翻译过来就是 时间戳~~

时间戳:以 1970 年 1 月 1 日 0 时 0 分 0 秒 作为基准时刻,计算当前时刻和基准时刻的秒数之差~~

计算机中表示时间 都是用时间戳来表示的~~

timestamp的范围是从1970年到2038年,那么到了2038年以后,很多程序估计要失效了~~

所以为了防患于未然,一般都用datetime~~


注意:

虽然 有这么多的数据类型,但是并不是每一个都是需要记住的:

所需要记住的类型有:

int      bigint      double      decimal      varchar      datetime

六、表的操作

6.1 创建表

创建表的命令行是:

create table 表名(列名 类型,列名 类型......);

注意:

和一般编程语言不一样的地方是,列名写在前,类型写在后;

C++,Java都是把类型写在前,变量名写在后~~

说明:

要想创建表,就需要先有一个数据库,并且选中数据库!!!!!! 

创建表的时候,必须要明确表结构,

即 有哪些列,每个列是啥类型,叫啥名字~~

同一个数据库中,不能有两个表 名字相同,否则会出错~~

创建表的时候,表名或列名,不能和SQL的关键字冲突~~

表名是一个关键字,已经有特定含义了,因此不能使用~~

但是,如果非要拿关键字作为表名,也不是不可以~~

可以使用 反引号` 来引起来~~


6.2 查看有哪些表

在选中数据库的前提下,可以使用:

show tables;

来查看当前数据库里面有哪些表~~


6.3 查看表结构

查看表结构的命令行是:

desc 表名;

通过这个命令行,可以查看这个表里面的列和类型~~

 上述说明:

  1. Field 列数,表示这张表有 id 和 name 两列~~
  2. int(11)的意思不是说占11个比特位,int就是固定4个字节,32个比特位;11表示的是打印数字的时候,显示数据的宽度最大是11位数;11只影响在客户端中的显示,不影响数据的存储和计算~~
  3. varchar(20)表示 约束存储的时候最多存20个字符~~
  4. NULL表示 这一列是否可以为空(YES,允许为空;NO,不允许为空)~~
  5. Default指的是 默认值~~

此处的desc是describe的缩写,不过我们平常用的肯定都是 简单形式的desc啦~~


6.4 删除表

删除表的命令行是:

drop table 表名;

观察 选定的数据库(java数据库)中有哪些表:

删除了其中的student表: 

再次观察该数据库还有那些表:

相比之下,student表删除成功~~ 

注意:

删表的操作十分危险,后果还要严重!!! 

删表的操作十分危险,后果还要严重!!! 

删表的操作十分危险,后果还要严重!!! 

表面上来看,一个库里包含很多表;删库,就会把所有的表都带走~~

但是,如果真的删库了,程序在运行的时候 只要涉及到数据库操作,100%报错~~

就会第一时间发现问题~~

但是,如果是删表(如100个表,删除1个表),程序也不一定是第一时间报错~~

虽然程序可能跑起来,但是最终跑的结果肯定是错的~~

就比如给《王者荣耀》充值,删库的情况 结果就是 所有玩家充值失败,可以第一时间知道;但是 删表的情况 结果就是 充值成功,但是一看点券咋没有涨(或者是可以这样说更具体:大多数可以正常充值,就有小部分充值未涨)这样的话就不会第一时间知道了~~

后续

这就是MySQL数据库基础的全部内容啦~~

下一篇就是MySQL数据库表的增删改查(基础)部分的内容了~~

如果这篇博客给你带来了收获~~

可以留下一颗小小的赞吗~~