首页 > 数据库 >MySQL笔记(一)之基础知识

MySQL笔记(一)之基础知识

时间:2022-12-19 14:06:01浏览次数:40  
标签:存储 int 笔记 基础知识 引擎 InnoDB MySQL 类型 table


一、​​mysql​​数据类型

​mysql​​支持的所有的数据类型。

MySQL笔记(一)之基础知识_mysql引擎

1.1. 字符串类型

MySQL笔记(一)之基础知识_数据_02

​char(1)​​​是固定长度,我们设置长度是多少,只能输入多少。长度可以再​​0-255​​的任意值。

​varchar​​​类型的长度是可变的,例如,在创建表时指定了最大长度是​​100​​​,当我们存储数据之后可能不够​​100​​​个字符串,那么对于​​varchar​​​时,使用多少分配多少, ​​varchar​​类型实际占用的空间为字符串的实际长度加一。这样,即可有效节约系统的空间。

但是我们还要注意,当我们​​varchar(5)​​​的时候,其实是在所占用的字节数的实际长度的基础上家​​1​​,最后一个字符串的结束标识符占用了一个字节。

另外​​varchar​​​类型将会​​hello_​​​最后面的空格保留着,而​​char​​​类型中​​hello_​​​后面的空格自动删除掉。(​​_​​标识空格)。

最后我们需要对​​blob​​​和​​text​​做一个简单的认识:

  1. ​text​​​值对大小写不敏感,可以将​​text​​​列视为​​varchar​​​列,​​blob​​​和​​text​​长度也是安装实际占用的;
  2. ​blob​​​可以存储图片,​​text​​不行,只可以存储纯文本文件。
  3. 当保存或检索BLOB和TEXT列的值时不删除尾部空格 。

注意:我们需要慎用这两个字段,​​mysql​​​会将这两个类型的值会当做一个独立的对象处理,会建立一个单独的区域进行存储,每个值会采用1~4个指针,指向实际存储位置;并且如果对这两个字段进行排序,只能针对最前面的​​max_sort_length​​​。 如果只需要对前面的更少的字节进行排序,那么可以通过设置​​max_sort_length​​​参数或者​​substring(value,length)​​​来截取部分字符串; 创建临时表的情况下,因为如果临时表大小超过​​max_heap_table_size​​​或者​​tmp_table_size​​,就会将临时表存储在磁盘上,进而导致整体速度下降 。

1.2. 数值型类型

MySQL笔记(一)之基础知识_mysql引擎_03

​int/integer​​:当我们建表的时候:

create table table_name (
id int,
......
)

我们设置字段是​​int/integer​​​类型时,默认是带符号型数据,数据范围是​​(-2147483648, 2147483647)​​​,这是我们在去设置​​int(4)​​​设置​​int​​​类型的长度是没啥用处的,而设置长度时候,并不是控制我们输入数据的大小和输入数据的长度,因为当我们设置类型为​​int/integer​​​时,默认的长度就是​​11​​​;所以那么设置​​int/integer(5)​​这种又啥用呢?

其实是因为我们使用的类型不对,我们需要这样设置属性:

create table table_name (
id int(3) unsigned zerofill,
......
)

这时候我们设置的​​int(3)​​​才会其中用的,当我们填充字段的时候输入​​1​​​的时候,实际上会出现​​001​​​这样。这样的意味着,当我们输入的数据不够三位时就会用​​0​​​填充。另外如果设置无符号数据的时候​​id int(3) unsiend zerofill​​,这样就可以了。

这里我们需要注意下​​float​​​、​​double​​​和​​decimal​​三种类型:

​float​​​:最大的精度是​​6​​​;​​double​​​:最大的精度是​​8​​​,如果长度超过会丢失精度。​​float​​​和​​double​​​是非标准类型,在数据库中保存近似值。建议使用​​decimal​​,这种数据类型是一字符串形式保存数值的。

最后我们说一下​​decimal​​​类型,语法中​​column_name decimal(p, d)​​​,​​p​​​表示有效数字数的精度,范围是​​1~65​​​;​​d​​​表示小数点后面的位数,范围是​​0~30​​​。​​mysql​​​要求​​d​​​小于等于​​p​​。

当我们设置​​decimal(5,2)​​​:取值范围是​​-999.99​​​到​​999.99​​。

实例

结果

原因

​999.123​

​999.12​

超出的部分四舍五入

​12.3​

​12.30​

位数不够会补零

1000.00

报错

超出范围

1.3. 时间和日期类型

MySQL笔记(一)之基础知识_mysql引擎_04

这些类型基本上就没事可说的了。

1.4. 枚举类型

​enum​​​类型又称为枚举类型,在创建表时,​​enum​​​类型的取值范围就以列表的形式指定了。其基本形式如下:属性名 ​​enum('值1','值2',...,'值n')​​​,其中属性名参数指定字段的名称,​​值n​​参数表示列表中的第n个值,这些值末尾的空格将会被系统直接删除。

​enum​​​类型最多可枚举​​65 535​​个元素。

create table table_name (
sex enum('男', '女') ,
......
)

1.5. ​​set​​类型

​set​​​类型最多枚举​​64​​个元素。

​set​​​是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个​​set​​​成员的​​set​​​列值时各成员之间用逗号​​(‘,’)​​​间隔开。所以​​set​​成员值本身不能包含逗号。

create table table_name (
name set('1', '2', '3', '5') ,
......
)

