MYSQL基础(一)——数据类型的详细解析. 数据库基本操作
Posted 努力学习的少年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL基础(一)——数据类型的详细解析. 数据库基本操作相关的知识,希望对你有一定的参考价值。
- 💂 个人主页:努力学习的少年
- 🤟 版权: 本文由【努力学习的少年】原创、在CSDN首发、需要转载请联系博主
- 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
目录
一. 为什么要使用mysql数据库?
Mysql是一款免费开源,小型,关系型数据库管理系统,它也是世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛,对简单的SQL处理效果好。
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux,Windows、Mac 和Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
二. 数据库的基本概念
- 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
- 保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
数据库服务器、数据库和表的关系如下:
数据库服务器的底层是TCP协议,因此可以有多个客户端连接我们的数据库服务器进行操作。
如果我们自己想使用使用数据库,首先需要先安装数据库,安装数据库服务器后,然后先启动数据库服务器,然后在调用mysql客户端去连接我们的服务器,接下来就可以使用数据库了。
启动数据库服务器
systemctl start mysqld.service;
客户端连接数据库
mysql -u数据库用户名 -p
接下输入密码就可以登录到服务器上,然后进行各种操作。
数据库和数据库对象
数据库是存储数据库对象的容器。在MySQL软件中,数据库可以分为系统数据库和用户数据库两大类。
1. 系统数据库
系统数据库是指安装完MYSQL服务器后,会附带的一些数据库,如图,系统数据库会记录一些必要的信息,用户不能直接修改这些数据库。
- information_schema:主要存储系统中一些数据库对象信息,用户信息表信息,列信息,权限信息,字符集信息和分区信息等。
- performance_schema:主要存储数据库服务器性能参数。
- mysql:主要存储系统的用户权限信息。
2. 用户数据库
用户数据库是用户根据实际需求创建的数据库。下面的sjp就是用户数据库,数据库是存储数据库对象的容器,那么什么是数据库对象?数据库对象指的是存储,管理和使用不同结构形式,可以是:表,视图,存储过程,函数等。通俗的讲,数据库就是目录,数据库对象就是不同类型的文件,目录可以包含多个文件,数据库下可以包含多个数据库对象,文件存储数据,数据库也是进行存储数据。
如下:sjp就是用户数据库。
三. 数据库的基本操作
数据库的操作包括创建数据库,查看数据库,选择数据库以及删除数据库。
1. 创建数据库
创建数据库实际在数据库服务器中划分一块空间,用来存储相应的数据库对象。
create database 数据库名;
注意:数据库中大部分指令都必须带 “ ;” 结尾.
实例:创建名字为sjp2的数据库。.
2. 显示数据库
show databases;
实例; 查看MySQL软件中所有的数据库
3. 选择数据库
数据库是数据库对象容器,在数据库管理系统中会存在大量的数据库,在操作数据库对象之前,就先需要确定是哪一个数据库。举个例子,数据库就好比我们的目录,数据库对象就好比文件,在操作文件之前,我们需要先进入哪一个目录。选择数据库就好比进入目录。
语法形式:
use 数据库名
实例:选择sjp数据库。
4. 删除数据库
drop database 数据库名;
实例: 删除sjp2数据库
5.数据库备份
在进行删库操作的之前,建议对数据库进行备份,防止误删除导致不可逆的操作。那么怎么进行数据库备份了。
首先需要指定在linux目录下,然后输入如下指令:
mysqldump -P3306 -数据库用户-p -B数据库名 >数据库备份存储文件;
数据库还原
连接数据库,进入数据库客户端,输入如下指令。
source 备份的数据库路径
实例:
备份sjp数据库
3306是数据库的端口号,root是数据库用户,sjp是数据库的名称,sjp.mysql是备份的数据库文件,将数据库文件备份到当前目录下,sjp.mysql文件存储是对之前对sjp数据库进行的操作的所有指令。
只备份sjp数据库中的person表
恢复数据库
将sjp数据库给删除
恢复sjp数据库:
/home/sjp/2022/sjp.mysql是数据库的备份文件。
6. 认识存储引擎
存储引擎是MySQL的一个重要特征,在具体开发,可根据实际需要来选择存储引擎。因为存储引擎指定了表的类型,即如何存储和索引数据,是否支持事务等。
show engines; (查看MySQL数据库管理系统中所查看支持的存储引擎。)
- Engine:值是存储引擎名称。
- Support:值是DEFAULT数据库管理系统默认的支持的存储引擎,YES表示支持,NO表示不支持。
- comment:值是存储引擎的描述;
- Transaction:值表示存储引擎是否支持事务,YES表示支持,NO表示不支持。
- XA:表示参数所支持的分布式是否符号XA规范,YES表示支持,NO表示不支持。
- Savepoints:表示存储引擎是否支持事务处理中的保存点,其中值YES表示支持,而NO表示不支持。
show variables like '%storage_engine%';查看默认的存储引擎
默认的存储引擎是InnoDB;
主要三种存储引擎的对比:
- MyISAM存储引擎:该存储引擎不支持事务,也不支持外键,访问所读比较快。因此对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。
- InnoDB存储引擎:该存储引擎在事务上具有优势,即支持具有提交,回滚,和崩溃恢复能力的事务安装,所以比MyISAM存储引擎占有更多的磁盘空间。因此需要进行频繁的更新和删除操作,还对事务的完整性要求比较高,需要实现并发控制,此时适合使用该存储引擎。
- MEMORY存储引擎:该存储引擎使用内存来存储实际,因此该存储引擎的数据访问快,但是安全上没有保证,如果应用中涉及数据比较小,需要快速访问,则适合使用该存储引擎。
四. 存储字符集和校验规则
存储字符指定了数据库下的表中能够存储的语言,校验规则是数据库在查找的时候是以什么样方式去查找数据。当创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,默认校验规:utf8_general_ci。
查看数据库中能够存储的字符集:
show charset;
- UTF-8:8进制UTF编码,支持所有语言
- GBK是国际编码既包含简体中文也包含繁体中文;
校验规则对数据库的影响
- 校验规则使⽤utf8_ general_ ci进行查找不区分⼤⼩写
- 校验规则使⽤utf8_ bin进行查找是 区分⼤⼩写
创建一个使用utf字符集,并对规则的test数据库。
create database db3 charset=utf8 collate utf8_general_ci;
五. 数据类型
在MySQL数据库管理系统,存储引擎决定了表的类型,决定了表的存储方式。而数据类型决定了表存储数据的类型。
1. 整数类型
数据类型 | 大小 | 无符号整数范围 | 有符号整数范围 |
TINYINT | 1 | 0~255 | -128~127 |
SMALLINT | 2 | 0~65535 | -32768~32768 |
MEDIUMINT | 3 | 0~16777215 | -8388608~8388608 |
INT | 4 | 0~4294967295 | -2147483648~ 2147483648 |
BIGINT | 8 | 0~18446744073709551615 | -9223372036854775808~9223372036854775808 |
mysql数据库存储的数据有很严格的要求,一个数据类型是有符号的TINYINT,如果你插入一个356的整数,那么就会插入失败,因为有符号的TINYINT的整数范围是-128~127,超过这个范围都会报错。
2. 字符串类型
CHAR系列的字符串类型 | 描述 |
CHAR(M) | M为0~255之间的整数 |
VACHAR(M) | M为0~6535之间的整数 |
- 其中M代表的是字符串能够存储的数据个数,数据个数可以是汉字,或者字符,注意M不是字节个数。
实例:test2表中的str的类型是char(3),str2的类型是varchar(3),因此str1和str2最多能够存储3个数据。可以是“汉字”。
关于varchar(len)和char(len),len到底是多大,这个len值,和表的编码密切相关:
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。
- 当我们的数据库的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字
- 节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。
插入"abcd",超过3的数据个数,因此不能插入进表中。
varchar和char的区别:
- varchar是动态字符串,它的第一个字节记录存储的数据个数,varchar它是在不超过自定义范围内,用多少,开辟多少空间,例如varchar(5),如果存储的是"abc",那么存储的字节个数是3*3+1=10个字节(以utf8为例)。
- char是定长字符串,指定多少个数据,就开辟多少空间,例如char(5),那么无论存储1个,两个数据,最终字符串存储的的字节个数都是5*3=15个字节(以utf8为例)。
3. 日期和数类型类型
日期和数据类型 | 字节 | 最小值 | 最大值 |
DATE | 4 | 1000-01-01 | 9999-12-31 |
DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 4 | 19700101080001 | 2038年的某个时刻 |
TIME | 3 | -835:59:59 | 838:59:59 |
YEAR | 1 | 1901 | 2155 |
如果是DATE,DATETIME,TIME,YEAR数据需要手动填充,如果不填充,则会显示为空。
- 实例:如果我们表中没有插入date类型的数据,则相对位置会被设置为NULL。
- 实例:在表中 插入date类型的数据,now()可以返回一个我们当前的日期或者时间。
当我们想要插入time,date,year类型的数据,可以利用now()函数来返回当前时间。
如果数据是datetime类型时,那么当你在插入数据或修改数据行数据的时候,会自动记录你插入或者修改的时间。
- 实例:往test表中插入hello sjp数据,在查看表,我们会发现date_time会记录到我插入数据的具体时间。
4. 浮点类型,定数类型和为类型
浮点数类型
浮点数类型 | 字节 | 最小值 | 最大值 |
FLOAT | 4 | +1.75494351E-38 -1.75494351E-38(有符号) | +3.403823466E+38 -3.403823466E+38 |
DOUBLE | 8 | +2.2250738585072014E-308 -2.2250738585072014E-308 | +1.7976931348623157E+308 -1.7976931348623157E+308 |
FLOAT的大小较小,而DOUBLE的精度更精确一些,具体使用的时候可以精度来判断。
定点数类型
定点数 | 字节 | 最小值 | 最大值 |
DEC(M,D)和DECMAL(M,D) | M+2 | 与double相同 | 与double相同 |
其中M是数据的有效位数,D是小数点的位数。
如果插入的数据中的小数的位数大于D,那么就会将超出D的小数进行截断,发生四舍五入的现象。
如果插入数据的有效位数超过M,则会报错。
FLOAT和DOUBLE数据类型存储数据时是近视值,而DECIMAL存储的是字符串,所以DEXIMAL有更高的精度,在需要表示金额等货币的时候优先选择DECIMAL数据类型。
5. 枚举类型
枚举类型 | 描述 |
enum | 枚举,可以包含多个值,但只能存储一种其中一个值。 |
set | 集合,可以包含多个值,可以存储其中多个值。 |
实例: 表中的sex的类型是enum('男','女'),habit的类型set('打篮球','敲代码','学习'),插入的数据只能从sex中二选一,从set中多选一,如下:
如果插入的数据从sex中选择两个的话,则数据库会直接报错。
enum在数据库中是用整数进行存储,而set是通过位数进行存储的。
六. 表的基本概念
表是包含数据库中所有数据的数据库的对象。数据库就类似我们的目录,数据库对象就类似文件,目录可以存放多个文件,文件内可以存储数据等内容。因此,我们可以把数据库看作是目录,表看作是存储数据的文件。
数据在表中是按行按列的格式进行组织,其中每一行代表一条唯一记录,每一列代表的记录中的一个字段。如下:
1. 创建表的语法形式
create table 表名(
属性名 类型,
属性名 类型,
属性名 类型,
...
);
其中“属性名”表示表中每一列的名称,“数据类型”指定每一列存储的数据类型。
实例:在sjp数据库下创建一个表.
- 首先需要使用sjp数据库,才能在sjp数据库下创建表。
use sjp; 使用sjp数据库
实例: 创建一个成绩表,其中表中包含学号,名字,语文,数学,英语的成绩如下:
代码说明:final_exam是表名字,表中有四个字段(四列),分别为int类型,varchar类型,各个字段直接用" , "分隔开,最后一个属性后面不需要“,”符号。
插入一条数据后并显示
2. 查看表结构
desc 表名;
实例:查看final_desc表的定义信息。
show create table 表名; 查看表的详细信息
在显示表详细定义信息时,可以使用" ; "," \\G"符号来结束,为了让结果显示更美观,便于用户查看,最好使用“ \\G ”结束。
实例:查看final_exam表的详细定义
存储引擎是InnoDB,存储字符集是utf8.
3. 删除表
drop table 表名;
实例:
删除person1这个表.
4. 修改表
修改表名
在数据库中可以通过表名来区分不同的表,因为表名在数据库是唯一的,不能重复。在MySQL数据库修改表名可以通过alter table来实现。
alter table 表名 rename 新表名;
实例:将表final_exam名字修改为midsemeter,如下;
增加字段
对于表,可以看成是由列和行来构成的,其中" 列 ”经常被称为字段,根据创建表的语法可以发现,字段是由字段名和数据类型来定义的。当表创建完后,可以使用alter table在表中增加新字段。
alter table 表名 add 属性名 属性类型;
实例:在midsemeter中新增sum列
在新增列中,每一行的该位置的数据都会被设置为NULL。
实例:在midsemeter添加descri字段到第一列中。
在结尾添加first是为了使descri字段放在表中的第一个位置。
实例:在midsemeter表,往english后面插入music字段
在结尾after english表示的是将新添加的字段放在english后面。
删除字段
alter table 表名 drop 字段名;
实例:删除midsemeter表中的descri字段。
修改字段的数据类型
alter table 表名 modify 字段名 字段类型;
实例:将sum字段的类型由int变为double类型。
修改字段的名字
alter table 表名 change 字段名 新字段名 新属性名;
改语句可以同时修改字段名和属性,也可以只修改字段名。
实例:将midsememter表中字段music改名为art;
以上是关于MYSQL基础(一)——数据类型的详细解析. 数据库基本操作的主要内容,如果未能解决你的问题,请参考以下文章