2.1 Mysql存储引擎

存储引擎是MySQL数据库的核心、心脏、发动机,它决定了数据如何存储,查询的时候如何搜索数据,索引如何创建等等。
MySQL 5.1版本之前默认的存储引擎是MyISAM,之后默认是InnoDB

什么是存储引擎?
存储引擎其实就是对于数据库文件的一种存取机制,如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。

常用存储引擎:
InnoDB:
1) 事务处理、回滚、崩溃修复能力和多版本并发控制
2) 自增长AUTO_INCREMENT
3) 外键(FOREIGN KEY)
InnoDB 的优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差,占用的数据空间相对较大。

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

Memory:
1) 数据全部放在内存中
2) 哈希索引
注意:MEMORY 用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据。
如果重启或者关机,所有数据都会消失。因此,基于MEMORY的表的生命周期很短,一般是一次性的。

2.2 Mysql数据类型

MySQL数据库中的每一条数据都有其数据类型,主要分为数值型,字符串型和日期时间型三个大类。
image.png
mysql数据类型
整数类型
1) Tinyint
迷你整形,系统采用一个字节来保存的整形:一个字节 = 8位,最大能表示的数值是0-255
2) Smallint
小整形,系统采用两个字节来保存的整形:能表示0-65535之间
3) Mediumint
中整形,采用三个字节来保存数据。
4) Int
整形(标准整形),采用四个字节来保存数据。
5) Bigint
大整形,采用八个字节来保存数据。


小数类型
专门用来存储小数的
在 Mysql 中将小数类型又分为两类:浮点型 和 定点型

浮点型
1)Float
Float又称之为单精度类型:系统提供4个字节用来存储数据,但是能表示的数据范围比整型大的多,大概是10^38;只能保证大概7个左右的精度(如果数据在7位数以内,那么基本是准确的,但是如果超过7位数,那么就是不准确的)
基本语法
Float:表示不指定小数位的浮点数
Float(M,D):表示一共存储 M个 有效数字,其中小数部分占 D位
Float(10,2):整数部分为8位,小数部分为2位
2)Double
Double又称之为双精度:系统用8个字节来存储数据,表示的范围更大,10^308次方,但是精度也只有15位左右。

定点数(比较常用的)
定点数:能够保证数据精确的小数(小数部分可能不精确,超出长度会四舍五入),整数部分一定精确
Decimal
Decimal定点数:系统自动根据存储的数据来分配存储空间,每大概9个数就会分配四个字节来进行存储,同时小数和整数部分是分开的。
Decimal(M,D):M表示总长度,最大值不能超过65,D代表小数部分长度,最长不能超过30。
定点数的应用:如果涉及到钱的时候有可能使用定点数


字符串类型
短文本:char、varchar
CHAR(M) — 固定长度的字符串是以长度为1到255之间个字符长度(例如:CHAR(5)),存储右空格填充到指定的长度。 限定长度不是必需的,它会默认为1。 char(5)内存空间会浪费,性别:男/女 char(1)
VARCHAR(M) — 可变长度的字符串是以长度为1到255之间字符数(高版本的MySQL超过255); 例如: VARCHAR(25). 创建VARCHAR类型字段时,必须定义长度。
BLOB 或 TEXT — 字段的最大长度是65535个字符。 BLOB 是“二进制大对象”,并用来存储大的二
进制数据,如图像或其他类型的文件。定义为 TEXT 文本字段还持有大量的数据; 两者之间的区别
是,排序和比较上存储的数据,BLOB大小写敏感,而TEXT字段不区分大小写。不用指定BLOB
或TEXT的长度。


日期和时间类型
DATE — 以YYYY-MM-DD格式的日期,在1000-01-01和9999-12-31之间。 例如,1973年12月30日将被存储为1973-12-30。
DATETIME — 日期和时间组合。以YYYY-MM-DD HH:MM:SS格式,在1000-01-01 00:00:00 到9999-12-31 23:59:59之间。例如,1973年12月30日下午3:30,会被存储为1973-12-30 15:30:00。
TIMESTAMP — 1970年1月1日午夜之间的时间戳,到2037的某个时候。这看起来像前面的DATETIME格式,只是数字之间的连字符; 1973年12月30日下午3点30分将被存储为19731230153000(YYYYMMDDHHMMSS)格式。
TIME — 存储时间,以HH:MM:SS格式。
YEAR(M) — 以2位或4位数字格式来存储年份。如果长度指定为2(例如YEAR(2)),年份就可以为
1970至2069(70〜69)。如果长度指定为4,年份范围是1901-2155,默认长度为4。

注意:
MySql中的 char类型与 varchar 类型,区别在于:
char类型是固定长度的: 根据定义的字符串长度分配足够的空间。
varchar类型是可变长度的: 只使用字符串长度所需的空间
适用场景:

  • char 类型适合存储 固定长度 的字符串,比如 密码,性别 一类,varchar 类型适合存储 在一定范围内,有长度变化的字符串
  • char 类型耗费空间,查询效率高;varchar 类型节省空间,查询效率不高