二、​​MySQL​​引擎

​mysql​​​常用的引擎是三种:​​InnoDB​​​存储引擎、​​MyISAM存储引擎​​​和​​Memory存储引擎​​。

2.1. ​​InnoDB​​存储引擎

​InnoDB​​​给​​MySQL​​​的表提供了事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全。 后面版本的 ​​MySQL​​​的默认存储引擎就是​​InnoDB​​。

​InnoDB​​支持自增主键和外键。

​InnoDB​​​中,创建的表的表结构存储在​​frm​​​文件。数据和索引存储在​​innodb_data_home_dir​​​和​​innodb_data_file_path​​定义的表空间中。

​InnoDB​​的优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差,占用的数据空间相对较大。

2.2. ​​MyISAM​​存储引擎

​MyISAM​​​是​​MySQL​​​中常见的存储引擎,曾经是​​MySQL​​的默认存储引擎。

​MyISAM​​​的表存储成3个文件。文件的名字与表名相同。拓展名为​​frm​​​、​​myd​​​、​​myi​​​。其实,​​frm​​​文件存储表的结构;​​myd​​​文件存储数据,是​​myData​​​的缩写;​​myi​​​文件存储索引,是​​myIndex​​的缩写。

​MyISAM​​的优势在于占用空间小,处理速度快。缺点是不支持事务的完整性和并发性。

2.3. ​​Memory​​存储引擎

​memory​​​是​​MySQL​​中一类特殊的存储引擎。它使用存储在内存中的内容来创建表,而且数据全部放在内存中。

每个基于​​memory​​​存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为​​frm​​类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。

​memory​​默认使用哈希索引。速度比使用B型树索引快。 想用B型树索引,可以在创建索引时指定。

​memory​​​用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,所有数据都会消失。因此,基于​​memory​​的表的生命周期很短,一般是一次性的。

三、存储引擎对比和选择

特性

​InnoDB​

​MyISAM​

​Memory​

事物安全

支持

不支持

不支持

存储限制

​64TB​

有限制

有限制

空间使用




内存使用




插入速度




外键支持

支持

不支持

不支持

***​​InnoDB​​​***:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择​​InnoDB​​​有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择​​InnoDB​​​,因为支持事务的提交(​​commit​​​)和回滚(​​rollback​​)。

***​​MyISAM​​​***:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择​​MyISAM​​能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。

***​​MEMORY​​​***:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择​​MEMOEY​​。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择​​InnoDB​​​。这个数据库中可以将查询要求比较高的表选择​​MyISAM​​​存储。如果该数据库需要一个用于查询的临时表,可以选择​​MEMORY​​存储引擎。

(二、三部分参考文章链接,大家可以去自己看看)


标签:存储,int,笔记,基础知识,引擎,InnoDB,MySQL,类型,table
From: https://blog.51cto.com/luckyqilin/5952248

相关文章

  • MySQL系列之表和数据类型
    MySQL之表和数据类型一.查看数据库版本selectversion();二.数据库操作2.1.创建数据库createdatabaseifnotexiststest_dbdefaultcharsetutf8collateutf8_gener......
  • docker安装mysql8
    虽然有一种说法是最好不要用docker安装数据库,因为数据库出错后难搞,如果挂载了数据还需要占用双份存储空间等。但有时候还是想搞点新鲜玩意,比如想搞个nextcloud来玩玩,个人感......
  • [C++] VS Code 中导入MYSQL (包含使用gcc,g++)
    首先安装Gcc1.下载链接:https://sourceforge.net/projects/mingw-w64/files/备用网盘: https://pan.baidu.com/s/1trdQtDO6XqmfCbZHc1IDzQ?pwd=nwh5 2.添加环境变......
  • mysql索引之唯一索引
    特别说明:1、  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识;2、  本文许多示例及概念是基于Oracle数据库描述,对于其它关......
  • 自动备份mysql数据库 - shell脚本
     以下是自动备份mysql数据库的全过程:使用mysqldump程序连接到MySQL服务器。将指定的数据库存储到SQL文件。压缩SQL文件以节省空间。要使用此脚本,您需要修改脚本顶......
  • mysql学习------二进制日志管理
    MySQL二进制日志(BinaryLog) a、它包含的内容及作用如下:   包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)   包含关于每个更新数......
  • docker-部署mysql5.7
    1、已安装好docker的虚拟机2、我这里用的是腾讯云3、执行下方命令1.dockerimagepullmysql:5.72.dockerrun--namemysql-p3316:3306-eMYSQL_ROOT_PASSWORD......
  • windows下 mysql开启 binlog日志
    一、cmd进入mysql安装位置:(命令形式连接mysql或其他工具连接mysql)    二、执行sql语句:(语句后记得带上分号;)showbinarylogs;   三、说明没有开启:y......
  • MySql查询指定时间数据
    user_event :用户事件表create_time:表中存储时间的字段 #获取当月数据SELECT*FROMuser_eventWHEREDATE_FORMAT(create_time,'%Y-%m')=DATE_FORMAT(NOW(),'%Y-%m')#......
  • java核心技术学习笔记——synchronized底层如何实现?什么是锁的升级、降级?
    在Java6之前,Monitor的实现完全是依靠操作系统内部的互斥锁,因为需要进行用户态到内核态的切换,所以同步操作是一个无差别的重量级操作。现代的(Oracle)JDK中,VM对此进......