Loading

MySQL——第一章节(MySQL中的数据类型)

前言:
之前简单的介绍一下什么是数据库和基本的常用数据库命令和DDL(MySQL数据定义语言),下面将介绍关于数据库非常重要的知识,叫做【数据类型】,不仅是在MySQL中存在数据类型,在多门编程语言中都存在【数据类型】这个名词。
那什么是数据类型呢?下面将会一一介绍MySQL中常用的数据类型和数据类型的关键字、范围等。

1、什么是数据类型

先来说一下地球上的各个国家的语言吧,在中国我们的语言叫做汉语,使用的字叫汉字,在美国有英语,俄罗斯有俄语,德国有德语,日本有日语,每个国家都有自己的语言和书写字体。
数据类型,就很相似各个国家的书写字体一样,每个类型都代表不同的书写方式(输入或者输出),但是也有很相似的同类型但是输入和输出有不一样的,比如美式英语和英式英语,简体汉字和繁体汉字,在一定角度看来,都是汉字,但是写出来就不一样。
在MySQL中支持多种数据类型,主要分为三类:
①数值型
②字符型
③日期/时间类型

1.1、数值型

数值型数据类型主要用于存储数值类的数据,不同的数据类型,提供不同的取值范围,需要存储的范围越大,所需要的存储空间就越大。
数值型:整数类型、浮点小数类型、定点小数类型

1.1.1、整数类型

		|	类型名称		|	占用空间(字节)  			|	范围							| 说明
		|	TINYINT		|	1  |	有符号型:-128~127、无符号型0 ~255					| 很小的整数
		|	SMALLINT	|	2  |	有符号:32768~32767、无符号0 ~65535				| 小的整数
		|	MEDIUMINT	|	3  |	有符号:-8388608~803388607、无符号0 ~16777215		| 中等大小的整数
		|	INT			|	4  |	- 2147483647~2147483647、无符号0 ~4294967295		| 普通的大小整数
		|	BIGINT		|	8  |	这个很长											| 大的整数

从表中可以看出,占用字节最少的是TINYINT类型,最多的是BIGINT类型,我们可以根据占用的字节数求出数据类型的范围,有符号的类型的范围是-(2的n-1次方)-1 ~ (2的n-1次方),无符号的类型范围是0~(2的n次方-1),n代表的就是(字节值*8bit),因为1个字节需要8 bit的存储空间。

1.1.2、练习

#先创建一个数据库
mysql> CREATE DATABASE IF NOT EXISTS data_test;
#进入数据库
mysql> use data_test;
Database changed
#创建数据表
mysql> CREATE TABLE IF NOT EXISTS test(id INT(4),name varchar(5));
Query OK, 0 rows affected (1.38 sec)

表中的id字段的数据类型为INT(4),这里的 4 是表示该整型类型的数据宽度,指定能够显示的数值的个数,数值的位数小于指定宽度时会由空格填充,大于的时候,只要值没有大于该数据类型的取值范围,数值还是会依然插入,而且可以显示。

#这里插入一条id数值宽度大于规定的数据类型宽度
mysql> INSERT INTO test VALUES(10000,"KING");
Query OK, 1 row affected (0.11 sec)
#查看数据表数据(数值依然可以显示)
mysql> SELECT * FROM test;
+-------+------+
| id    | name |
+-------+------+
| 10000 | KING |
+-------+------+
1 row in set (0.13 sec)

如果创建数据表时没有指定宽度,则系统会为每个类型指定默认的宽度值。

#创建新表,每个字段使用不同的整数类型,不设置宽度值
mysql> CREATE TABLE test_2(x TINYINT,y SMALLINT,z MEDIUMINT,m INT,n BIGINT);
Query OK, 0 rows affected (0.30 sec)
#查看表结构(DESC 命令用于查看数据表的结构)
mysql> DESC test_2;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| x     | tinyint(4)   | YES  |     | NULL    |       |
| y     | smallint(6)  | YES  |     | NULL    |       |
| z     | mediumint(9) | YES  |     | NULL    |       |
| m     | int(11)      | YES  |     | NULL    |       |
| n     | bigint(20)   | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
5 rows in set (0.03 sec)

在我们创建数据表时没有添加显示宽度时,系统添加了不同的宽度值,保证每个数据类型都可以取到取值范围内的所有值,整数类型的默认显示宽度与其有符号数的最小值的宽度相同(-号也占用一个宽度)。
注:显示宽度只用于显示数据插入的宽度和取值范围没有关系,也不能限制占用空间。

1.2、浮点型小数和定点型小数

生活中有整数,必然少不了小数,MySQL中用浮点数和定点数来表示小数。
浮点类型:
①FLOAT:单精度浮点类型
②DOUBLE:双精度浮点类型

定点类型:
DECIMAL(M,D):定点小数类型(压缩的“严格”定点数)
注:浮点数和定点数都可以用(M,N)表示,M表示总共的位数,D表示小数点后的位数。

1.2.1、练习

#创建新表,设置数据类型为浮点型和定点型,M=5,D=2
mysql> CREATE TABLE float_test(x float(5,2),y DOUBLE(5,2),z DECIMAL(5,2));
Query OK, 0 rows affected (0.30 sec)
#插入数据
mysql> INSERT INTO float_test VALUES(123.45,123.45,123.45);
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO float_test VALUES(123.456,123.456,123.456);
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO float_test VALUES(123.4,123.4,123.4);
Query OK, 1 row affected (0.14 sec)
#因为总位数是5位数,总位数超出后,系统报错,说插入x,y,z值的宽度超出设定的总位数
mysql> INSERT INTO float_test VALUES(123456.456,123456.456,123456.456);
1264 - Out of range value for column 'x' at row 1
mysql> INSERT INTO float_test VALUES(123.45,1234.456,123456.456);
1264 - Out of range value for column 'y' at row 1
mysql> INSERT INTO float_test VALUES(123.45,123.45,123456.456);
1264 - Out of range value for column 'z' at row 1
#查看正常插入的数据
mysql> SELECT * FROM float_test;
+--------+--------+--------+
| x      | y      | z      |
+--------+--------+--------+
| 123.45 | 123.45 | 123.45 |
| 123.46 | 123.46 | 123.46 |
| 123.40 | 123.40 | 123.40 |
+--------+--------+--------+
3 rows in set (0.04 sec)

查看插入的数据可以发现,当超过设定的总位数的数在小数点后面,系统自动四舍五入后显示,当位数不足设定的总位数时,系统自动补0;

#创建新表,设置浮点类型和定点类型不加精度和标度,查看其默认值
mysql> CREATE TABLE test_float(x FLOAT,y DOUBLE,z DECIMAL);
Query OK, 0 rows affected (0.28 sec)
#查看表结构
mysql> DESC test_float;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| x     | float         | YES  |     | NULL    |       |
| y     | double        | YES  |     | NULL    |       |
| z     | decimal(10,0) | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.02 sec)

FLOAT和FOUBLE在不指定精度时,默认会采用实际精度(由计算机硬件和操作系统决定),DECIMAL不指定精度则默认为(10,0);
注:定点数以字符串的形式存储,在对精度要求较高的场景(如货币、科学数据等)使用DECIMAL的类型比较好

总结:在学习数据类型的时候难免枯燥无味,种类繁多,这还只是数据类型这个大模块其中的一点内容,关于学习MySQL的知识,我建议多练,练熟之后再继续往下进行,边学边练,数据类型还没写完,下次写日期和时间类型。谢谢观看!如果有什么建议欢迎私我。

posted @ 2022-08-13 10:38  knsec  阅读(45)  评论(0编辑  收藏  举报