Bug #78598 | Update results in wrong nr of columns updated (null = null) | ||
---|---|---|---|
Submitted: | 28 Sep 2015 8:28 | Modified: | 15 Nov 2015 13:45 |
Reporter: | Andre Timmer | Email Updates: | |
Status: | No Feedback | Impact on me: | |
Category: | MySQL Server: DML | Severity: | S3 (Non-critical) |
Version: | 5.6 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | multiple index incorrect null |
[28 Sep 2015 8:28]
Andre Timmer
[28 Sep 2015 8:32]
Andre Timmer
-- script works as intended 1) without: alter table test_tmp add index i1 (col1, id_max); 2) with: alter table test_tmp add index i1 (col1); 3) with: alter table test_tmp add primary key (col1, id_max); -- what doesn't work is the following: a) alter table test_tmp add index i1 (col1, id_max); b) alter table test_tmp add unique key (col1, id_max);
[28 Sep 2015 8:38]
Andre Timmer
The update results in 2 rows updated: id col1 comment -- ------- --------------- 1 row 1 null 2 row 2 null 3 row 3 null 4 null Found --> unexpected 5 row 5 Found 6 null null 7 row 5 null This is 1 row more than the select!
[28 Sep 2015 12:35]
Andre Timmer
update rewritten to update with join instead of exist clause works correct: update test aa, test_tmp bb set aa.comment = 'Found' where aa.col1 = bb.col1 and aa.id != bb.id_max; So bug seems only to be present when using an exist clause.
[29 Sep 2015 14:01]
MySQL Verification Team
This seems to be a problem with NULLs. As you are using InnoDB engine for both tables, see what value do you have for the global variable: innodb_stats_method There are three methods, so check the startup value of this variable. It is probably nulls_equal. Then re-start server first with second and then with third possible value, which are : nulls_unequal nulls_ignored and then let us know if you get different results.
[14 Oct 2015 16:08]
Andre Timmer
With the suggested settings the result is the same: set global innodb_stats_method = nulls_unequal; set global innodb_stats_method = nulls_ignored; set global innodb_stats_method = nulls_equal; The documentation on http://dev.mysql.com/doc/refman/5.6/en/index-statistics.html says this setting influences statistics. Influencing how a sql statement works is not happing / not part of the deal. So i still have this problem.
[14 Oct 2015 16:43]
MySQL Verification Team
This looks like a fixed bug to me. You should try the latest release of 5.6. I changed the script only marginally, with couple of selects extra and this is what I get: Table Create Table test CREATE TABLE `test` (\n `id` int(11) NOT NULL,\n `col1` varchar(12) DEFAULT NULL,\n `comment` varchar(200) DEFAULT NULL,\n PRIMARY KEY (`id`),\n KEY `i1` (`col1`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 Table Create Table test_tmp CREATE TABLE `test_tmp` (\n `col1` varchar(12) CHARACTER SET utf8 DEFAULT NULL,\n `id_max` int(11) NOT NULL,\n KEY `i1` (`col1`,`id_max`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 id col1 comment 5 row 5 NULL id col1 comment 1 row 1 NULL 2 row 2 NULL 3 row 3 NULL 4 NULL NULL 5 row 5 Found 6 NULL NULL 7 row 5 NULL Hence, it looks to me like an already fixed bug !!!!
[15 Oct 2015 9:55]
Andre Timmer
Your test is slightly different, charset utf8 and latin1 are used. Any way: - in MySQL 5.1 there is no problem - in MySQL 5.5.4 there is no problem - in MariaDB 10.0.19-MariaDB-log which used MySQL 5.6 it goes wrong but only when charset utf8 is used every where (3x) or latin1 (3x) It's getting complicated. Question: - does the ORIGINAL script works correctly on you side (which version are you using exactly)?
[15 Oct 2015 13:45]
MySQL Verification Team
Hi, I have changed my test script and I still get the same result. We do not have any script named ORIGINAL. MariaDB is not MySQL, so please try our latest 5.6. This bug seems to be fixed there.
[16 Nov 2015 1:00]
Bugs System
No feedback was provided for this bug for over a month, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open".