首页 > 解决方案 > WHERE 子句中具有无效数据的 MySQL 语句返回 0 行而不是失败

问题描述

希望这是一个简单的问题。我有下表:

+---------+---------+------+-----+---------+-------+
| Field   | Type    | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| KEY_COL | int(11) | NO   | PRI | NULL    |       |
| COL2    | int(11) | YES  |     | NULL    |       |
+---------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)

当我使用 KEY_COL 的 where 子句中的无效值对表进行更新时,它成功完成并返回 0 行受影响:

mysql> update LGSRV_TAB_DOC set COL2='9' where KEY_COL='A';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

我将 sql_mode 设置为 STRICT_ALL_TABLES,因此我期待更新失败,因为我为 KEY_COL 提供了无效值('A' 而不是数字)。有什么办法可以改变这种行为,以便更新失败并出现错误?我在 RHEL 6.9 上运行版本 8.0.11。

标签: mysql

解决方案


推荐阅读