今日总结关于mysql学习中的数据类型随笔,关于数据类型我们都不陌生,将数据按类型划分不仅有利于我们查询,从系统的角度来看,按类型划分字段更能充分的利用有限的存储空间资源。在mysql中,数据类型分为三类:
1)数值类型
2)字符串类型
3)时间日期类型
今天先记录关于mysql数据类型之一的数值型,下面我们来一起看看数值类型到底是什么样子
数值型特点:
1. 都是数值
2. 可分为整数型和小数型
整数型:
用来存放整形数据(在SQL中因为要考虑节省磁盘空间,所以整型细分为5类)
tinyint:迷你整型,使用一个字节存储,(常用) smallint:小整型,使用两个字节存储, mediumint:中整型,使用三个字节存储 int:标准整型,使用4个字节。 (常用) bigint:大整型,使用8个字节存储

创建整型表:
mysql> show create table my_int;
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| my_int | CREATE TABLE `my_int` (
`int_1` tinyint(4) DEFAULT NULL,
`int_2` smallint(6) DEFAULT NULL,
`int_4` int(11) DEFAULT NULL,
`int_5` bigint(20) DEFAULT NULL,
`int_3` tinyint(3) unsigned DEFAULT NULL,
`int_6` tinyint(9) unsigned DEFAULT NULL,
`int_7` tinyint(2) unsigned zerofill DEFAULT NULL,
`int_8` tinyint(9) unsigned zerofill DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql> select * from my_int;
+-------+-------+-------+---------+-------+-------+-------+-----------+
| int_1 | int_2 | int_4 | int_5 | int_3 | int_6 | int_7 | int_8 |
+-------+-------+-------+---------+-------+-------+-------+-----------+
| 100 | 100 | 100 | 1000 | NULL | NULL | NULL | NULL |
| 127 | 1000 | 10000 | 1000000 | 255 | NULL | NULL | NULL |
| 127 | 0 | 0 | 0 | 255 | 255 | NULL | NULL |
| 1 | 1 | 1 | 1 | 1 | 1 | 01 | NULL |
| 1 | 1 | 1 | 1 | 1 | 1 | 01 | 000000001 |
+-------+-------+-------+---------+-------+-------+-------+-----------+
5 rows in set (0.00 sec)
注:
- 在整型字段中插入数据时只能插入数值范围内的整型数据。
- SQL中的数值类型全部都默认有符号:分正负;
- 有时候需要使用无符号数据:给出数据类型限定:数据类型 unsigned;(int unsigned)(无符号,从0开始)
- 显示宽度:无特别含义,仅告诉用户可以显示的形式,用户可控制但不会改变数据本身的大小。其意义在于当数据不够显示宽度的时候自动让数据变成对应的显示宽度,通常需要一个前导 0 来增加宽度,不改变值大小 ;zerofill(零填充)会导致数值自动变成无符号,保证数据格式 (alter table 表名 add 字段名 数据类型(显示宽度) zerofill;)
小数型:
带有小数点或者超出整数的数值类型 (SQL中将小数型分为两种)
浮点型:小数点浮动,精度有限,会丢失精度(会四舍五入)
定点型:小数点固定,精度固定,不丢失精度(不会四舍五入)
浮点型:
float:单精度,4个字节存储,精度范围大概7位左右
double:双精度,8个字节存储,精度范围大概15位左右
创建浮点数表:
mysql> show create table my_float;
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
| my_float | CREATE TABLE `my_float` (
`f1` float DEFAULT NULL,
`f2` float(10,2) DEFAULT NULL,
`f3` float(6,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql> select * from my_float;
+-------------+--------------+---------+
| f1 | f2 | f3 |
+-------------+--------------+---------+
| 1000.1 | 1000.10 | 1000.10 |
| 10000000000 | 100000000.00 | 9999.99 |
| 3e38 | 30100000.00 | 1234.56 |
| 1234570000 | 12345679.00 | 1234.56 |
| 123456 | 1234.12 | 123.87 |
+-------------+--------------+---------+
5 rows in set (0.00 sec)
(float:表示没有小数部分;float(M,D):M代表总长度,D代表小数部分长度,整数部分长度为 M-D )
- 插入数据:可直接是小数,也可以科学技术法
- 浮点数据的插入:整型部分不能超出长度,小数部分超出的长度会被系统自动四舍五入
- 浮点数超出精度范围一定会进行四舍五入,若因为系统进位导致整数部分超出指定范围则成立。(可理解为最终解释权归mysql所有)
定点型:
绝对的保证整数部分不会被四舍五入丢失精度,小数部分有可能
创建定点数表;以浮点数作为对比
mysql> show create table my_decimal;
+-----------+------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------+------------------------------------------------------------------------------------------------------------------------------------+
| my_decimal | CREATE TABLE `my_decimal` (
`d1` decimal(10,0) DEFAULT NULL,
`f2` float(10,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-----------+----------------------------------------------------------------------------------------------------------------------------------
mysql> insert into my_decimal values(12345.34,12345.34),(1234.45,1234.45);
Query OK, 2 rows affected, 2 warnings (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 2
mysql> select * from my_double;
+-----------+--------------+
| d1 | f2 |
+-----------+--------------+
| 12345 | 12345.34 |
| 1234 | 1234.45 |
+-----------+--------------+
2 rows in set (0.00 sec)
定点型插入数据时:定点数整数部分一定不能超出长度(进位也不行),小数部分随意超出(系统忽视)
okk,这就是今日份对mysql数字类型的一个简单介绍,如有纰漏,请各位前辈多多指教!!!