0


【MySQL系列】MySQL数据库基础

前言

学习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和1tinyint1字节Bytesmallint2字节Shortint4字节Integerbigint8字节Longfloat(M,D)4字节单精度,M指整个数字的有效数字位数不超过M,D指整个数字小数点后的位数不超过D,会发生精度丢失Floatdouble(M,D)8字节Doubledecimal(M,D)M/D最大值+2双精度,M指整个数字的有效数字位数不超过M,D指整个数字小数点后的位数不超过D,不会发生精度丢失Bigdecimalnumeric(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.Timestamptimestamp4字节范围从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数据库表的增删改查(基础)部分的内容了~~

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

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

标签: MySQL数据库

本文转载自: https://blog.csdn.net/qq_53362595/article/details/125721070
版权归原作者 哎呀是小张啊 所有, 如有侵权,请联系我们删除。

“【MySQL系列】MySQL数据库基础”的评论:

还没有评论