从本篇起就又要开始新的篇章了,数据结构初级阶段的就告一段落了,等把后面的JavaEE初级阶段学习完,又会回到数据结构进阶部分。
本章开始就是主打MySQL了。
MySQL是个啥?其实就是个数据库,那么数据库又是个啥?
首先来介绍以下什么是数据库。
数据库介绍
什么是数据库
数据库简单来说就是用来存储文件的,如何存储又要牵扯到很多这里就不展开了,可以参考:
随着时代的发展,大部分数据都是存储在文件当中的,那为什么还要弄个数据库?
对比以下优缺点:
文件保存数据有以下几个缺点:
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于存储海量数据
- 文件在程序中控制不方便
数据库中的数据一般存储在内存和磁盘中。
数据库的分类
数据库大体可以分为 关系型数据库 和 非关系型数据库
- 关系型数据库(RDBMS):是指采用了关系模型来组织数据的数据库。 简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。基于标准的SQL,只是内部一些实现有区别。常用的关系型数据库如:
- Oracle:甲骨文产品,适合大型项目,适用于做复杂的业务逻辑,如ERP、OA等企业信息系统。收费。
- MySQL:属于甲骨文,不适合做复杂的业务。开源免费。
- SQL Server:微软的产品,安装部署在windows server上,适用于中大型项目。收费。
- 非关系型数据库(了解):不规定基于SQL实现。现在更多是指NoSQL数据库,如:
- 基于键值对(Key-Value):如 memcached、redis
- 基于文档型:如 mongodb
- 基于列族:如 hbase
- 基于图型:如 neo4j
关系型数据库与非关系型数据库的 区别:
关系数据库 |
非关系型数据库 | |
使用SQL | 是 | 不强制要求,一般不基于SQL实现 |
事务支持 | 支持 | 不支持 |
复杂操作 | 支持 | 不支持 |
海量读写操作 | 效率低 | 效率高 |
基本结构 | 基于表和列,结构固定 | 灵活性比较高 |
使用场景 | 业务方面的OLTP系统 | 用于数据的缓存、或基于统计分析的OLAP系统 |
关于数据库如何安装等等,我这里就不过多介绍了,我直接抄一篇博客,链接如下:
Windows安装mysql详细步骤(通俗易懂,简单上手)_华夏之威的博客-CSDN博客
https://blog.csdn.net/weixin_43423484/article/details/124408565
而我们主要学习的就是MySQL,因为它开源,免费!!!
接下来开始进入正题,数据库如何操作的。
1. 数据库的操作
MySQL服务器中的数据库可以有很多个,分别存储不同的数据,想要将数据存储到数据库中,首先要创建一个数据库,我们来看看如何创建一个数据库:
创建数据库
首先登陆我们的数据库:
第二步创建一个数据库,语法格式:
create database 【数据库名称】【库选项】
库选项主要就一些字符集,引擎什么的,这里就不多介绍,需要的话可以去查。
java就是数据库名称,字符集设置为utf-8 后面添加数据时,就可以添加汉字了。
显示数据库
既然创建了,我们可以查看我们创建的数据库是否存在MySQL服务器中,语法格式如下:
show databases;
java雀氏已经存在了,里面有的是我自己创建的,也有是系统自带的。
使用数据库
既然创建了,那就来用用看,语法格式如下:
use 数据库名称;
数据中系统提示的很多单词相信大家都认识,我也就不介绍了。
这样我们就进入到了java这个库中了,我们再来看看库中有些啥:
嘿嘿,啥也没有。
删除数据库
这一步操作非常危险啊,除非有需要,不然千万不要进行这一步操作,不然小手一点,分分钟让老板损失上百万;但是我们的数据库啥也没有,我们一次性删爽来。
语法格式如下:
drop database 数据库名称;
再来看看,服务器中是否还存在;
只有10行了,雀氏删除成功了;还是得提醒以下,千万不要手欠删库啊,分分钟丢失工作。
2. 表的操作
我们先前创建了一个数据库名叫java的,库中的内容啥也没有;数据库中存放的就是表了,emoty 指的就是表,所以这一部分就是如何去创建表。
创建表
语法格式:
create table 表名( 字段名 字段类型(属性), 字段名 字段类型(属性),.......)【表选项】
这里面的我们一 一来解释,表选项和前面的一样,也是指字符集,存储引擎,校对集。
字段名就是指表的列名;字段类型就是指数据类型;
属性指的是对字段的某些约束条件等等。
我们拿个图来看看:
从左往右开始,Field 和 Type 翻译 过来就知道是字段和类型的意思;
Null 确定该字段是否为空,Key指的是索引类型;Default 指的是默认值; Extra 表示扩充
其实可以直接翻译以下就懂了。
这里涉及到查看表结构的语法:
desc 表名;desc 对应的单词就是description 【后面还有一个关键字也是desc】
删除表
有创建就有删除,对应的语法如下:
drop table 表名 ;
类似于删库,好吧就是一个语法。
同样删表也是个非常危险的操作,除非有需要不然不要轻易尝试,分分钟离职;蹭现在我们删爽来:
这就ok了,还是提醒以下啊,千万不要手欠删表,不然真的就g了。
一天一个离职小技巧 ~~
介绍了创建表和删除表,但是我们还是没有开始插入数据,在讲插入数据之前我们得对数据类型进行一个了解:
3. 常用数据类型
无论数据类型,都得贴近我们的生活,不会太离谱,本身数据库的目的就是存储数据的,正常而言数据就那么几中类型;和Java、C一样 都是有整型的浮点型的,但是还是略有区别的。
从整型和浮点型开始介绍
整型和浮点型:
数据类型 | 大小 | 说明 | 对应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指定长度,D指定 小数位数。会发生精度丢失 |
Float |
DOUBLE(M, D) |
8字节 | Double | |
DECIMAL(M, D) |
M/D最大 值+2 |
双精度,M指定长度,D表示 小数点位数。精确数值 |
BigDecimal |
NUMERIC(M, D) |
M/D最大 值+2 |
和DECIMAL一样 | BigDecimal |
当然啦,MySQL和c语言类似,数值类型可以指定为无符号(unsigned),表示不取负数。
如果当我们int都存不下去了,就换一个类型,没必要去纠结使用unsigned 和 signed ,signed都存不下去,unsigned 大概率也存不下去。
字符串类型
数据类型 | 大小 | 说明 | 对应java类型 |
VARCHAR (SIZE) | 0-65,535字节 | 可变长度字符串 | String |
TEXT | 0-65,535字节 | 长文本数据 | String |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 | String |
BLOB | 0-65,535字节 | 二进制形式的长文本数据 | byte[] |
这没什么好介绍的,就只需要认识一个 blob 是存储二进制的;要用到时,百度即可。
日期类型
数据类型 | 大 小 |
说明 | 对应java类型 |
DATETIME | 8 字 节 | 范围从1000到9999年,不会进行时区的 检索及转换。 |
java.util.Date、 java.sql.Timestamp |
TIMESTAMP | 4 字 节 | 范围从1970到2038年,自动检索当前时 区并进行转换。 |
java.util.Date、 java.sql.Timestamp |
和字符串一样,不会比较,不会添加,没关系,要用时直接百度。
等会我也来演示以下。
到现在,我们就可以开始进行插入数据了。
插入数据
语法格式:
insert into 表名 value(值1,值2......);【单行插入】
insert into 表名 values(值1,值2......),(值1,值2......);【多行插入】
我们用多行插入的语法去插入一行记录也是可以滴!
示例:
一行插入没问题,我们再来看看多行插入:
既然插入欧克,那么我们再来看看服务器中是否已经存在我们添加的数据:
查询数据
语法格式:
select * from 表名;【这是全列查询】
这种查询,真正工作时,并不推荐,公司里的数据不同于我们自己写的,他们可能动则就上几十万条数据,我们一查带宽直接崩了,所以这条查询语句也非常危险!!
我们来看看结果如何:
的确能够查询出表中的数据!
当然,还有其他很多查询语句,今天就先到这里,其他的留给后面再细说,本章就到此为止,先对MySQL有部分的了解!