整型
- TINYINT
- SMALLINT
- MEDIUMINT
- INT/INTEGER
- BIGINT
类型(宽度):指的是查询的显示宽度,而非存储宽度,存储宽度随类型而定,不写宽度的时候,默认是类型的最大值显示的宽度值
时间类型
案例
create table student (
id int,
name char(6),
born_year year,
birth_date date,
class_time time,
reg_time datetime
);
# 会默认以其对应的格式内容插入
insert into student values(1, 'egon', now(), now(), now(), now());
datetime和timestamp的区别
- datatime的日期范围是1001 - 9999年,timestamp的时间爱你范围是1970 - 2038年
- datetime占据8个字节,timestamp占据4个字节
- datetime存储时间与时区无关,timestamp存储时间与时区有关
字符类型
- char:定长
- varchar:变长
案例
# 宽度指的是字符的个数
create table t1(name char(5));
create table t2 (name varchar(5));
insert into t1 values('李杰'); # '李杰 ' 补全到3个空格到5个宽度
insert into t2 values('李杰'); # '李杰' 有多少存多少
# 查看存储的长度
select char_length(name) from t1; # 2 mysql char取的时候会自动去除空格
select char_length(name) from t2; # 存的是2个,取的也是2个
修改mysql的模式,来查询char的存储长度
set sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
mysql查询的时候,char补全空格的,查询的会自动去除空格进行查询
select name from t1 where name = '李杰'; # 有空格还是无空格的都能查
# 末尾去空格查询只适用等号,不适用like
select name from t1 where name like '李杰';
末尾去空格查询只适用等号,不适用like
varchar 还会用一个字节存储数据的长度
length: 查看字节数
char_length: 查看字符数
- char填充空格来满足固定长度,但是在查询时会很不要脸的删除尾部的空格(装作好像自己没有浪费过空间一样),然后更改
sql_mode
让其显出原形。- 存取数据很快
- 浪费空间
- varchar
- 更加节省空间,存数据更精准
- 存取数据比较慢,得先获取头
大部分场景使用char,存储空间不是一种限制了。建表时尽量的把定长的数据往前放,变长的数据往后放。
枚举类型和集合类型
字段的值只能在给定的范围中选择,如:单选框,多选框
enum
单选,只能在给定的范围内选一个值,如:性别
set
多选,在给定的范围内可以选择一个或多个的值 如:爱好
案例
create table consumer (
id int,
name char(16),
sex enum("male", "female", "other"),
level enum('vip1', 'vip2', 'vip3'),
hobbies set('play', 'music', 'read', 'run')
);
insert into consumer values (1, 'egon', 'male', 'vip1', 'music,read')
set插入数值是,引号内多个值以逗号隔开
如果传入不在范围之内的,插入之后查询结果为空
额外补充
加入命令行的模式下,输入的sql语句打错了或者最后一句输入了一个逗号而不是分号;
可以输入 c
终止运行