MySQL数据类型--数字型

官网连接:https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html

整数类型(精确值) - INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT
定点类型(精确值) - DECIMAL,NUMERIC
比特值类型 - BIT

算数运算符

名称描述
DIV整数除法,从除法中丢弃会导致小数点右边的任何小数部分
/除法
-减号运算符
%MOD 模数运算符
+加法运算符
*乘法运算符
-更改参数的符号

如:

mysql> SELECT 3+5;  --加法
        -> 8
mysql> SELECT 3-5;  --减法
        -> -2
mysql> SELECT - 2;   --一元减,此运算符更改操作数的符号。
        -> -2
mysql> SELECT 3/5;
        -> 0.60  --除法
mysql> SELECT 102/(1-1);  --除数为0,值为NULL
        -> NULL

数学函数

名称描述
ABS()返回绝对值
ACOS()返回反余弦(范围-1,1,其他值为NULL)
ASIN()返回圆弧正弦
ATAN()返回反正切
ATAN2(), ATAN()返回两个参数的反正切
CEIL()返回不小于参数的最小整数值
CEILING()返回不小于参数的最小整数值
FLOOR()返回不大于参数的最大整数值
CONV()转换不同数字基数之间的数字
COS()返回余弦
COT()返回余切
CRC32()计算循环冗余校验值
DEGREES()将弧度转换为度数
EXP()返回e的值(自然对数的基数)提升到的幂 X。此函数的反函数是LOG()(仅使用单个参数)或LN()。
LN()返回参数的自然对数
LOG()返回第一个参数的自然对数
LOG10()返回参数的以10为底的对数
LOG2()返回参数的base-2对数
MOD()模运算,返回余数
PI()返回pi的值
POW(x,y)返回x的y次幂
POWER(x,y)同POWER(x,y)
RADIANS()返回参数转换为弧度
RAND()返回随机浮点值
ROUND()四舍五入
SIGN()返回参数的符号,整数为1,负数为-1,0为0
SIN()返回参数的正弦值
SQRT()返回参数的平方根
TAN()返回参数的正切值
TRUNCATE()截断到指定的小数位数
--rand()使用
mysql> CREATE TABLE t (i INT);
Query OK, 0 rows affected (0.42 sec)

