☕目录☕
前言
一、数据库介绍
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数据库,我们应该去学啥?
- 数据库基础操作(以SQL语句为核心)~~
- 数据库的底层原理~~
- 数据库编程(使用Java代码来进行操作)~~
其中,学习 数据库以SQL语句为核心的操作 是最为重要的,后面的两个也是以此为基础的!!!!!!
首先我们要知道什么是数据~~
其实,我们每天都在和数据打交道~~
现在的世界,就是由数据构成的世界~~
价格、颜色、身高、......都是数据~~
既然有这么多的数据,就需要把数据保存起来~~
在没有计算机的时候,写在纸上,有的时候会非常不方便~~
当有了计算机,使得保存和处理数据 非常方便,很友好~~
而 数据库,就是一类 专门负责管理(增、删、改、查)数据 的软件~~
ps:
数据结构 和 数据库 虽然都有"数据",但是其中的区别还是非常大的:
数据结构:是一种"结构",是一种"抽象的学科";
数据库:是一类"具体的软件",可以下载、安装,对其进行操作......
但是,我们也要明确~~
在实现数据库的时候,背后也会应用到很多的数据结构~~
我们都知道了~~
数据库是一类具体的软件~~
因此数据库会有很多具体的实现~~
(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安装视频_哔哩哔哩_bilibili
虽然安装时出现的页面可能不一样的,但是都大差不差的~~
怎样算是安装好了~~
在开始菜单里面,有mysql的选项~~
如果启动起来,说明安装成功了~~
当然,如果要 从 cmd 窗口进入,输入 mysql -u root -p +密码 的这种就没有必要了~~
在学习阶段的时候,也没有啥必要(公司里面很多事那样做的,但是对于现阶段的我们没有必要)~~
直接根据上面分享的视频链接即可~~
ps:
举个例子:
有一天,张三 来到楼下的 一家餐厅 吃饭~~
张三说:老板,来一份蛋炒饭~~
老板说:稍等~~
不一会儿,老板就把蛋炒饭端到了张三的面前~~
在上述情景里面,张三 是主动的一方,并不是被 餐厅 拉进去吃饭,餐厅是被动的一方,
即 张三 就是 客户端,而 餐厅 就是 服务器~~
在计算机里面,客户端和服务器之间 通过网络的形式进行连接~~
客户端:主动的一方 就是客户端~~
服务器:被动的一方 就是服务器~~
一家餐厅,不可能仅仅只有 张三 进去吃饭,还有李四、王五等等~~
所以说,一个服务器 同一时刻,可能要给多个服务器 提供服务~~
张三 想要去吃饭的时间 是随机的,餐厅也不知道哪个人是什么时间来就餐~~
所以,它会从早开到晚才关门,甚至是二十四小时营业~~
所以说,因为服务器不确定客户端啥时候来,服务器往往要长时间运行,甚至是7*24小时运行~~
客户端给服务器发送的数据,称为"请求"(来一份蛋炒饭)~~
服务器给客户端返回的数据,称为"响应"(端上来一份蛋炒饭)~~
换句话说,安装了MySQL,就是 既安装了客户端(黑框框),也安装了服务器~~
客户端与服务器 在同一个主机上~~
MySQL客户端和MySQL服务器,可以在同一个主机上,也可以在不同的主机上~~
实际工作中,更常见的是 客户端和服务器 在不同主机上~~
在当前的学习阶段,就直接安装在一个主机上了~~
虽然是同一个主机,但是仍然是通过网络进行通信的~~
对于MySQL来说,存储和管理数据,都是由 MySQL服务器 来负责的~~
当然,如果把客户端和服务器都部署在一个主机上了,但是电脑没有联网。这个时候客户端依然能访问服务器~~
如果插上网线,连接wifi,网络是通畅的,此时电脑可以通过网络访问其他的主机~~
如果电脑没有插网线,连不上网,那么此时电脑只是访问不了别的主机,但是自己还是能访问自己的~~
一个MySQL服务器上面可以包含多个"数据库",
此处的"数据库"其实是"数据集合",这里面就放了 一些有关联关系的数据~~
可以理解成,一栋楼 里面有好几家餐厅,餐厅之间并不影响~~
餐厅里面的菜品 就类似于 数据库里面存的数据表~~
学号 | 姓名 | 性别 | 学院 | 专业 | 班级 |
001 | 张三 | 男 | 计算机学院 | 软件工程 | 2班 |
002 | 李四 | 男 | 计算机学院 | 物联网 | 1班 |
... | ... | ... | ... | ... | ... |
每一个表里有很多行,每一行称为"一条记录";
每一行里有很多列,每一列表示不同的含义,每一列称为一个"字段"(field)~~
数据库 整体的一个结构:
数据库—>数据表—>行—>列~~
我们进入 MySQL客户端时,需要去看看当前服务器上有哪些数据库~~
这就需要可以 显示当前数据库 的命令行:
show databases;
那么,此时我们就可以看出 MySQL服务器 自带了4个数据库了~~
当然,我们也可以自己创建数据库,这个在下面介绍到~~
对此,我们需要注意的是:
- 对于其自带的数据库,没事千万不要乱碰,容易搞出问题~~
- 数据库中的命令行啥的,一律用的是英文的字母或符号,大小写没有啥关系~~
自己可以自己来创建数据库,创建数据库的命令行就是:
create database 数据库名;
数据库名的命名规则 依旧是和Java中创建变量的命名规则是一样的~~
当然,也可以这样创建数据库:
create database if not exists 数据库名;
意思是:如果这个数据库名不存在,那么就创建一个以该数据库名为名的数据库~~
如果这个数据库名存在,那就不创建了~~
下面我们来创建一个姓名为java的数据库:
这下说明,java数据库已经创建成功,我们可以看看此时存在的数据库:
当然,有的时候也会有创建错误,或者啥啥错误的情况,不要慌,下面也会有错误的提示~~
大部分的错误提示 都是非常清楚的,已经告诉过哪里有问题了~~
比如:
错误提示 在哪句话附近错了提示的明明白白~~
如果我们想要 针对某一个数据库进行具体的操作,如 各种增删改查 数据库,就需要先选中数据库:
use 数据库名;
此时,我们可以来选中 刚刚创建的 java数据库~~
在对某一个数据库 进行操作时,必须得要选中这个数据库~~
类似于 RTS游戏~~
需要先选中某个单位,再释放技能~~
数据库删除非常危险!!!
数据库删除非常危险!!!
数据库删除非常危险!!!
删除数据库的命令行是:
drop database 数据库名;
此时,当前所有的数据库是:
删除java数据库后:
观察此时所剩的数据库,发现java数据库已经被删除:
【注意】
删除数据库操作十分危险~~
删库其实是把库里的数据都删除了~~
千万不要在公司的服务器上删除数据库,尤其是不要在生产环境上进行删除~~
那么,我们所创建的数据库,它的存储位置要怎么去查找到的呢~~
首先,我们需要找到 MySQL数据库的服务器,右键,点击属性:
然后,找出MySQL配置文件的位置,复制其中相关路径:
最后,粘贴相关路径,找到Data文件夹,找到 存储位置:
注意:
当我们点开Data数据库时~~
当我们在MySQL客户端输入 show databases; 时 ~~
会发现 数据库的结果不一样:
好像有一个 information_schema数据库 匹配不上~~
实际上~~
Information_schema数据库 是视图,不是真表,是从别的库毛过来的数据,不需要单独存储~~
注意:
在Data文件夹 目录下,新建一个 名字为java的文件夹,即新建了一个java数据库,
那么 在 MySQL客户端下面输入 show databases; 后,会出现java数据库~~
当然,反过来创建,或者是删除,也都是如此~~
千万不要把自带的数据库删除了~~
这个是 客户端 和 服务器 在一台电脑的情况下,其他的情况不是很清楚~~
MySQL是一个"关系型数据库",典型特点就是 通过表的形式来组织数据~~
即 每一行,其列数都是一样的;每一列,其数据类型都是相同的~~
数据类型一方面 一方面能够使我们对数据进行处理,一方面也能够对数据进行校验和检查~~
数值类型 包含了 整型和浮点型:
数据类型 | 大小 | 说明 | 对应java类型 |
bit [ (M) ] | M指定位数,默认为1 | 二进制数,M范围从1到64,存储数值范围从0到2^M-1 | 常用Boolean对应BIT,此时默认是1位,即只能存0和1 |
tinyint | 1字节 | Byte | |
smallint | 2字节 | Short | |
int | 4字节 | Integer | |
bigint | 8字节 | 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~~
数据类型 | 大小 | 说明 | 对应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编码中一个字符是两个字节~~
数据类型 | 大小 | 说明 | 对应java类型 |
datetime | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换 | java.util.Date、java.sql.Timestamp |
timestamp | 4字节 | 范围从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
创建表的命令行是:
create table 表名(列名 类型,列名 类型......);
注意:
和一般编程语言不一样的地方是,列名写在前,类型写在后;
C++,Java都是把类型写在前,变量名写在后~~
说明:
要想创建表,就需要先有一个数据库,并且选中数据库!!!!!!
创建表的时候,必须要明确表结构,
即 有哪些列,每个列是啥类型,叫啥名字~~
同一个数据库中,不能有两个表 名字相同,否则会出错~~
创建表的时候,表名或列名,不能和SQL的关键字冲突~~
表名是一个关键字,已经有特定含义了,因此不能使用~~
但是,如果非要拿关键字作为表名,也不是不可以~~
可以使用 反引号` 来引起来~~
在选中数据库的前提下,可以使用:
show tables;
来查看当前数据库里面有哪些表~~
查看表结构的命令行是:
desc 表名;
通过这个命令行,可以查看这个表里面的列和类型~~
上述说明:
- Field 列数,表示这张表有 id 和 name 两列~~
- int(11)的意思不是说占11个比特位,int就是固定4个字节,32个比特位;11表示的是打印数字的时候,显示数据的宽度最大是11位数;11只影响在客户端中的显示,不影响数据的存储和计算~~
- varchar(20)表示 约束存储的时候最多存20个字符~~
- NULL表示 这一列是否可以为空(YES,允许为空;NO,不允许为空)~~
- Default指的是 默认值~~
此处的desc是describe的缩写,不过我们平常用的肯定都是 简单形式的desc啦~~
删除表的命令行是:
drop table 表名;
观察 选定的数据库(java数据库)中有哪些表:
删除了其中的student表:
再次观察该数据库还有那些表:
相比之下,student表删除成功~~
注意:
删表的操作十分危险,后果还要严重!!!
删表的操作十分危险,后果还要严重!!!
删表的操作十分危险,后果还要严重!!!
表面上来看,一个库里包含很多表;删库,就会把所有的表都带走~~
但是,如果真的删库了,程序在运行的时候 只要涉及到数据库操作,100%报错~~
就会第一时间发现问题~~
但是,如果是删表(如100个表,删除1个表),程序也不一定是第一时间报错~~
虽然程序可能跑起来,但是最终跑的结果肯定是错的~~
就比如给《王者荣耀》充值,删库的情况 结果就是 所有玩家充值失败,可以第一时间知道;但是 删表的情况 结果就是 充值成功,但是一看点券咋没有涨(或者是可以这样说更具体:大多数可以正常充值,就有小部分充值未涨)这样的话就不会第一时间知道了~~
这就是MySQL数据库基础的全部内容啦~~
下一篇就是MySQL数据库表的增删改查(基础)部分的内容了~~
如果这篇博客给你带来了收获~~
可以留下一颗小小的赞吗~~