MYSQL作为一个数据库管理系统,用来对数据库进行操作。
MYSQL其实际通过所使用的SQL语言来对关系型数据库进行操作和维护数据。
而说到数据库,数据库是什么?下来先来了解一下。
目录
一、数据库
1、什么数据库
2、数据库的分类
二、MySQL的基本介绍
1、MySQL的安装、配置字符集以及注意事项
2、MySQL的结构
3、MySQL的服务器是如何组织数据的?
4、数据存储
三、MySQL数据库的基本操作
1、创建数据库
2、使用数据库
3、查看所有库
4、删除库
四、MySQL中常用的数据类型
1、数值类型
2、字符串类型
3、日期类型
五、MySQL中表的操作
1、创建表
2、查看表的结构
3、删除表
一、数据库
1、什么数据库 数据库,字面意思上看是存储数据的库。但真是这样吗?
对于“数据”这个词,我们应该并不陌生。在我们的生活中几乎处处充满了数据,也可以说我们现在所处的世界是由大量的数据所构成的。例如,我们身体的各项健康信息,当地区域人口数量,社会薪资平均水平数据等等。
而数据往往都很多,那么就需要将这些重要的数据进行保存,但是存储数据用文件就好了,
为什么还需要搞一个数据库来管理这些数据呢?因此,为了更好地管理和操作数据,便诞生了“数据库”这一管理数据的软件,通过它能更加有效地管理(增删查改)数据。
这是因为仅仅用文件来保存数据没法满足对数据的(1)安全性(数据的安全没有保障)、(2)便利性(查询、操作、管理数据)、(3)容量性(数据过于庞大)、(4)操作性(在程序中控制不方便)
数据库作为一类“具体的软件”,专门负责管理数据(增删查改),其存储介质:磁盘和内存.
2、数据库的分类 数据库可以分为关系型数据库和非关系型数据库两类。
关系型数据库是什么?
是指采用了关系模型来组织数据的数据库。其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。 简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。【其典型特征,就是用“数据表”的格式来组织数据】
基于SQL的实现,常见的关系型数据库有:
虽然
- Oracle:甲骨文产品,适合大型项目,适用于做复杂的业务逻辑,如ERP、OA等企业信息系统,要收费。
- SQL Server():Microsoft的产品,安装部署在windows server上,适用于中大型项目,要收费。
- SQLite:这个数据库可以说是世界上“装机量最大”的数据库,通常在安卓上就自带了该内置数据库。主打轻量型的一款数据库。
- MySQL:属于甲骨文,不适合做复杂的业务,但其体积小、速度快。开源免费。
非关系型数据库是什么?关系型数据库和非关系型数据库之间的区别:
非关系数据库目前一般是NoSQL的泛指,区别于关系型数据库,该数据库不规定基于SQL实现,NoSQL字面意思 “Not Only SQL”。
常见的非关系型数据库有:
- 基于键值对(Key-Value)存储数据库:Redis
- 文档型数据库:MongoDB
- 列存储数据库:HBase
- 图形数据库:Neo4J
关系型数据库 | 非关系型数据库 | |
是否使用SQL | 是 | 一般不基于SQL实现 |
是否支持事务 | 支持 | 不支持 |
是否支持复杂操作 | 支持 | 不支持 |
海量读写操作效率 | 效率低 | 效率高 |
基本结构 | 基于表和列,结构固定 | 灵活性比较高 |
总之,无论是什么数据库都是依赖SQL(编程语言)的,最核心的是SQL,只要掌握SQL,无论是什么数据库都可以快速上手。二、MySQL的基本介绍 1、MySQL的安装、配置字符集以及注意事项 本文章对于MySQL的安装不做过多介绍,MySQL可以自行在官网下载。
该注意的是,安装完MySQL后,我们可以在开始菜单看到MySQL的选项
文章图片
打开其中前两个中的任意一个都可以进入MySQL的的客户端。
【注意事项】:
文章图片
我们可以通过安装数据库过程中配置的用户密码,来登录我们的MySQL
下面就是登录成功后的界面
文章图片
当然我们也可以直接通过操作系统的命令行窗口来登录MySQL。
要开启root用户的远程登录,在MySQL服务器本机中执行输入 mysql -u root -p+密码【要注意之间的空格】p的后面直接输入密码,如果没有密码直接回车即可
【MySQL默认只允许在服务器本机,使用root用户登录】
文章图片
之后我们就可以通过输入命令来对数据库进行操作了。
MySQL一开始默认的字符集并不是UTF-8(可变长度字符编码),MySQL默认的字符集是拉丁文,并不支持中文,如果在还没配置好支持中文的字符集,插入中文数据就会报错,要想让MySQL支持中文数据插入,就需要我们手动来配置字符集为UTF-8.
为什么插入中文数据要用到UTF-8编码?
这是因为,计算机只能识别二进制数字,我们在计算机中看到的字母、数字、汉字、符号等等,都是通过某种方式进行二进制之间的转换来呈现出来。
ASCII码表:美国信息标准交换码(这是最初的一个表,其中的字母用各种各样的数字进行代替),本质上是通过数字来表示字符。 例如97表示小写a99表示小写。ASCII码表内只有128个字符,占用一个字节。
但由于ASCII只支持符号、字母,英文符号一共也才几十个,比较好表示。可其他国家的符号和文字就不好支持,所以其它国家就开始有了属于自己的编码标准。比如:大陆的GB2312、包含了全部中日韩汉字的GBK(使用了2个字节编码)。同时GBK也是Windows简体中文版默认的字符编码【GB2312是GBK的子集】。
【mysql|MySQL基础(一)---基础认知及操作】中国文化博大精深,常用汉字加上一些生僻字数量就很惊人,单纯以一个字节的字符是无法表示数量过多的汉字,一个字节不够,多拿几个字节来表示不就可以了吗。因此诞生出的GBK字符集其中就是由2个字节来表示一个汉字、其中的英文字母、一个数字、一个符号各占一个字节。
随着后来时代的不断发展,2个字节已经不满足世界上的一些文字,那么就只能增加字节来表示,于是将2个字节扩展为4个字节(由于计算机使用二进制的原因,3个字节在读写的时候很没效率,所以都是用2的倍数来扩展)。
为了更有效率传输文本内容,于是出现了UTF-8这一可变长编码,针对不同的字符,可以用1~4字节存储,其作为当下最主流使用的字符编码,也被视为”世界通用的字符编码“,一般用3个字节表示一个汉字。【UTF-8变长编码,一个文字要几个字节表示是不确定的、字节是可变的】
【总结】:
UTF-8 的优点:(1)兼容ASCII、(2)可变长性,节约空间、(3)扩展性好,以后字符再多也可以表示。
- UTF-8 一般是一个汉字3个字节来表示
缺点:(1)汉字需要3个字节表示,不如GBK只用2个字节表示汉字
- GBK 用2个字节表示汉字。
- 字符集 本质上是用数字来表示各种语言文字的符号,内部的大表格映射关系(类似ASCII码表内128个字符构成的表)就称为 ”字符集“。
2、MySQL的结构 MySQL是一个”客户端-服务器“结构的程序。
怎么理解客户端、服务器呢?
可以简单的想象成我们生活去餐馆吃饭。我们作为顾客(客户)去点餐,餐馆老板作为服务我们的一方为我们提供服务。在这个情景中,我们是主动去餐馆的,不是老板强行让我们进去的,因此我们是主动的一方,老板是被动的一方。此时的顾客是客户端,老板是服务器。
(1)客户端和服务器是通过网络的方式进行联系。
(2)一个服务器同一时刻对多个客户端提供服务,就像餐馆只有一个老板,但是去吃饭的顾客不止有一个。
(3)服务器往往要运行很长的时间,因为服务器不确定客户端什么时候来。如餐馆中,作为老板往往不知道什么时候有顾客来光顾,甚至像KFC、M记之类的都是营业24个小时。
(4)客户端给服务器发生的数据,称为”请求“;
服务器给客户端返回的数据,称为”响应“。 如餐馆中,我们点的食物即为一个发生请求的过程,而餐馆老板为我们提供的食物,即为响应。
- 客户端:主动的一方是客户端
- 服务器:被动的一方是服务器
MySQL的命令行窗口即为MySQL客户端(默认自带的命令客户端):
文章图片
而MySQl的服务器是:
文章图片
实际我们在使用MySQL的时候,是客户端和用户端在进行交互。
而客户端要通过网络来和服务器进行通信。
当前我们MySQL中的服务器和客户端都是在同一主机,当然MySQL客户端和MySQL服务器也可以在不同的主机上进行通信。【注意】:即使是在同一主机上,客户端和服务器之间也是通过网络来进行通信。
在MySQL中存储和管理数据不是在客户端中进行的,而是由服务器负责的。因此服务器要比客户端 还要复杂,甚至可以认为MySQL服务器是MySQL的本体,很多时候,也可以把MySQL代指为MySQL服务器
3、MySQL的服务器是如何组织数据的?MySQL服务器中可以包含多个数据库,此处的数据库其实是由数据组成的” 数据集合 “,每一个数据库里存放相对应的具有关联关系的数据。
文章图片
【注意】:一个数据库里有多个 ” 数据表 “,而这些表里又存储着单独的数据。
一个表内有许多列和行,每一列表示不同的含义,每一列也称为一个”字段“(filed)、每一行又称为一条”记录"。
ID | 姓名 | 年龄 | 成绩 |
1 | 小明 | 18 | 87 |
2 | 小红 | 19 | 93 |
3 | 小东 | 18 | 77 |
4、数据存储 MySQL服务器是把数据存储在硬盘上。
【注意】:硬盘属于外存,不要和内存搞混。
一台计算机基本是由CPU、存储器、输入设备、输出设备这几部分组成,这四个都属于硬件设备。内存和外存(硬盘)的区别:
存储器,顾名思义使用用于存储数据的硬件设备,其中又可分为外存和内存;
外存:也叫做外部存储器,是指除计算机内存及CPU缓存意外的储存器,此类储存器一般能保存数据,常见的外存有硬盘、软盘、U盘、光盘等。
内存:内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。
有时候有的人会把电脑的内存和手机的内存搞混,电脑的内存指的就是内存,而手机的内存是指”硬盘“,手机方面是把内存称为 ” 运存 “
- 内存的存储空间相对于硬盘来说比较小;
- CPU读取内存的速度很快,读取硬盘的速度很慢,读取内存的速度比读取硬盘的速度快3到4个数量级。【而在CPU上的一个组件---寄存器,其功能和内存差不多,也能存储数据,但其并不是一个单独的设备,相较于CPU来说,其读取速度还要比CPU读取内存快3到4个数量级,而且比读取硬盘(外存)还要快6到8个数量级】;
- 外存在存储数据方面具有持久性,即使断电,数据也依旧保存在硬盘中;但内存上的数据,断电就会消失。
作为MySQl数据库,我们需要通过SQL语句来对数据库进行操作,而作为数据库,上面已经了解到,数据库是一个由关联关系数据的集合组成的。
而我们围绕数据库操作的第一步得先创建出一个数据库出来。
1、创建数据库
create database +数据库名;该语句中的create和database都是SQL语句中的关键词。 关键词可以是大写,也可以是小写,最主要还是要注意英文分号,每个语句后面都建议带分号,虽然有一些语句可以不用带发号,但最好还是都加上,以防万一。
文章图片
此处就创建了一个数据库,后面的 1 row affected 表示有一行数据受影响,0.00sec表示执行时间
创建数据库语句也可以是:
create database if not exists +数据库名;此处相较于上面的创建语句,多加了 if not exists部分,表示如果没有对应的数据库名存在就创建一个对应数据库名的数据库出来,如果存在就会不会创建,且会出现一个警告.
前面我们创建了一个学生系统,如果再执行创建该数据库名的数据库,在受影响行处会多出一个警告
文章图片
通过show warnings; 我们可以查看警告信息.
文章图片
2、使用数据库
use +数据库名;3、查看所有库
show databases;4、删除库
drop + database + 数据库名;【注意】: 删除库是一个很危险的操作,删除库之后里面的表和数据都会一并删除掉。
四、MySQL中常用的数据类型 再介绍数据表相关的操作之前,得先了解一下MySQL的数据类型。对于后面创建的表还是插入的数据之类的操作都会涉及到数据类型,这和我们之前学的编程语言类似。数据都是有自己对应的类型。
MySQL数据库作为一个“关系型数据库”,其特点就是通过表的形式来组织数据。表中的每一行列数都是一样的,每一列的数据类型都是一样。1、数值类型
数据类型 | 大小 | 说明 | 对应的Java类型 |
INT | 4个字节 | 整型 | Integer |
TINYINT | 1个字节 | Byte | |
SMALLINT | 2个字节 | 短整型 | Short |
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 | 同DECIMAL一样 | BigDecimal |
BIT[(M)] | M指定位数,默认为1 | 二进制数,M范围从1到64,存储数值范围从0到2^M -1(M表示有几个比特位) |
常用Boolean对应BIT,默认1位,只能存1和0 |
D表示小数点后的位数不能超过D位。
DECIMAL 相比于 FLOAT和DOUBLE更能精确地表示数值,对于浮点数地存储IEEE754标准,规定了浮点数是如何保存的,在IEEE754标准中,很多浮点数是无法精确表示的,如0.3。数值类型可以指定为无符号(unsigned),表示不取负数,但是一般不建议使用unsigned,对于int类型中可能存放不下的过大数据,即使改为无符号整型int unsigned也可能存不下,还不如直接改为8个字节的bigint类型。
而DECIMAL之所以更能准确地表示浮点数,是因为它是通过字符串来表示的,但是相对应的牺牲了空间和时间的效率,计算的时候消耗的时间更多,存储的空间更多。
2、字符串类型
数据类型 | 大小 | 说明 | Java中的类型 |
varchar[size] | 0~65535个字节 | 可变长的字符串 | String |
text | 0~65535个字节 | 长文本数据 | String |
mediumtext | 0~16777215个字节 | 中等长度文本数据 | String |
blob | 0~65535个字节 | 二进制形式的长文本数据 | byte[] |
【注意】:
varchar中的size对应的是该字符串的最大字符数量,例如varchar[20],此处字段最多有20个字符,也可能更短,动态的根据存入的数据来自适应空间。(字符不是字节,字符为多少个字节是具体根据字符编码决定的,Java中默认使用的是unicode编码,其中的一个字符就 为2个字节,那么实际20个字符就值对应40个字节).
- 一个字节表示的整数范围:-127->128无符号: 0~255
- 两个字节表示的整数范围:-32768->32767无符号 :0~65535
- 四个字节表示的整数范围:-21亿->21亿无符号0~42亿9千万
数据类型 | 大小 | 说明 | 在Java中的类型 |
datetime | 8个字节 | 可以完整地表示日期,范围从1000到9999年,不会进行时区并进行转换 | java.util.Date java.sql.Timestamp |
timestamp(时间戳) | 4个字节 | 范围从1970到2038年,自动检索当前时区来进行转换 | java.util.Date java.sql.Timestamp |
时间戳:是计算机中用来表示时间的一种方式,以1970年1月1日0时0分0秒作为基准时刻,计算当前时刻和基准时刻的秒速之差。五、MySQL中表的操作 在对表进行操作时,需要先使用数据库use + 对应的数据库名;
文章图片
像我们看到的这种时间,是格式化时间,本质上都是通过时间戳换算过来的,方便人观察,计算机还是以时间戳来表示,这种表示存储好存,计算也方便。
在这种两种表示时间的数据类型中,比较推荐使用datetime,因为其为8个字节能表示的时间戳相比timestamp4个字节的更多
1、创建表
create + table + 表名 + (字段1+ 数据类型, 字段2+ 数据类型,.... 可以设置多个);
create table student (
id int,
name varchar(20),
score decimal(3,1)
);
此处就创建了具有三个字段的学生表 。
文章图片
2、查看表的结构
desc + 表名;
文章图片
该表中的列一一对应为:3、删除表
- Field: 字段名字
- Type: 字段类型
- Null: 是否允许为空
- Key: 索引类型
- Default: 默认值
- Extra: 扩充值
drop + table +表名;
该章到这里就介绍结束了,如果以上有哪些地方介绍有误,还希望读者能指出错误,我讲过及时纠正,愿我们共同进步?。
推荐阅读
- 大数据|万字长文| 在 Kubernetes 上设计和测试高可用的 Kafka 集群
- java|货拉拉 Android H5离线包原理与实践
- 数据库|MySQL 45讲 | 06 全局锁和表锁 (给表加个字段怎么有这么多阻碍())
- 数据库|全面、详细的SQL学习指南(MySQL方向)
- 数据库|关系型数据库之MySQL8——由内而外的深化全面学习
- 面试总结|[ 渗透测试面试篇 ] 大厂面试经验分享
- php|pikachu之xss靶场详细通关教程
- #|【SpringBoot】微服务中异步调用数据提交数据库的问题
- 数据库|实时计算,连接时序数据库和核心业务