BUG:MySQL Workbench(最新的OS X版本,6.2.3.12313),...同时生成UPDATE语句

时间:2014-09-29 12:39:55

标签: mysql mysql-workbench

更新:错误已修复,错误修正将随下一版本6.2.4一起提供。谢谢大家的帮助:http://bugs.mysql.com/bug.php?id=74140

我非常确定我在MySQL Workbench中发现了一个错误。下表给出了:

CREATE TABLE `table` (
    `id` varchar(100) NOT NULL,
    `uid` bigint(20) unsigned NOT NULL,
    `level` mediumint(9) NOT NULL DEFAULT '0',
    `cstamp` int(11) NOT NULL,
    `dstamp` int(11) NOT NULL,
    UNIQUE KEY `unique` (`id`,`uid`,`dstamp`),
    KEY `uid` (`uid`,`level`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

没有PRIMARY KEY,只有UNIQUE KEY。此表中的数据如下所示:

+----+------------+-------+------------+--------+
| id | uid        | level | cstamp     | dstamp |
+----+------------+-------+------------+--------+
|  1 | 0          | 3     | 1391701710 | 0      |
|  1 | 1          | 2     | 1391701710 | 0      |
|  1 | 123456     | 1     | 1391701710 | 0      |
|  1 | 7463529567 | 0     | 1391701710 | 0      |
|  2 | 0          | 3     | 1397577347 | 0      |
|  2 | 1          | 2     | 1397577347 | 0      |
|  2 | 123456     | 1     | 1397577347 | 0      |
|  2 | 3856438345 | 0     | 1397577347 | 0      |
| ...| ...        | ...   | ...        | ...    |
+----+------------+-------+------------+--------+

不,我在特定的id上使用WHERE进行选择,例如

SELECT * FROM `table` WHERE `id` = 2

我得到了这个结果:

+----+------------+-------+------------+--------+
| id | uid        | level | cstamp     | dstamp |
+----+------------+-------+------------+--------+
|  2 | 0          | 3     | 1397577347 | 0      |
|  2 | 1          | 2     | 1397577347 | 0      |
|  2 | 123456     | 1     | 1397577347 | 0      |
|  2 | 3856438345 | 0     | 1397577347 | 0      |
+----+------------+-------+------------+--------+

然后我用GUI将这4行的dstamp更改为非零值,然后按" Apply"。 Workbench首先向我显示UPDATE语句如下:

UPDATE `db`.`table` SET `dstamp`='1411994456' WHERE `uid`='0';
UPDATE `db`.`table` SET `dstamp`='1411994456' WHERE `uid`='1';
UPDATE `db`.`table` SET `dstamp`='1411994456' WHERE `uid`='123456';
UPDATE `db`.`table` SET `dstamp`='1411994456' WHERE `uid`='3856438345';

那是错的!该语句将使用uid = 0更新所有行,而不仅仅使用id = 2更新该行。 在我更新到这个新版本的Workbench之前,它完美无缺。我经常这样改变这张桌子。

出了什么问题?没有PRIMARY KEY来标识特定行,但有一个UNIQUE KEY不用于通过Workbench生成的UPDATE。我认为Workbench只需使用UNIQUE KEY中的列或禁止以这种方式进行更新,不是吗?

0 个答案:

没有答案