1.整型
表示整数,通常id设置成整型 int
存储范围(-2147483648,2147483647)
强调(整型后面的宽度限制根本不是存储宽度,限制的是显示宽度)
例子,这里我们通过四条代码来证明一下:
1.create table t1(id int(1));
insert into t1 values (111111);
通过查询语句可知:
mysql> select * from t1; +--------+ | id | +--------+ | 111111 | +--------+
2.create table t2(id int(10));
insert into t2 values (111111)
通过查询语句可知:
mysql> select * from t2; +--------+ | id | +--------+ | 111111 | +--------+
通过加约束可以知道其真实的显示情况:
3.create table t3(id int zerofill);
insert into t3 values (1);
通过查询语句可知:
mysql> select * from t3; +------------+ | id | +------------+ | 0000000001 | +------------+
4.create table t4(id int(5) zerofill);
insert into t4 values (1);
通过查询可知:
mysql> select * from t4; +-------+ | id | +-------+ | 00001 | +-------+
所以说创建整型后面不需加宽度
2.浮点型(小数)
浮点型分为单精度,双精度,以及准确精度。
数字个数最大值为255,小数最大值为30
单精度:
float(255,30)
双精度:
double(255,30)
准确精度(小数是最精确的)
decimal(60,30)
数字的个数最大值是65,小数最大值为30
下面我们创建3个表来展示下各个精度:
create table t5(x float(255,30));
create table t6(x double(255,30));
create table t7(x decimai(60,30));
insert into t5 values(1.1111111111111111111111111111111111111111111111);
通过查询可知:
mysql> select * from t5; +----------------------------------+ | x | +----------------------------------+ | 1.111111164093017600000000000000 | +----------------------------------+
insert into t6 values(1.1111111111111111111111111111111111111111111111);
通过查询可知:
mysql> select * from t6; +----------------------------------+ | x | +----------------------------------+ | 1.111111111111111200000000000000 | +----------------------------------+
insert into t7 values(1.1111111111111111111111111111111111111111111111);
通过查询可知:
mysql> select * from t7; +----------------------------------+ | x | +----------------------------------+ | 1.111111111111111111111111111111 | +----------------------------------+
3.日期类型:
year 1999
data 1999-11-11
time 08:30:00
datetime/timestamp 1999-11-11 08:30:00
我们来创建一个表演示下
create table t8( id int, name varchar(16), a_year year, b_date date, c_time time, reg_time datetime );
3.1插入当前时间:
insert into t8 values (1,'dahai,now(),now(),now(,)now());
通过查询可知:
mysql> select * from t8; +------+-------+--------+------------+------------+---------------------+ | id | name | a_year | b_date | class_time | reg_time | +------+-------+--------+------------+------------+---------------------+ | 1 | dahai | 2022 | 2022-01-23 | 12:57:32 | 2022-01-23 12:57:32 | +------+-------+--------+------------+------------+---------------------+
3.2自定义数字时间
insert into t8 values (1,'dahai',2000,20001111,083000,20001111083000);
通过查询可知:
mysql> select *from t8; +------+-------+--------+------------+------------+---------------------+ | id | name | a_year | b_date | class_time | reg_time | +------+-------+--------+------------+------------+---------------------+ | 1 | dahai | 2000 | 2000-11-11 | 08:30:00 | 2000-11-11 08:30:00 | +------+-------+--------+------------+------------+---------------------+
3.3自定义字符串时间:
insert into t8 values (1,'dahai','1999','2000-11-11','08:30:00','2000-11-11 08:30:00');
通过查询可知:
mysql> select *from student; +------+-------+--------+------------+------------+---------------------+ | id | name | a_year | b_date | class_time | reg_time | +------+-------+--------+------------+------------+---------------------+ | 1 | dahai | 1999 | 2000-11-11 | 08:30:00 | 2000-11-11 08:30:30 | +------+-------+--------+------------+------------+---------------------+
datetime/timestamp
在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,
但在某些情况下,会展现出他们各自的优劣。下面就来总结一下两种日期类型的区别。
1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。
2.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。
3.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP)。(8.0版本以后需要写约束)
例:
create table time(x timestamp defult current_timestamp)
insert into time vluses();
通过查询可知:
mysql> select *from time; +---------------------+ | x | +---------------------+ | 2022-01-23 13:13:20 | +---------------------+
4.字符类型
char:定长
char(5) varchar: 变长 varchar(5)
注意:这里宽度指限制字符的个数
相同点:宽度指的都是最大存储的字符个数,超过了都无法正常存储 不同点 char(5) 'm'---》'm ' 5个字符 varchar(5) 'm'----> 'm' 1个字符 (还有一个bytes是描述数据的)
char(5)
dahai|aa |xxx |f |
varchar(5)
1个bytes+dahai|1个bytes+aa|1个bytes+xxx|1个bytes+f|
varchar(5)大部分用它 ,大部分情况下存储的数据都是小于约束的宽度
5.这里多加两个知识点 枚举(enum)和集合(set)
enum枚举是多选一,像python布尔类型,
set集合是多选一或多
例:
create table student_table( id int, name,varchar(20), sex enum('man','woman'), hobbies set('read','play','music') );
插入数据
insert into student_table values(1,,'dahai','man','reay,music');
通过查询可知:
mysql> select *from student; +------+-------+------+------------+ | id | name | sex | hobbies | +------+-------+------+------------+ | 1 | dahai | man | read,music | +------+-------+------+------------+