【MySQL】基础知识
MySQL(一)基础知识
MySQL
一、结构
1.客户端
2.服务器
分布式系统
二、存储
1.空间
1.1内存
1.1.1速度
1.1.2稳定性
1.1.3大小
1.1.4使用
1.2硬盘
1.2.1速度
1.2.2稳定性
1.2.3大小
1.2.4【Java学习】反射-CSDN博客
2.体系
表-数据库-服务器
3.特点
3.1唯一性
if not exists
3.2轻巧性
三、编码
1.utf8
2.utf8mb4
3.unicode
4.gbk
四、类型
1.数值类型
1.1整数
1.1.1BIN[(M)]
1.1.2TINYINT
1.1.3SMALLINT
1.1.4INT
1.1.5BIGINT
1.2浮点数
1.2.1IEE754标准
1.2.1.1FOLAT(M,D)
1.2.1.2DOUBLE
1.2.2准确标准
1.2.2.1DECIMAL(M,D)
1.2.2.2NUMERIC(M,D)
2.字符串类型
2.1文本数据
2.1.1VARCHAR(SIZE)
2.1.2TEXT
2.1.3MEDIUMTEXT
2.2二进制数据
BLOB
3.日期类型
3.1TIMESTAMP
3.2DATETIME
MySQL
MySQL是一个 客户端-服务器结构的 程序,服务器 是真正的 保存和管理数据的 本体,是用表来组织数据的 关系型数据库
一、结构
1.客户端
客户端 通过网络 进行通信 向服务器 主动传递数据 主动发起请求
2.服务器
服务器 永不停机地 等待着被接收到请求 处理数据 为客户端返回数据 作响应,一个服务器 为多个客户端 提供服务的
分布式系统
机器处理数据时,一台机器 能即刻应对处理着的数据量 是有限的,当要及时处理的数据量过多 一台机器无法应时处理完时,需要由多个机器 同时一起分开着 来处理完,就构成了 多个机器下的 分布式系统,机器之间 也成 服务器与客户端关系地 传递处理返回数据,会发生既作服务器 也作客户端的机器,也会出现 只为一个机器客户端服务的 服务器机器
二、存储
1.空间
存储空间 分为 内存 与 硬盘
1.1内存
1.1.1速度
内存里 操作数据的速度快
1.1.2稳定性
内存里 存储数据的稳定性差,程序重启 或主机断电 存储的数据就丢失了
1.1.3大小
价格昂贵 买到来用的内存小
1.1.4使用
有的数据库 为了追求速度的最大化 选择了 用内存来存储数据,如redis
1.2硬盘
1.2.1速度
硬盘里 操作数据的速度慢
1.2.2稳定性
硬盘里 存储数据的稳定性高,数据持久地保存
1.2.3大小
价格便宜 买到来用的硬盘大
1.2.4使用
绝大多数数据库 需要 稳定持久地 存储大量数据,选择 操作速度慢些的硬盘 来存储
2.体系
表-数据库-服务器
把几个表 放一起集合 就构成了 一个数据库,每个表 都是属于在 它所属的 一个数据库中的,一个服务器 存储管理着 许多数据库
3.特点
3.1唯一性
服务器都是 不重复唯一性地 高效存储数据库,建库检索时 发现此库已存在有的,会立马终止程序 来阻止建库的发生
if not exists
因为到后面建库时 可能出现 此时要去创建使之存在有的库 不确定是否前面已经存在、且一次要创建的库特别多 也不方便一个个往前去查,直接加if not exists 将它们未存在的创建、已存在的不创建 最后都一定执行成功地 将它们创建得都存在有
3.2轻巧性
一般不会在数据库中 存储很大的数据,如二进制数据的 音乐、图片、视频,很大的数据 单单遍历路过 都要花费很长的时间,何况对它 增删查改操作,它的存在 会大大影响到 数据库的增删查改的效率,所以都是将很大的数据 存储在专门的目录中,在数据库中 存储它的路径
三、编码
数据在底层都是 转化成码的形式 来存储的,参照不同的字符集 将数据编成的码 就不一样,码内容 字节量就不一样:
1.utf8
utf8字符集,没有固定编成的 码的规格大小,变长式的编码 将世界上所有的语言文字 都有对应的编码,汉字占3个字节,mysql中默认用的是utf8的残本,没有对 复杂的中文字符与emoji表情 编码的部分,在创建库的时候可以指定字符集为完整的utf8:
create database if not exists test1 charset utf8;
2.utf8mb4
后面mysql对其进行补充完整的 utf8mb4字符集则才是utf8的完全体
3.unicode
unicode是 只对字符进行编码的 字符集,对多个字符合并的字符串 没有字符边界意识 将其调整合并编码,还是将字符串视为一个字符,判断为不存在 而无法编码,而utf8其实是 unicode补充了对字符串合并编码的 升级版
4.gbk
windows使用的的是 gbk字符集,汉字占2个字节
四、类型
1.数值类型
1.1整数
n位的二进制数,有符号下 数值的范围为-2^(n-1) ~ 2^(n-1) - 1,无符号下 数值的范围为0 ~ 2^(n) - 1
1.1.1BIN[(M)]
BIN[(M)] ,用来存放 M位的二进制数,M范围1~64,存储数值范围0~2^(M)-1,M默认为1,存放一个 0或1 用来表示真假,对应Java的Boolean类型
1.1.2TINYINT
TINYINT 1字节的大小,对应Java的Byte类型
1.1.3SMALLINT
SMALLINT 2字节的大小,对应Java的Short类型
1.1.4INT
INT 4字节的大小,对应Java的Integer类型
1.1.5BIGINT
BIGINT 8字节的大小,对应Java的Long类型
1.2浮点数
1.2.1IEE754标准
在IEE754标准下 会丢失精度 存在一定误差,浮点数 去进行大小的比较 是很危险的:0.1 + 0.2 != 0.3
1.2.1.1FOLAT(M,D)
FOLAT(M,D),存放 M个数字位数、D个小数位数的 单精度浮点数,4字节的大小,对应Java的Float类型
1.2.1.2DOUBLE
DOUBLE,8字节的大小,对应Java的Double类型
1.2.2准确标准
1.2.2.1DECIMAL(M,D)
DECIMAL(M,D),存放精确数值的 双精度浮点数,精度提高,但运算的速度减慢,占的空间变大,对应Java的BigDecimal类型
1.2.2.2NUMERIC(M,D)
NUMERIC(M,D)是 和DECIMAL一样的类型
2.字符串类型
2.1文本数据
文本数据 存储的是 码表上存在的 字符数据,一个汉字是一个字符,但是可能对应多个字节的大小
2.1.1VARCHAR(SIZE)
VARCHAR(SIZE) 动态按需 最大开辟SIZE个字符的空间 去存储,是可变长度的字符串,最大可存储0~65535字节的空间,对应Java的String类型
2.1.2TEXT
TEXT 存储0~65535字节空间的 长文本数据,对应Java的String类型
2.1.3MEDIUMTEXT
MEDIUMTEXT 存储0~16777215字节空间的 长文本数据,对应Java的String类型
2.2二进制数据
对于码表上 查找不到不存在的数据 就是二进制数据
BLOB
BLOB 存储0~65535字节空间的 二进制数据,对于Java的byte[]类型
3.日期类型
日期类型 用来存储 1970年1月1日0时0分0秒基准时刻 到当前时刻的 秒数/毫秒数/微妙数之差的时间戳
3.1TIMESTAMP
TIMESTAMP的大小为4个字节,现在用来存储秒级时间戳 都快不够了,可以存储1970~2038年的时间戳,对应Java的Java.util.Date、Java.sql.Timestamp类型
3.2DATETIME
DATETIME的大小为8个字节,可以存储1000~9999年的时间戳,对应Java的Java.util.Date、Java.sql.Timestamp类型