MySQL运维实战(4.9) SQL_MODE之NO_UNSIGNED_SUBTRACTION

俊达2年前技术文章1209

在mysql数据库中,unsigned表示不存负数,如果unsigned类型的字段作运算,得到的结果为负数,SQL会报错。


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后,运算结果可以为负数。

-- 设置NO_UNSIGNED_SUBTRACTION后,结果可以为负数
mysql> set sql_mode='NO_UNSIGNED_SUBTRACTION';
Query OK, 0 rows affected (0.01 sec)

mysql> select 1-a from t1;
+------+
| 1-a  |
+------+
|  -99 |
+------+
1 row in set (0.00 sec)




相关文章

MySQL运维实战(1.1)安装部署:使用RPM进行安装部署

MySQL运维实战(1.1)安装部署:使用RPM进行安装部署

我们在生产环境部署mysql时,一般很少使用rpm。用rpm或或者其他包管理器安装mysql,好处是安装简单,而且很多系统可能都自带了某个版本的mysql。但是使用RPM安装也存在一些缺点:1、rpm...

MySQL运维实战之备份和恢复(8.9)xtrabackup备份指定表

备份部分表如果实例设置了参数innodb_file_per_table,xtrabackup可以备份部分表。通过--tables,--tables-file,--databases,--databas...

MySQL优化器特性(八)索引范围扫描成本计算

MySQL优化器特性(八)索引范围扫描成本计算

range执行计划中的range表示索引范围扫描。索引范围扫描的执行过程大致如下:1、根据where条件中索引字段的条件,定位到索引结构中的第一条满足条件的记录。2、根据索引中记录的rowid,到表中...

MySQL运维实战(3.1) MySQL官方客户端使用介绍

mysql是mysql安装包默认的客户端。位于二进制安装包的bin目录。或者通过rpm安装包安装mysql-community-client。使用mysql程序linux终端下,输入mysql命令登陆...

MySQL运维实战(2.1) 登录失败次数太多导致主机被block的问题处理

参数max_connect_errorsMySQL有参数max_connect_errors,当一个主机尝试登录MySQL,失败的次数超过了max_connect_errors,则这个主机将无法登录到...

 MySQL运维实战(1.2)安装部署:使用二进制安装部署

MySQL运维实战(1.2)安装部署:使用二进制安装部署

一般在生产环境,我们会使用二进制安装的方式安装MySQL。使用二进制安装,在处理单机多实例、升级MySQL等场景下更加方便。如果有特殊的需求(比如要打一些patch),我们还可以自己编译二进制。1、下...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。