数据类型和约束
(一)数据类型
MySQL数据库中提供了数据类型可以用于在不同场景中描述具体数据,主要包含数值型以及日期时间型、字符型、二进制型等各种类型。
*1、 数值型*
*类型* | *字节* | *描述* |
---|---|---|
TINYINT | 1 字节 | (-128,127) |
SMALLINT | 2 字节 | (-32 768,32 767) |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) |
INT | 4 字节 | (-2 147 483 648,2 147 483 647) |
BIGINT | 8 字节 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) |
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) |
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) |
DECIMAL | DECIMAL(M,D),如果M>D,为M+2否则为D+2 decimal(3,1) 12.3 |
备注:较为常用的数值类型
INT/INTEGER:表示整数;DOUBLE:表示浮点数;DECIMAL:设置自定义精度
*2、 日期时间型*
*类型* | *字节* | *描述* |
---|---|---|
DATE(日期) | 3字节 | 1000-01-01/9999-12-31 |
TIME(时间) | 3字节 | ‘-838:59:59’/‘838:59:59’ |
YEAR | 1字节 | 1901/2155 |
DATETIME | 8字节 | 1000-01-01 00:00:00/9999-12-31 23:59:59 |
TIMESTAMP | 4字节 | 1970-01-01 00:00:00/2038 |
备注:日期时间常用类型
DATETIME:描述日期和时间的结合体
TIMESTAMP:结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07
*3、 字符串型*
*类型***** | *字节* | *描述* |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
备注:字符类型中常用数据类型
VARCHAR:描述变长字符串
TEXT:描述长文本数据
*4、 varchar和text*
char: char是定长格式的,但是长度范围是 0~255. 当你想要储存一个长度不足255的字符时,Mysql会用空格来填充剩下的字符。因此在读取数据时,char类型的数据要进行处理,把后面的空格去除。
Char(5) 5代表字符的个数
‘’12345‘’ 最多存5个字符
‘1‘ 如果不够5个 其他使用 空格占位
varchar: varchar 类型在 5.0.3 以下的版本中的最大长度限制为 255,而在5.0.3 及以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放 65532个字节(注意是字节而不是字符!!!)的数据(起始位和结束位占去了3个字节)在 5.0.3 以下版本中需要使用固定的 TEXT 或 BLOB 格式存放的数据可以在高版本中使用可变长的varchar 来存放,这样就能有效的减少数据库文件的大小。
varchar(5)
‘’12345‘’ 最多存五个
‘’1‘’ 如果不够5个 实际占据内存大小以,以存储的数据大小为准
text: 与 char 和 varchar不同的是,text 不可以有默认值,其最大长度是 2 的 16 次方-1
*结论:*
• 经常变化的字段用varchar
• 知道固定长度的用char
• 尽量用 varchar
• 超过 255 字符的只能用varchar 或者 text
• 能用 varchar 的地方不用text
(二)数据表约束
表约束,就是一种对数据格式和数据内容的限制,在数据库标准查询语言SQL中,定义了通用约束规范:
• 主键约束(当前字段数据具有唯一且非空):标注数据表中每条记录都是唯一的标识,不能重复且不能为空,通过关键字primary key添加
• 外键约束:标注当前数据表和其他数据表之间的关联关系,通过关键字foreign key添加(多表关系时具体讲解)
• 唯一约束(当前字段数据吗,唯一可为空):标注当前字段数据的唯一性,当前字段添加数据时,不能重复可以为空,通过关键字unique添加
• 默认约束(设置当前字段默认值):标注当前字段默认数据,通过关键字default添加,给字段添加默认值,当添加数据时没有给这个字段添加数据就使用默认值
• 非空约束(设置当前字段不能为空):标注当前字段默认数据不能为空,通过关键字not null添加
• 自增约束:标注当前字段数据默认+1一般配合主键使用,通过关键字auto_increment添加
• 无符号:主要用于数值类型,无符号代表为正数,unsigned