【发布时间】:2014-01-30 13:02:34
【问题描述】:
我们发现了删除记录的问题,这似乎与 MySQL 的特定版本有关。但是,我找不到任何提及此问题的信息,无法知道何时修复。
一些代码试图在主键为 NULL 的情况下执行删除(这永远不会发生),代码是从框架生成的。 MySQL 删除了先前插入的行,主键有效且非空。
可以在这里演示问题。
测试表:-
CREATE TABLE IF NOT EXISTS `fred_delete` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`test` varchar(25) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
然后执行下面的sql:-
INSERT INTO fred_delete
(id, test)
VALUES
(NULL, 'a'),
(NULL, 'b'),
(NULL, 'c'),
(NULL, 'd'),
(NULL, 'e'),
(NULL, 'f'),
(NULL, 'g');
DELETE FROM fred_delete WHERE id IS NULL;
SELECT * FROM fred_delete;
在 5.1.58-log mysql install 上,这会插入 7 行,然后删除第一个插入的行。在 5.6.12-log install 上,这会插入 7 行并且不会删除任何行。
有谁知道哪些版本的 MySQL 会受到这种行为的影响?或者这是配置的问题?
【问题讨论】:
-
我不熟悉这个错误。
id在错误情况下是否有NULL值,还是WHERE id ID NULL有问题?这有助于在错误数据库中搜索;) -
SELECT * FROM fred_delete WHERE id IS NULL在有问题的系统上会发生什么? -
@Kickstart:好的,这表明问题特定于
DELETE语句。我一直在搜索错误历史,但我发现很难在其中找到问题,而且还没有出现任何问题。这可能是更广泛的错误的一个小影响;更可能的是直到现在还没有人知道,尽管它已经作为一个更广泛的错误的一部分得到了修复。在这种情况下,几乎不可能找到您正在寻找的信息。 :( -
你在另一台机器上试过了,对吧? Works for me
-
@LightnessRacesinOrbit:我将其理解为 not 特定于
DELETE语句(毕竟,如果第一行未被删除,SELECT .. WHERE id IS NULL会返回一行)。 I see this bug, perhaps it is related?.
标签: mysql