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 |
+------+-------+------+------------+