MySQL运维实战(4.9) SQL_MODE之NO_UNSIGNED_SUBTRACTION

俊达2年前技术文章685

在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.3)安装部署:源码编译安装

MySQL运维实战(1.3)安装部署:源码编译安装

源码编译安装通常不需要自己编译mysql源码,编译的mysql和二进制包的内容基本一致。当然有些时候可能会需要采用源码编译的方式安装,安装一些非标准版本的mysql安装一些社区的patch、bugfi...

MySQL运维实战之ProxySQL(9.3)使用ProxySQL实现读写分离

proxysql读写分离主要通过mysql_query_rules表中的规则来实现。下面是具体的配置步骤:hostgroup配置insert into mysql_servers&...

MySQL运维实战之ProxySQL(9.4)proxysql和后端MySQL自动切换

MySQL运维实战之ProxySQL(9.4)proxysql和后端MySQL自动切换

如上图架构,当后端MySQL主库出现问题,发生主备切换后,如何自动将ProxySQL的读写切换到新的主库上?可以通过mysql_replication_hostgroups表配置实现:insert&n...

MySQL运维实战之ProxySQL(9.5)proxysql和MySQL Group Replication配合使用

如果后端MySQL使用了Group Replication,可通过配置mysql_group_replication_hostgroups表来实现高可用mysql_group_replication_...

MySQL优化器特性(六)表扫描成本计算

全表扫描成本使用optimizer_trace,或者使用explain format=tree, 或者explain format=json,可以查看查询的costmysql> exp...

MySQL优化器特性(七)成本估算常数

成本估算常数表示执行一些MySQL基础操作时的成本,如读取一个页面,创建一个临时表,比较一条记录,解析一行记录等操作。mysql.engine_cost和mysql.server_cost表分别记录存...

发表评论    

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