05 MySQL 从入门到精通——存储引擎及数据类型

  • Post author:
  • Post category:mysql

数据库存储引擎的应用
	存储引擎:在MySQL中的数据用不同的技术存储在文件或内存中,每一种技术都是用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的、不同的功能和能力。通过选择不同的技术,能够获得额外的速度或功能,从而改善应用的整体功能。,这些不同技术以及配套的相关功能在MySQL中被称为存储引擎。是存储数据、为存储的数据建立索引、更新查询数据的各种实现方法。
	
	查询MySQL中支持的存储引擎:
		SHOW ENGINES
	查询变量
		SHOW VARIABLES
	查看默认引擎
			show variables like '%default_storage_engine%';

	InnoDB存储引擎:InnoDB遵循CNU通用公开许可(GPL)发行,已经被一些重量级因特网公司所采用;InnoDB给MySQL的表提供了事务、回滚、崩溃修复能力和多版本并发控制的事务安全;在InnoDB存储引擎中,创建的表的表结构存储在.frm文件中。数据和索引存储在innodb_data_home_dir和innodb_data_file_path空间中。
		InnoDB存储引擎的特性:
			InnoDB对事务处理的能力,这是管理敏感数据所必需的,是MySQL其他存储引擎所无法与之比拟的。
			InnoDB存储引擎中支持自动增长列AUTO_INCREMENT。自动增长列的值不能为空,且值必须唯一。MySQL中规定自增列必须为主键。
			InnoDB是MySQL史上第一个提供外键约束的表引擎。
			InnoDB存储引擎中,表结构存储在.frm文件中,数据和索引存储在innodb_data_home_dir和innodb_data_file_path表空间中。	
		优点:
			良好的事务管理
			崩溃修复能力
			并发控制	
		缺点:
			读写效率稍差
			占用的数据空间相对比较大	
		使用InnoDB存储引擎的场景:
			更新密集的表:InnoDB存储引擎特别适合处理多重并发的更新请求。
			事务:InnoDB存储引擎是唯一支持事务的标准MySQL存储引擎,这是管理敏感数据的必需软件。
			自动灾难恢复:与其他存储引擎不同,InnoDB表能够自动从灾难中恢复。
		
	MyISAM存储引擎:在MySQL5.5之前的版本中全都使用MyISAM作为默认存储引擎
		MyISAM存储引擎的文件类型:主要由三个文件组成,文件后缀分别为:.frm  .MYD  .MYI
		MyISAM存储引擎的存储格式:
			MyISAM静态:如果所有表列的大小都是静态的(即不使用xBLOB、xTEXT或VARCHAR数据类型),MySQL就会自动使用静态MyISAM格式。
			MyISAM动态:如果有表列定义为动态的(使用xBLOB、xTEXT或VARCHAR数据类型),MySQL就会自动使用动态格式
		补充:
			尽可能使用静态数据类型,因为占用的空间更小
			经常使用OPTIMIZE TABLE语句,它会整理表的碎片,恢复由于表更新和删除而导致的空间丢失。
		MyISAM压缩:
			有时会创建在整个应用程序生命周期中都只读的表。如果是这种情况,就可以使用myisampack工具将其转换为MyISAM压缩表来减少空间。
		优点:
			占用空间小
			处理速度快
		缺点:
			不支持事务的完整性和并发性

	MEMORY存储引擎:MEMORY存储引擎是MySQL中的一类特殊的存储引擎。其使用存储在内存中的内容来创建表,而且所有数据也放在内存中。
		MEMORY存储引擎的文件存储形式:每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,扩展名为.frm。该文件中只存储表的结构,而其数据文件都是存储在内存中。
		MEMORY存储引擎的索引类型:MEMORY存储引擎默认使用哈希(HASH)索引。其速度要比使用B型树(BTREE)索引快。
		MEMORY存储引擎的存储周期:MEMORY存储引擎通常很少用到。因为MEMORY表的所有数据是存储在内存上的,如果内存出现异常就会影响到数据的完整性。如果重启机器或者关机,表中的所有数据将消失。
		有点:
			MEMORY表的大小是受到限制的
			处理速度非常快
		缺点:
			数据易丢失
			生命周期短

	选择存储引擎场景:
		InnoDB存储引擎:用于事务处理应用程序,具有众多特性。同时支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高,要求实现并发控制,那选择InnoDB存储引擎有其很大的优势。如果需要频繁的进行更新、删除操作的数据库,也可以选择InnoDB存储引擎。因为,该类存储引擎可以实现事务的提交(Commit)和回滚(Rollback)。
		MyISAM存储引擎:管理非事务表,它提供高速存储和检索,以及全文搜索能力。MyISAM存储引擎插入数据快,空间和内存使用比较低。如果表主要是用于插入新纪录和读出记录,那么选择MyISAM存储引擎能实现处理的高效率。如果应用的完整性、并发性要求很低,也可以选择MyISAM存储引擎
		MEMORY存储引擎:提供“内存中”表,所有数据都在内存中,数据的处理速度快,但安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMORY存储引擎。MEMORY存储引擎对表的大小有要求,不能建太大的表。所以,这类数据库只使用相对较小的数据库表。

MySQL常用数据类型
	数字类型:
		整数数据类型

在这里插入图片描述

		浮点数据类型
			注意:FLOAT和DOUBLE存在误差问题,尽量避免进行浮点数比较;货币等对精度敏感的数据,应该使用DECIMAL类型。
			例如:DECIMAL(8,2)

在这里插入图片描述

		如何选择合适的数据类型
			选择最小的可用类型,如果值永远不超过127,则使用TINYINT比INT强。
			对于完全都是数字的,可以选择整数类型。
			浮点类型用于可能具有小数部分的数。

	字符串类型分为3类:
		普通的文本字符串类型:
			存储字符串长度相同的全部使用CHAR类型;字符长度不同的使用VARCHAR类型,不预先分配存储空间,长度不要超过255.
		例如:Char(10)

在这里插入图片描述

		可变类型
			可变类型的大小可以改变,TEXT类型适合存储长文本,而BLOB类型适合存储二进制数据,支持任何数据,如文本、声音和图像等。

在这里插入图片描述

		特殊类型

在这里插入图片描述

		注意:
			BLOB、TEXT、ENUM、SET字段类型在MySQL数据库的检索性能不高,很难使用索引进行优化。如果必须使用这些类型,一般采取特殊的结构设计,或者与程序结合使用其他的字段类型替代。例如,SET类型可以使用整型(0,1,2,3...)、注释功能和程序的接查功能集合替代。
		如何选择合适的字符串类型?
			从速度方面考虑,要选择固定的列,可以使用CHAR类型。
			要节省空间,使用动态的列,可以使用VARCHAR类型。
			要将列中的内容限制在一种选择,可以使用ENUM类型。
			允许在一个列中有多于一个的条目,可以使用SET类型。
			如果要搜索的内容不区分大小写,可以使用TEXT类型。
			如果要搜索的内容区分大小写,可以使用BLOB类型。

	日期和时间数据类型
		每种类型都有其取值范围,如赋予一个不合法的值,将会被“0”代替。
		日期的顺序是按照标准的 ANSI SQL 格式进行输出的。

在这里插入图片描述


版权声明:本文为weixin_43812198原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。