当前位置:   article > 正文

MySQL数据库类型详解

MySQL数据库类型详解


在MySQL数据库管理系统中,可以通过存储引擎来决定表的类型。同时,MySQL数据库管理系统也提供了数据类型决定表存储数据的类型。

1.整型

1)作用
用于存储用户的年龄、游戏的Level、经验值等整数类型。

2)分类
tinyint smallint mediumint int bigint(极小,小,中,一般,大)

3)详解
常用为int,这五种表达一样,只是范围不同,类型后面小括号内的数字是显示宽度,其不能限制插入数值的大小。

4)范围

tinyint:-128~127
smallint:-32768~32767
mediumint:-8388608~8388607
int:-2147483648~2147483647
brigint:-9,223,372,036,854,775,808~9,223,372,036,854,7

5)小结

  • 当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。
  • 在 MySQL 中,int 数据类型是主要的整数数据类型。
  • int(n)里的n是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度。
  • 整形的宽度仅为显示宽度,不是限制。因此建议整形无须指定宽度。

6)示例

mysql>create table a.t1(age int(10));//在a库下创建t1表格,设置数据类型
mysql> insert into t1(age) values(1000);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1(age) values(2147483647);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1(age) values(2147483648);    //超出范围,报错
ERROR 1264 (22003): Out of range value for column 'age' at row 1
mysql> select * from t1;			//查询,可看到显示宽度最长为10
+------------+
| age        |
+------------+
|        100 |
|       1000 |
| 2147483647 |
+------------+
3 rows in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2.浮点数类型

1)作用
用于存储一些身高体重等带有小数的数据。

2)格式
float(5.3) //一共5位,小数保留3位(四舍五入)

3)示例

mysql> create table bb(weight float(4,2));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into bb values(333.8888);			//报错,小数点前超过2位
ERROR 1264 (22003): Out of range value for column 'weight' at row 1
mysql> insert into bb values(33.8888);
Query OK, 1 row affected (0.00 sec)
mysql> insert into bb values(99.9988);			//报错,四舍五入后不符合
ERROR 1264 (22003): Out of range value for column 'weight' at row 1
mysql> select * from bb;
+--------+
| weight |
+--------+
|  33.89 |
+--------+
1 row in set (0.01 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3.字符串类型

1)作用
用于存储用户的姓名、爱好、电话,邮箱地址,发布的文章等 。

2)类型
char varchar

3)区别

1>char
表示定长字符串,长度是固定的;如果插入数据的长度小于char的固定长度时,则用空格填充;因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间。
2>varchar
varchar表示可变长字符串,长度是可变的;插入的数据是多长,就按照多长来存储;varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间。
3>小结
结合性能角度(char更快),节省磁盘空间角度(varchar更小),具体情况还需具体来设计数据库才是妥当的做法。char(10):根据10,占10个。列的长度固定为创建表时声明的长度:0 ~ 255;varchar(10):根据实际字符串长度占空间,最多10个,列中的值为可变长字符串,长度:0 ~ 65535。

4)示例

mysql> create table t8(c char(5),v varchar(12));
Query OK, 0 rows affected (0.42 sec)
mysql> insert into t8 values('abcde','abcdef');
Query OK, 1 row affected (0.38 sec)
mysql> insert into t8 values('abc','abcdef');  		//可以少于规定长度。
Query OK, 1 row affected (0.05 sec)
mysql> insert into t8 values('abc777','abcdef7'); 	//不能大于规定的长度。
ERROR 1406 (22001): Data too long for column 'c' at row 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

5)总结

1>经常变化的字段用varchar
2>知道固定长度的用char
3>超过255字符的只能用varchar或者text
4>能用varchar的地方不用text(文本格式)

4.枚举类型

1)作用
从特定的范围里选定(多选一),有限制的时候用枚举。

2)示例

mysql> create table t10(name enum('m','w'));
mysql> insert into t10(sex) values('m');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t10 values('w');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t10 values('n');     		//n不在枚举范围里,出错
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

5.日期类型

1)作用
用于存储用户的注册时间,文章的发布时间,文章的更新时间,员工的入职时间等。

2)种类
year、date、time、datetime、timestamp、timestamp
年,日期,时间,日期加时间,时间戳(从格林时间到现在的秒数)

注意:

=插入年份时,尽量使用4位值
=插入两位年份时,<=69,以20开头,比如65, 结果2065
=70,以19开头,比如82,结果1982

3)示例

mysql> create table test_time(d date,t time,dt datetime);
Query OK, 0 rows affected (0.03 sec)+
mysql> desc test_time;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| d     | date     | YES  |     | NULL    |       |
| t     | time     | YES  |     | NULL    |       |
| dt    | datetime | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> insert into test_time values(now(),now(),now());
Query OK, 1 row affected, 1 warning (0.02 sec)
mysql> select * from test_time;
+------------+----------+---------------------+
| d          | t        | dt                  |
+------------+----------+---------------------+
| 2019-08-23 | 00:26:29 | 2019-08-23 00:26:29 |
+------------+----------+---------------------+
1 row in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

测试年:

mysql> create table t3(born_year year);
Query OK, 0 rows affected (0.40 sec)

mysql> desc t3;
+-----------+---------+------+-----+---------+-------+
| Field     | Type    | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| born_year | year(4) | YES  |     | NULL    |       |
+-----------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
mysql> insert into t3 values (12),(80);
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> select * from t3;
+-----------+
| born_year |
+-----------+
|      2012 |
|      1980 |
+-----------+
2 rows in set (0.00 sec)
mysql> insert into t3 values (2019),(81);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> select * from t3;
+-----------+
| born_year |
+-----------+
|      2012 |
|      1980 |
|      2019 |
|      1981 |
+-----------+
4 rows in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/904490
推荐阅读
相关标签
  

闽ICP备14008679号