一、数据库引擎
一、InnoDB存储引擎支持事务,支持行级锁和外键, MySQL默认的存储引擎
二、MyISAM存储引擎,不支持事务,支持表锁,拥有较高的插入和查询速度
三、Memory存储引擎,会把表中的数据存储到内存中
四、如何选择存储引擎
一般情况下采用默认的InnoDB存储引擎即可,支持事务,外键。 如果数据表主要用来插入和查询记录,可以选择MyISAM; 如果只是临时存储数据,并且数据量不大可以选择Memory存储引擎。
二、数据类型
数据类型包括 数值类型,日期、时间类型和字符串类型等
一、整数类型
数据类型名称 | 存储需求 | 有符号的取值范围 | 无符号取值范围 |
TINYINT | 1字节 | -128~127 | 0~255 |
SMALLINT | 2字节 | -32768~32767 | 0~65535 |
MEDIUMINT | 3字节 | ||
INT | 4字节 | -2147483648~2147483647 | 0~4294967295 |
BIGINT | 8字节 |
二、小数类型号
数据类型名称 | 说明 | 存储需求 |
FLOAT | 单精度浮点小数,有7位有效数字 | 4字节 |
DOUBLE | 双精度浮点小数,有15位有效数字 | 8字节 |
DECIMAL(M,D) | 定点小数,M表示精度,D是小数的位数. DECIMAL是以字符串形式存储的,主要用于货币计算 | M+2个字节 |
注意:在MySQL中,不管是浮点小数还是定点小数,如果数据超出了数据类型的精度范围都采用四舍五入进行处理
三、日期与时间类型
数据类型名称 | 格式 | 范围 | 存储需求 |
YEAR | YYYY | 1901~2155 | 1字节 |
TIME | HH:MM:SS | -838:59:59~838:59:59 | 3字节 |
DATE | YYYY-MM-DD | 1000-01-01~9999-12-31 | 3字节 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8字节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00 ~ 2038 | 4字节 |
四、字符串类型
数据类型名称 | 说明 | 存储需求 |
CHAR(M) | 固定长度的字符串 | M字节 |
VARCHAR(M) | 变长的字符串 | L+1,L是字符的数量,L<=M |
TINYTEXT | 小的字符串 | L+1字节, L < 28 |
TEXT | 字符串 | L+2字节, L<216 |
MEDIUMTEXT | 字符串 | L+3字节, L<224 |
LONGTEXT | 字符串 | L+4字节, L<232 |
ENUM | 枚举 | |
SET | 集合 |
一、Enum详解:
定义字段时,可以这样:
字段名 ENUM( ‘值1’, ‘值2’, ‘值3’,....’值n’)
字段只能取值ENUM列表中的某个值
二、Set字段详解
五、二进制类型
MySQL可以使用二进制类型存储非文本数据,如BIT(M), BINARY(M),BLOB等.虽然使用BLOB或者TEXT可以存储大容量的数据,对这些大数据的处理会降低数据库的性能.一般情况下,只存储文件的路径,而不是文件的内容.
六、如何选择数据类型
浮点数与定点数. 在长度一定的情况下,浮点小数可以表示更大的数据范围,但是有误差, 对于精度要求较高时采用定点小数DECIMAL.
日期时间类型,如果表示年使用YEAR,表示时间使用TIME,表示日期使用DATE,表示日期与时间使用TIMESTAMP或DATETIME, DATETIME表示范围大, TIMESTAMP实际存储的是UTC世界协调时. 如果使用TIMESTAMP定义字段类型时,在插入数据时如果没有这个列值,系统会把当前时间插入.
CHAR与VARCHAR,CHAR是固定长度的,处理速度比VARCHAR快,但是浪费空间. 但是在MySQL中,存储引擎会影响CHAR与VARCHAR,在InnoDB存储引擎中,不区分固定长度与可变长度,使用CHAR不一定比VARCHAR快,使用VARCHAR可以节省存储空间; 在MyISAM存储引擎中,使用CHAR类型查询速度比VARCHAR快很多.