Bug #109830 | Update the table with sub-partition, and the result is wrong | ||
---|---|---|---|
Submitted: | 29 Jan 2023 10:07 | Modified: | 30 Jan 2023 7:40 |
Reporter: | hao chen | Email Updates: | |
Status: | Not a Bug | Impact on me: | |
Category: | MySQL Server: DML | Severity: | S2 (Serious) |
Version: | mysql 8.0.29 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | update partiton table |
[29 Jan 2023 10:07]
hao chen
[30 Jan 2023 7:40]
MySQL Verification Team
Hello hao chen, Thank you for the bug report. Imho this is not a bug. Your update query "update t4 set range_key=199 and hash_key = 6 where range_key=99" is actually interpreted and executed as "update table_name set range_key = (199 and hash_key=6) where range_key=99" For example in your very UPDATE case: mysql> select (199 and 1 = 6); +-----------------+ | (199 and 1 = 6) | +-----------------+ | 0 | +-----------------+ 1 row in set (0.00 sec) mysql> update t4 set range_key=0 where range_key=99; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from t4; +-----------+----------+ | range_key | hash_key | +-----------+----------+ | 0 | 1 | +-----------+----------+ 1 row in set (0.00 sec) UPDATE syntax, please see https://dev.mysql.com/doc/refman/8.0/en/update.html So, ideally your UPDATE should be: mysql> drop table t4; Query OK, 0 rows affected (0.03 sec) mysql> create table t4( -> range_key int, -> hash_key int -> ) partition by range(range_key) -> subpartition by hash(hash_key) -> ( -> partition p1 values less than(100) -> (subpartition h1, subpartition h2), -> partition p2 values less than(200) -> (subpartition h11, subpartition h22) -> ); Query OK, 0 rows affected (0.06 sec) mysql> insert into t4 values (99, 1); Query OK, 1 row affected (0.00 sec) mysql> select * from t4; +-----------+----------+ | range_key | hash_key | +-----------+----------+ | 99 | 1 | +-----------+----------+ 1 row in set (0.00 sec) mysql> update t4 set range_key=199, hash_key = 6 where range_key=99; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from t4; +-----------+----------+ | range_key | hash_key | +-----------+----------+ | 199 | 6 | +-----------+----------+ 1 row in set (0.00 sec) Also, please see Bug #82647 , Bug #7068 , Bug #19398 , Bug #26405 regards, Umesh