一、数据类型
日期和时间数据类型 |
| date | 3字节 | 日期,格式:2014-09-18 |
日期和时间数据类型 |
| time | 3字节 | 时间,格式:08:42:30 |
日期和时间数据类型 |
| datetime | 8字节 | 日期时间,格式:2014-09-18 08:42:30 |
日期和时间数据类型 |
| timestamp | 4字节 | 自动存储记录修改的时间,格式:2009-09-18 08:42:30 |
日期和时间数据类型 |
| year | 1字节 | 年份, 格式:2009 |
数值数据类型 | 整型 | tinyint | 1字节 | 有符号范围(-128~127),无符号(0~255) |
数值数据类型 | 整型 | smallint | 2字节 | 有符号范围(-32768~32767),无符号(0~65535) |
数值数据类型 | 整型 | mediumint | 3字节 | 有符号范围(-8388608~8388607),无符号(0~16777215) |
数值数据类型 | 整型 | Int(integer) | 4字节 | 有符号范围 (-2147483648~2147483647), 无符号(0~4294967295) |
数值数据类型 | 整型 | bigint | 8字节 | 有符号范围(-9223372036854775807~ 9223372036854775807), 无符号(0~18446744073709551615) |
数值数据类型 | 浮点型 | float(m, d) | 4字节 | 单精度浮点型,m总个数,d小数位 单精度实数在内存中占32bit 有效数字为6~7位 |
数值数据类型 | 浮点型 | numeric(m,d) | 4字节 | m总个数,d小数位 |
数值数据类型 | 浮点型 | double(m, d) | 8字节 | 双精度浮点型,m总个数,d小数位 双精度实数占内存单元为64bit 有效数字为15~16位 |
数值数据类型 | 浮点型 | decimal(m, d) |
| decimal是存储为字符串的浮点数 |
字符串数据类型 |
| char(n) | 255字节 | 固定长度 每个汉字3字节 |
字符串数据类型 |
| varchar(n) | 65535字节 5.0以上版本 | 可变长度 每个汉字3字节 varchar起始位和结束位占去了3个字节 varchar会使用1-3个字节来存储长度 varchar性能略逊char,当长度变化的时候,要重新分配内存 |
字符串数据类型 |
| tinytext | 255字节 | 可变长度 |
字符串数据类型 |
| text | 65535字节
| 可变长度 存储的时候不会截断尾部的空格 text不会使用1-3个字节来存储长度 text没有默认值 |
字符串数据类型 |
| mediumtext | 16M | 可变长度 |
字符串数据类型 |
| longtext | 4G | 可变长度 |
字符串数据类型 | 二进制形式 | TinyBlob | 255字节 | 可变长度 |
字符串数据类型 | 二进制形式 | blob | 65535字节 | 可变长度 |
字符串数据类型 | 二进制形式 | mediumblob | 16M | 可变长度 |
字符串数据类型 | 二进制形式 | longblob | 4G | 可变长度 |
其它类型 |
| enum(“1″, “2″) | 最大65535个 不同的枚举值 | enum数据类型就是定义了一种枚举,最多包含65535个不同的成员。 当定义了一个enum的列时,该列的值限制为列定义中声明的值。 如果列声明包含NULL属性,则NULL将被认为是一个有效值,并且是默认值。如果声明了NOT NULL,则列表的第一个成员是默认值。 |
其它类型 |
| set(“1”, “2″,) | 最大64个 不同的值 | set数据类型为指定一组预定义值中的零个或多个值提供了一种方法,这组值最多包括64个成员。 值的选择限制为列定义中声明的值。 |
二、数据库中的一些基本概念
数据库:按照数据结构来组织、存储和管理数据的仓库”
表:一个关系对应通常说的一张表。把数据库表示为关系的集合,每一个关系类似于一张二维表
属性:就是关系中各列,一列即为一个属性
关系:一个关系对应通常说的一张表。把数据库表示为关系的集合,每一个关系类似于一张二维表
元组:在表中,除了关系的标题栏以外,其它各行统称为“元组”
分量:元组的各个属性在该元组上的取值
关系的模式:关系名和关系的属性集称为关系的“模式”
域:每个属性有一个允许的值的集合,称为该属性的“域”,指定的域通常是一个特定的基本类型
超码(键)(super key):一个或者多个属性的集合,这些属性的组合可以使我们在一个关系中唯一地标识一个实体
候选(键)码(candidate key):最小超码,它们的任意真子集都不能成为超码。即任意真子集都不能成为超码的最小超码
主属性:包含在任何一个候选键中的属性
非主属性:不包含在任何一个候选键中的属性
主(键)码(primary key):数据库设计人员选定的,用于唯一标识该关系元组的一个候选码;每一个关系有并且只有一主码,通常用较小的属性组合作为主键
外(键)码:表中的一个(或多个)属性,它引用某个其他表(特殊情况下,也可以是外键所在的表)的主键,当然,也可以是候选键,但多数情况下是主键
三、关系型数据库的特征
1.关系必须是规范化的,满足一定的规范条件最基本的规范条件:关系的每一个分量必须是一个不可分的数据项
2.关系模型的完整性约束
①实体完整性:指一个表中的每一行必须是唯一的,即实体是可以唯一区分的 。若属性A是基本关系R的主键,则属性A不能取空值,另外不能存在属性A上分量相同的元组
②参照完整性:在关系数据库中用外键(foreign key,或外码)来实现参照完整性
③用户定义的完整性:此规则是针对某一应用环境的完整性约束条件,他反映了某一具体应用所涉及的数据应满足的要求。在实际系统中,这类完整性规则一般在建立库表的同时进行定义
3.关系数据库的数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合
四、关系模型的优缺点
优点
1.建立在严格的数学概念的基础上
2.概念单一。数据结构简单、清晰,用户易懂易用;实体和各类联系都用关系来表示。对数据的检索结果也是关系。
3.关系模型的存取路径对用户透明;具有更高的数据独立性,更好的安全保密性;简化了程序员的工作和数据库开发建立的工作
缺点
1.存取路径对用户透明导致查询效率往往不如非关系数据模型
2.为提高性能,必须对用户的查询请求进行优化增加了开发数据库管理系统的难度
五、MySQL数据库存储引擎
1.什么是存储引擎
存储引擎是数据库管理系统用来从数据库创建、读取和更新数据的软件模块。在5.5版本之前MySQL的默认存储引擎是MyISAM,不支持事务处理等。在5.5及更高版本之后,默认存储引擎是InnoDB,支持锁、事务处理等机制
2.MySQL默认存储引擎InnoDB
(1)结构特点
InnoDB 可以采用独立表空间来存储用户数据库,每一个表(关系)的存储文件有两种:
①.frm 是存储表的定义信息的文件
②.ibd 是表的数据和索引的文件
(2)共享表空间
InnoDB 采用共享表空间来存储系统的数据字典、临时表、事务状态等。系统的共享表空间对应于磁盘文件 idbdata1。对应的数据库是 information_schema
DBA可以通过修改配置文件、特权命令等多种办法对MySQL服务器进行包括共享表空间在内的管理,保证系统顺利运行
六、MySQL中的数据类型
1.整型
2.浮点数
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 |
3.十进制
类型 | 占用空间大小 | 范围(有符号) | 范围(无符号) | 用途 |
DECIMAL | 对于DECIMAL(M,D) ,占用M+2个字节 | 依赖于M和D的值 | 依赖于M和D的值 | M的有效范围 [1,65]; D的有效范围 [0,30],且 D<M 。 固定精度的十进制数 |
例如:
amount DECIMAL(6,2);
表示 名为amount的列最多可以存储6位数字,其中小数位数为2位; 因此,amount列的范围是从-9999.99到9999.99
4.文本类型
类型 | 大小 | 用途 |
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
注意事项:
①varchar每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)
②按照查询速度: char最快,varchar次之,text最慢
③char(n),varchar(m),数字n,m表示字符数,不是字节数
5.二进制文本类型
类型名称 | 说明 | 存储需求 |
BIT(M) | 位字段类型 | 大约 (M+7)/8 字节 |
BINARY(M) | 固定长度二进制字符串 | M 字节 |
VARBINARY (M) | 可变长度二进制字符串 | M+1 字节 |
TINYBLOB (M) | 非常小的BLOB | L+1 字节,在此,L<2^8 |
BLOB (M) | 小 BLOB | L+2 字节,在此,L<2^16 |
MEDIUMBLOB (M) | 中等大小的BLOB | L+3 字节,在此,L<2^24 |
LONGBLOB (M) | 非常大的BLOB | L+4 字节,在此,L<2^32 |
注意:
①二进制文本类型存储时不编码,直接以二进制进行存储(即01)
②Mysql的InnoDB存储引擎,对值比较大的BLOB与TEXT,使用专门的“外部”存储区域来进行存储。此时每个值在行内会采用1~4个字节存储指针,指向在外部存储区域存储的实际值。数据超大时,会在磁盘存储临时表,导致整体速度下降
6.其他常用数据类型
类型 | 大小 (字节) | 范围 | 格式 | 用途 |
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
七、常见编码占用存储空间大小
编码 | 英文字符 | 汉字(含繁体) |
ASCII | 一个字节 | 两个字节 |
UTF-8 | 一个字节 | 三个字节 |
Unicode | 两个字节 | 两个字节 |
作者:蓝月