Java基础26-数据库-mysql概述

Java基础26-数据库-mysql

数据库基础

1、为什么要使用数据库?
(1)持久化(永久保存):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。
持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。
在这里插入图片描述
补充:不管数据是存在集合,数组还是变量中,都是存储在内存中。内存中的数据当系统结束后会被清空掉,不能永久保存的,用户的数据在内存中被清空是很可怕的,为了避免这种现象,可以使用数据库
(2)方便管理数据(例如快速的检索等):若是存在普通文件中,对文件的读取,再筛选,非常麻烦

2、数据库:Database,简称DB
通俗的讲,就是数据的仓库,专门存储数据的
它保存了一系列有组织的数据的文件系统或数据结构。

补充:为什么它保存了一系列有组织的数据的文件系统或数据结构。:因为数据分成两种,一种是存在硬盘中的数据库(数据的文件系统),还有一种是内存数据库,内存中数据不能永久保存,但是有的数据可能不需要永久保存,比如说某些临时的产生结果,但这个产生结果可能被很多人去访问,若是每次在硬盘中去读取这个数据太慢了,把数据放在内存中,如果有问题可以清空内存再重新将数据读入到内存,目的就是为了检索快,因为内存中的数据运行速度特别快

3、数据库管理软件,数据库管理系统,DBMS
Database Management System
mysql,oracle,sql server,db2,redis…
数据库管理软件:操纵和管理数据库的大型软件

4、SQL:结构化查询语言 Structured Query Language
专门操作数据库的语言,可以快速地查询和检索数据
不管是masql、db2还是oracle等,sql语言都是通用的,可能不同的数据库sql语言有些差异(比如关键字不同等),但差异不大
在这里插入图片描述

5、mysql
关系型数据库:二维表(行和列的表,比如excel)
体积小,成本低,速度快,开源等优点(开源就意味着可以查看内部的源代码的实现,甚至可以定制自己的具体的业务逻辑。

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。

在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.

目前 MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网 站总体拥有成本而选择了MySQL作为网站数据库。

补充:当数据量特别大(比如达到数亿级别),又要保证能处理这么大的数据量,又要保证查询速度,建议:当数据量特别大时,靠一个数据库完成不了所有的需求,要快要稳定还要数据之间的各种分析,建议三种数据库加起来,第一:mysql,mysql比较稳定能够存储大量的数据,第二:Elasticsearch,属于快速查询,快速查询就是把高频查询的数据挪到Elasticsearch里面,还有就是redis,建议三者合起来一起用会较好。各有各的优缺点:mysql比较稳定,但是检索性能比较差,几百万条数据可能没问题,数亿级别的数据时检索速度比较差,这时采用Elasticsearch和redis会比较好,Elasticsearch和redis检索速度非常快,但是不能存储大量的数据,只能将高频次的数据存进去

数据库除了二维表之外,还有对象型数据库,比如redis,检索速度很快,但不适合太多的存储,而且key-value不能适用于复杂的结构,一个key对应一个value,一对一关系,但是有时候不止一对一关系,有时会一对多这些,甚至可能还会交叉、有外键等各种复杂数据时,key-value储存不了,不适合复杂的存储,但是速度快

mysql的数据库管理软件是C/S结构,底层是TCP/IP协议的程序:
S:服务器端
C:客户端端

服务器端,先启动,有一个端口号( 3306),监听/等待客户端的连接。

简单的几个sql演示:

面试:

#注释
#1、查看当前mysql数据库管理软件中都有什么数据库
show databases;
在这里插入图片描述

#使用一个数据库
use test;

#如果test不存在,可以创建一个新的数据库
create database test;

#查看当前数据库中都有什么表格
show tables;

#查看某个表的数据
select * from 表名称;
select * from t_employee;

#查询所有人的薪资
select salary from t_employee;
select salary+1000 from t_employee;

#修改所有人的薪资,涨1000元
update t_employee set salary = salary + 1000;

#查询薪资加完1000元后,超过20000
select * from t_employee where salary+1000 > 20000;

命令行客户端出现乱码的解决方式:
在这里插入图片描述

设置当前命令行客户端的字符编码:
(1)方式一:修改客户端的字符编码为UTF-8,比较麻烦
(2)方式二:告知mysql数据库管理软件,我这个客户端就是GBK的
set names gbk;

mysql的数据类型

一、mysql的数据类型
1、整数系列
TINYINT:非常小的整数,类似于Java的byte类型
SMALLINT:小整数,类似于Java的short类型
MEDIUMINT:中整数,Java没有对应
INT、INTEGER:整数,类似于Java的int类型
BIGINT:大整数,类似于Java的long类型

使用int数据类型:
(1)int,等价于int(11),默认参数,宽度最宽11
(2)int(M):M表示宽度,需要结合另外的两个参数使用
unsigned:表示无符号,即没有负数
zerofill:表示用0填充
例如:int(5) unsigned zerofill,表示每一个整数有5位数字,如果不足5位的在左边用0凑够5位
如果只是单独int(5),那是不会起作用。
无论:int的宽度指定为多少,在内存中都是占4个字节,如果你的数字超过了int(5)也可以存储

2、浮点小数
float:4个字节
double:8个字节

使用float和double时:
(1)float或double
(2)float(M,D),double(M,D):M表示总位数,D表示精度,即小数点几位
例如:double(5,2)表示的数据范围[-999.99,999.99],如果超过这个范围会报错。

3、定点小数,类似于Java的BigDecimal,底层使用字符串存储
DECIMAL
DECIMAL(M,D)

4、日期时间类型
date:只能表示日期
time:表示时间
datetime:表示日期和时间
year:表示年
timestamp:时间戳,表示日期和时间

datetime和timestamp:
(1)timestamp实际存储的毫秒值,显示时,显示根据毫秒值算出来一个本地化的日期时间
datetime就是存储日期时间
(2)timestamp因为存储的毫秒值,所以在比较和计算时,效率比较高。
(3)datetime和timestamp可以表示的时间范围是不同的
在这里插入图片描述

5、字符串
强调:mysql没有单字符类型,只有字符串类型

char:定长字符串,长度[1,255]
char,char(1),长度为1个字符
char(10),长度为10个字符
varchar:变长字符串
varchar(M):必须指定M,这个M的意思是最长不超过M个字符
例如:varchar(20),最长不超过20个字符

text:长文本
一般用于存储,文字比较多的,简介等,又不经常检索的信息

char和varchar
(1)内存占用空间不同
char(M):M字符就占M个字符的空间
例如:char(2) 实际存储的是’男’,但是也是占2个字符的位置,那一个空的字符存储的是\u0000
varchar:实际几个字符 + 1/2个字节的空间
例如:varchar(20) 实际存储的是’张三’,占的2个字符 + 1/2个字节(用来记录实际的字符个数的)
(2)
varchar节省空间,但是每次存和取,都要数字符个数,效率低
char:看起来浪费空间,但是每次存和取,都按照固定的长度去处理的

建议:像身份证号,学号,邮编等定长的字符串使用char,例如:地址等使用变长的
现在mysql的版本对varchar优化的越来越快了。

6、位类型(了解)
二进制的位类型,BIT(M)类型允许存储M位值。M范围为1~64,默认为1

7、blob系列类型(了解)
BINARY和VARBINARY类型类似于CHAR和VARCHAR类型,但是不同的是,它们存储的不是字符字符串,而是二进制串。所以它们没有字符集

8、枚举(ENUM)
多个中选择一个
9、集合
多个中可以选择多个

导入执行备份的sql脚本

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200922191304152.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JlblZpY3Rvcnk=,size_16,color_FFFFF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值