mysql> INSERT INTO t VALUES(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT i, RAND() FROM t;
+------+------------------+
| i    | RAND()           |
+------+------------------+
|    1 | 0.61914388706828 |
|    2 | 0.93845168309142 |
|    3 | 0.83482678498591 |
+------+------------------+
3 rows in set (0.00 sec)

mysql> SELECT i, RAND(3) FROM t;
+------+------------------+
| i    | RAND(3)          |
+------+------------------+
|    1 | 0.90576975597606 |
|    2 | 0.37307905813035 |
|    3 | 0.14808605345719 |
+------+------------------+
3 rows in set (0.00 sec)

RAND()在 WHERE子句中计算每一行(从一个表中选择时)或行组合(从多表连接中选择时)。因此,出于优化程序的目的,RAND()它不是常量值,不能用于索引优化。

**RAND() 在ORDER BY or GROUP BY子句中 使用值具有值的列可能会产生意外结果,**因为对于任一子句,RAND() 可以对同一行多次计算表达式,每次返回不同的结果。如果目标是以随机顺序检索行,则可以使用如下语句:

SELECT * FROM tbl_name ORDER BY RAND();

从一组行中选择一个随机样本,结合 ORDER BY RAND()有 LIMIT:

SELECT * FROM table1, table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000;

RAND()并不意味着是一个完美的随机发生器。这是一种快速生成按需随机数的方法,可以在同一MySQL版本的平台之间移植。

此函数对于基于语句的复制不安全。如果在binlog_format设置 为时使用此功能,则会记录警告 STATEMENT。

--round()使用
mysql> SELECT ROUND(-1.23);
        -> -1
mysql> SELECT ROUND(-1.58);
        -> -2
mysql> SELECT ROUND(1.58);
        -> 2
mysql> SELECT ROUND(1.298, 1);
        -> 1.3
mysql> SELECT ROUND(1.298, 0);
        -> 1
mysql> SELECT ROUND(23.298, -1);
        -> 20

TRUNCATE(X,D)

返回数字X,截断为D小数位。如果 D是0,则结果没有小数点或小数部分。 D可以为负,导致 D值的小数点左边的数字X变为零。

mysql> SELECT TRUNCATE(1.223,1);
        -> 1.2
mysql> SELECT TRUNCATE(1.999,1);
        -> 1.9
mysql> SELECT TRUNCATE(1.999,0);
        -> 1
mysql> SELECT TRUNCATE(-1.999,1);
        -> -1.9
mysql> SELECT TRUNCATE(122,-2);
       -> 100
mysql> SELECT TRUNCATE(10.28*100,0);
       -> 1028

所有数字都向零舍入。

概述

As of MySQL 8.0.17, the display width attribute is deprecated for integer data types and will be removed in a future MySQL version.
从8.0.17开始,将不推荐对整数类型使用display width属性,以后的版本将会删除此属性

If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED(无符号) attribute to the column.
对于Zerofill属性的数值型列,MySQL会自动为此列添加无符号属性

As of MySQL 8.0.17, the ZEROFILL attribute is deprecated for numeric data types and will be removed in a future MySQL version. Consider using an alternative means of producing the effect of this attribute. For example, applications could use the LPAD() function to zero-pad numbers up to the desired width, or they could store the formatted numbers in CHAR columns.
从8.0.17开始,不再推荐对数值型数据使用zerofill属性,并再以后的版本中删除,考虑使用其他方式实现此功能。如:使用LPAD()进行左侧零填充,或者将格式过的数据存储到char类型中

Numeric data types that permit the UNSIGNED attribute also permit SIGNED. However, these data types are signed by default, so the SIGNED attribute has no effect.
数值型允许设置成USIGNED(无符号)SIGNED和(带符号)属性,默认为SIGNED

As of MySQL 8.0.17, the UNSIGNED attribute is deprecated for columns of type FLOAT, DOUBLE, and DECIMAL (and any synonyms) and will be removed in a future MySQL version. Consider using a simple CHECK constraint instead for such columns.
从8.0.17版本开始,UNSIGNED属性对于FLOAT、DOUBLE、DECIMAL(还有任何同义词)将不再被推荐使用,后期版本会考虑删除。考虑使用简单校验约束方式代替

SERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.
序列等价于BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE

SERIAL(序列) DEFAULT VALUE in the definition of an integer column is an alias for NOT NULL AUTO_INCREMENT UNIQUE(非空自增长唯一).
对于整数型序列默认为 NOT NULL AUTO_INCREMENT UNIQUE

BIT[(M)]

位值类型。M表示每个值的位数,从1到64.如果M省略,则默认值为1 。

TINYINT[(M)] [UNSIGNED] [ZEROFILL]

一个非常小的整数。签署的范围是 -128到127。无符号的范围是0到 255。

BOOL, BOOLEAN

这些类型是同义词 TINYINT(1)。值为零被视为false。非零值被认为是真的:
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

一个小整数。签署的范围是 -32768到32767。无符号的范围是0到 65535。

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]

一个中等大小的整数。签署的范围是 -8388608到8388607。无符号的范围是0到 16777215。

INT[(M)] [UNSIGNED] [ZEROFILL]

正常大小的整数。签署的范围是 -2147483648到 2147483647。无符号的范围是 0到4294967295。

INTEGER[(M)] [UNSIGNED] [ZEROFILL]

此类型是其同义词 INT。

BIGINT[(M)] [UNSIGNED] [ZEROFILL]

一个大整数。签署的范围是 -9223372036854775808到 9223372036854775807。无符号的范围是0到 18446744073709551615。

关于BIGINT列,您应该注意的一些事项 :

