# 12.6.1 算术运算符

表 12.9 算术运算符

姓名 描述
%,模组 模运算符
* 乘法运算符
+ 加法运算符
- 减号运算符
- 更改参数的符号
/ 分区运算符
分区 整数除法

可以使用常用的算术运算符。结果根据以下规则确定:

  • 如果是-,+, 和*, 结果计算为大整数如果两个操作数都是整数,则为(64 位)精度。

  • 如果两个操作数都是整数并且其中任何一个都是无符号的,则结果是一个无符号整数。对于减法,如果NO_UNSIGNED_SUBTRACTION启用 SQL 模式,即使任何操作数未签名,结果也已签名。

  • 如果 a 的任何操作数+,-,/,*,%是一个实数或字符串值,结果的精度是具有最大精度的操作数的精度。

  • 在进行的除法中/,当使用两个精确值操作数时,结果的比例是第一个操作数的比例加上第一个操作数的值div_precision_increment系统变量(默认为 4)。例如,表达式的结果5.05 / 0.014小数点后六位 (360.714286)。

    这些规则适用于每个操作,因此嵌套计算意味着每个组件的精度。因此,(14620 / 9432456) / (24250 / 9432456), 首先解决(0.0014) / (0.0026), 最终结果有 8 位小数 (0.60288653)。

    由于这些规则及其应用方式,应注意确保计算的组件和子组件使用适当的精度级别。看第 12.11 节,“转换函数和运算符”.

    有关在数值表达式求值中处理溢出的信息,请参阅第 11.1.7 节,“超出范围和溢出处理”.

    算术运算符适用于数字。对于其他类型的值,可以使用替代操作。例如,要添加日期值,请使用DATE_ADD();看第 12.7 节,“日期和时间函数”.

  • +

    添加:

    mysql> SELECT 3+5;
            -> 8
    
  • -

    减法:

    mysql> SELECT 3-5;
            -> -2
    
  • -

    一元减号。此运算符更改操作数的符号。

    mysql> SELECT - 2;
            -> -2
    

    笔记

    如果此运算符与大整数,返回值也是大整数.这意味着您应该避免使用-在可能具有 -2 值的整数上63.

  • *

    乘法:

    mysql> SELECT 3*5;
            -> 15
    mysql> SELECT 18014398509481984*18014398509481984.0;
            -> 324518553658426726783156020576256.0
    mysql> SELECT 18014398509481984*18014398509481984;
            -> out-of-range error
    

    最后一个表达式产生错误,因为整数乘法的结果超出了 64 位范围大整数计算。(看第 11.1 节,“数值数据类型”.)

  • /

    分配:

    mysql> SELECT 3/5;
            -> 0.60
    

    除以零产生一个空值结果:

    mysql> SELECT 102/(1-1);
            -> NULL
    

    除法计算如下大整数仅当在结果转换为整数的上下文中执行算术运算。

  • 分区

    整数除法。从除法结果中丢弃小数点右侧的任何小数部分。

    如果任一操作数具有非整数类型,则操作数将转换为十进制并使用十进制将结果转换为之前的算术大整数.如果结果超过大整数范围内,发生错误。

    mysql> SELECT 5 DIV 2, -5 DIV 2, 5 DIV -2, -5 DIV -2;
            -> 2, -2, -2, 2
    
  • *ñ* % **,*ñ* 模组 **

    模运算。返回剩余的*ñ除以*.有关详细信息,请参阅模组()作用于第 12.6.2 节,“数学函数”.