当前位置:网站首页>MySQL——第一章节(MySQL中的数据类型)
MySQL——第一章节(MySQL中的数据类型)
2022-04-23 06:32:00 【King_nul】
前言:
之前简单的介绍一下什么是数据库和基本的常用数据库命令和DDL(MySQL数据定义语言),下面将介绍关于数据库非常重要的知识,叫做【数据类型】,不仅是在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的知识,我建议多练,练熟之后再继续往下进行,边学边练,数据类型还没写完,下次写日期和时间类型。谢谢观看!如果有什么建议欢迎私我。
版权声明
本文为[King_nul]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_45925514/article/details/114406604
边栏推荐
猜你喜欢
Internal network security attack and defense: a practical guide to penetration testing (5): analysis and defense of horizontal movement in the domain
庄懂的TA笔记(六)<FakeEnvReflect && 生锈,锈迹效果>
Houdini地形与流体解算(模拟泥石流)
CTF-MISC总结
Ctf-misc learning from start to give up
STO With Billing 跨公司库存转储退货
Robust and Efficient Quadrotor Trajectory Generation for Fast Autonomous Flight
Essays (updated from time to time)
The projection vector of a vector to a plane
三分钟教你用Houdini流体>>解算粒子流体水滴
随机推荐
VBA appelle SAP RFC pour réaliser la lecture et l'écriture des données
Introduction to sap query enhanced development
linux下mysql数据库备份与恢复(全量+增量)
面试学习路线
第七章 资产减值
About USB flash drive data prompt raw, need to format, data recovery notes
Redis -- why is the string length of string emstr the upper limit of 44 bytes?
TA notes of Zhuang understand (VII) < Lambert + Phong + shadow + 3evcolor + Ao >
KCD_EXCEL_OLE_TO_INT_CONVERT报错SY-subrc = 2
KCD_ EXCEL_ OLE_ TO_ INT_ Convert reports an error sy subrc = 2
Houdini地形与流体解算(模拟泥石流)
Analysis of Nacos source code
upload-labs 靶场练习
Intranet penetration series: icmpsh of Intranet tunnel
Zhuang understand's TA notes (VI) < fakeenvreflect & rust, rust effect >
C problem of marking the position of polygons surrounded by multiple rectangles
Read and modify the JSON file under the resource folder
Intranet security attack and defense: a practical guide to penetration testing (6): domain controller security
Ribbon启动流程
国基北盛-openstack-容器云-环境搭建