所有算术都是使用有符号 BIGINT或 DOUBLE值完成的,因此9223372036854775807除了位函数之外,不应使用大于(63位)的无符号大整数!如果这样做,结果中的一些最后数字可能是错误的,因为在将BIGINT值转换为a 时出现舍入错误 DOUBLE。

MySQL可以BIGINT 在以下情况下处理:

使用整数在BIGINT列中存储大的无符号值时。

在 或中 ,where 指的是列。 MIN(col_name)MAX(col_name)col_nameBIGINT

当使用操作符(+, -, *,等等),其中两个操作数都是整数。

BIGINT通过使用字符串存储它, 您始终可以在列中存储精确的整数值 。在这种情况下,MySQL执行字符串到数字的转换,不涉及中间双精度表示。

的-, +和 * 运营商使用BIGINT 算术当两个操作数是整数值。这意味着如果将两个大整数(或返回整数的函数的结果)相乘,则当结果大于时,可能会得到意外结果 9223372036854775807。

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

打包的“ 精确 ”定点数。 M是总位数(精度),D是小数点后的位数(刻度)。小数点和(对于负数) -符号不计入 M。如果 D为0,则值没有小数点或小数部分。最大位数(M)为 DECIMAL65.最大支持小数数(D)为30.如果D省略,则默认值为0.如果M省略,则默认值为10。

UNSIGNED,如果指定,则禁止否定值。从MySQL 8.0.17开始,UNSIGNED对于类型DECIMAL(和任何同义词)的列,不推荐使用该属性,并且将在以后的MySQL版本中删除该 属性。考虑使用简单CHECK约束代替此类列。

所有+, -, *, /带DECIMAL列的基本计算() 都以65位的精度完成。

DEC[(M[,D])] [UNSIGNED] [ZEROFILL], , NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]

这些类型是同义词 DECIMAL。该 FIXED同义词可用于与其他数据库系统兼容。

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

一个小的(单精度)浮点数。允许值是-3.402823466E+38 对-1.175494351E-38, 0以及1.175494351E-38 对3.402823466E+38。这些是基于IEEE标准的理论限制。实际范围可能略小,具体取决于您的硬件或操作系统。

M是总位数,D是小数点后面的位数。如果M 和D省略,则将值存储到硬件允许的限制。单精度浮点数精确到大约7位小数。

FLOAT(M,D) 是一个非标准的MySQL扩展。从MySQL 8.0.17开始,不推荐使用这种语法,并且在将来的MySQL版本中将删除对它的支持。

使用FLOAT可能会给你一些意想不到的问题,因为MySQL中的所有计算都是以双精度完成的。请参见 第B.4.4.7节“解决无匹配行的问题”。

FLOAT(p) [UNSIGNED] [ZEROFILL]

一个浮点数。p 表示以位为单位的精度,但MySQL仅使用此值来确定是使用 FLOAT还是 DOUBLE用于生成的数据类型。如果p是0到24,则数据类型变为FLOATno M或 Dvalues。如果 p是25到53,则数据类型变为DOUBLEno M或D values。结果列的范围与本节前面介绍的单精度FLOAT或双精度DOUBLE数据类型的范围相同。

FLOAT§ 语法是为ODBC兼容性提供的。

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

正常大小(双精度)浮点数。允许值是 -1.7976931348623157E+308对 -2.2250738585072014E-308, 0以及 2.2250738585072014E-308对 1.7976931348623157E+308。这些是基于IEEE标准的理论限制。实际范围可能略小,具体取决于您的硬件或操作系统。

M是总位数,D是小数点后面的位数。如果M 和D省略,则将值存储到硬件允许的限制。双精度浮点数精确到大约15位小数。

DOUBLE(M,D) 是一个非标准的MySQL扩展。从MySQL 8.0.17开始,不推荐使用这种语法,并且在将来的MySQL版本中将删除对它的支持。

DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL]

这些类型是同义词 DOUBLE。例外:如果REAL_AS_FLOAT启用了 SQL模式,REAL则是同义词FLOAT而不是 DOUBLE。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值