一、数据类型分类:
- 数值类型:适合存储:身高、体重、工资、奖金等
- 字符类型:适合存储:姓名、家庭地址、收货地址等
- 日期时间类型:适合存储:生日、出生年份、入职时间等
- 枚举类型:适合存储:爱好、性别、社保医院等
二、常用字符类型及存储范围:
- 字符类型:可以存储汉字或英文字母。
-
char
和varchar
共同点:不能超出指定的字符个数。
-
char
和varchar
不同点:存储的字符个数小于指定的字符个数时处理的方式不一样,如果存储数据不足定义范围,char
会用空格进行补全,varchar
则不会。
常用关键字 |
名称 |
存储范围 |
char |
定长类型 |
1-255字符 |
varchar |
变长类型 |
1-65535字符 (实际存储范围1-65532) |
其他关键字 |
名称 |
存储范围 |
tinytext |
短文本 |
0-255字节 |
tinyblob |
二进制形式短文本字 |
0-255字节 |
text |
长文本数据 |
0-65535字节 |
blob |
二进制形式的长文本 |
0-65535字节 |
mediumblob |
二进制形式的中等长度文本 |
0-16777215字节 |
mediumtext |
中等长度文本数据 |
0-16777215字节 |
longblob |
二进制形式极大文本 |
0-4284867295字节 |
longtext |
极大文本 |
0-4284867295字节 |
使用示例:
# 建表时指定表使用的字符集utf8
mysql> create table studb.t3(
name char(3),
address varchar(10)
) default charset utf8;
#查看字符集
mysql> show create table studb.t3 \G
*************************** 1. row ***************************
Table: t3
Create Table: CREATE TABLE `t3` (
`name` char(3) DEFAULT NULL,
`address` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
三、常用数值类型及存储范围:
- 整数类型:能存储正整数和负整数的类型
- 每种整数类型分为无符号存储范围和有符号存储范围
- 无符号存储范围起始数字从 数字零开始
- 有符号存储范围 可以存储负数
- 使用
unsigned
命令定义使用数值类型的无符号存储范围
- 整数类型不存储小数,如果数字有小数的话会把小数部分四舍五入后只保存整数部分
整数类型关键字 |
名称 |
有符号范围 |
无符号范围 |
tinyint |
微小整数 |
-128~127 |
0 ~ 255 |
smallint |
小整数 |
-32768~32767 |
0 ~ 65535 |
mediumint |
中整型 |
-223 ~223-1 |
0~224-1 |
int |
大整型 |
-231~ 231-1 |
0~232-1 |
bigint |
极大整型 |
-263~263-1 |
0 ~ 264-1 |
浮点类型关键字 |
名称 |
范围 |
范围大小 |
float |
单精度 |
8位精度(4字节) |
2554
|
double |
双精度 |
16位精度(8字节) |
2558
|
使用示例:
# 创建一个level为正正整数,money可以为小数的数据表
mysql> create table studb.t1(level tinyint unsigned,money double);
# 查看表头
mysql> desc studb.t1;
+-------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| level | tinyint(3) unsigned | YES | | NULL | |
| money | double | YES | | NULL | |
+-------+---------------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
四、常用枚举类型:
关键字 |
名称 |
说明 |
enum |
单选 |
只能选项范围内的任意一个 |
set |
多选 |
选项范围内的一个或多个 |
使用示例:
mysql> create table studb.t8(
姓名 char(10),
性别 enum("男","女","保密"),
爱好 set("帅哥","金钱","吃","睡")
) DEFAULT CHARSET utf8;
五、常用日期类型及存储范围:
- 日期时间类型:存储日期时间格式的数据
-
datetime
与timestamp
的区别:
datetime类型
存储范围大
timestamp类型
存储范围小
timestamp类型
不赋值的时候会使用系统时间自动赋值
datetime类型
不赋值时会使用null进行赋值
- 使用2位数给year的表头赋值也是可以的 但会自动补全4位数
01-69 之间的数字使用20补全4位数的年 2001~2069
70-99 之间的数字使用19补全4位数的年 1970~1999
类型 |
名称 |
范围 |
赋值格式 |
year |
年 |
1901~2155 |
例如:2022 |
date |
日期 |
0001-01-01 9999-12-31 |
例如:20220318 |
time |
时间 |
00:00:00 23:59:59 |
例如:091858 |
datetime |
日期时间 |
1000-01-01 00:00:00 9999-12-31 23:59:59 |
例如:20220819153819 |
timestamp |
日期时间 |
1970-01-01 00:00:00 2038-01-19 00:00:00 |
例如:20230109123823 |
使用示例:
# 创建带有日期格式的表
mysql> create table studb.t6(
姓名 char(10),
生日 date,
出生年份 year,
家庭聚会 datetime,
聚会地点 varchar(15),
上班时间 time
) default charset utf8;
# 查看表头
mysql> desc studb.t6;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 姓名 | char(10) | YES | | NULL | |
| 生日 | date | YES | | NULL | |
| 出生年份 | year(4) | YES | | NULL | |
| 家庭聚会 | datetime | YES | | NULL | |
| 聚会地点 | varchar(15) | YES | | NULL | |
| 上班时间 | time | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
# 插入记录
mysql> insert into studb.t6
values ("翠花",20211120,1990,20220101183000,"天坛校区",090000);