MySQL运维实战(4.9) SQL_MODE之NO_UNSIGNED_SUBTRACTION

作者:俊达
在MySQL中,unsigned关键字用于声明一个字段只包含非负数(零和正整数),而不包含负数。当使用unsigned字段进行运算时,如果结果为负数,MySQL默认会产生错误,因为无法表示负数。
NO_UNSIGNED_SUBTRACTION是SQL是一个SQL MODE,它会修改MySQL的行为,允许unsigned类型的字段参与减法运算,并允许结果为负数,而不会报错。
下面是一个示例:

mysql> create table t1(a tinyint unsigned);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t1 values(100);
Query OK, 1 row affected (0.01 sec)

mysql> select a-1 from t1;
+------+
| a-1  |
+------+
|   99 |
+------+
1 row in set (0.00 sec)
-- 默认情况下,unsigned数字参与到减法运算中,如果结果为负数,SQL会报错。
mysql> set sql_mode='';
Query OK, 0 rows affected (0.00 sec)

mysql> select 1-a from t1;
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(1 - `test_sqlmode`.`t1`.`a`)'

在SQL_MODE中加入NO_UNSIGNED_SUBTRACTION后,运算结果可以为负数。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

你可能感兴趣的:(MySQL运维实战,mysql,运维,sql)