MySQL删除问题为NULL

MySQL删除问题为NULL,mysql,Mysql,我们发现了删除记录的问题,这似乎是由于MySQL的特定版本造成的。然而,我找不到任何关于这个问题的提及,也不知道它是何时修复的 一些代码试图使用从框架生成的代码来执行主键为NULL(不应该发生)的删除操作。MySQL删除了以前插入的行,该行具有有效的非空主键 我们可以在这里演示这个问题 测试表:- CREATE TABLE IF NOT EXISTS `fred_delete` ( `id` int(11) NOT NULL AUTO_INCREMENT, `test` varchar(

我们发现了删除记录的问题,这似乎是由于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安装中,插入7行,然后删除第一行。在5.6.12-log install上,此命令插入7行,不删除任何行


有人知道MySQL的哪些版本会受到这种行为的影响吗?或者这是一个配置问题?

啊哈,这不是一个bug,而是一个功能

:

如果此变量设置为1(默认值),则在成功插入自动生成的自动增量值的语句后,可以通过发出以下形式的语句来查找该值: 从自动列为空的tbl_名称中选择*


,但有人和我们一样不知道这个功能。

我不熟悉这个bug。在错误情况下,
id
是否有一个
NULL
值,或者是id NULL所在的
出现故障?这有助于在bug数据库中搜索;)buggy系统上id为NULL的
SELECT*FROM fred\u delete会发生什么情况?@Kickstart:好的,这表明问题特定于
delete
语句。我一直在搜索bug历史记录,但我发现很难找到其中的问题,而且还没有出现任何问题。这可能是一个更广泛的错误的一个小影响;更可能的是,直到现在还没有人知道它,尽管它已经作为一个更广泛的bug的一部分被修复了。在这种情况下,可能几乎不可能找到您正在寻找的信息(你在另一台机器上尝试过这个,对吗?@LightnessRacesinOrbit:我认为它并不特定于
DELETE
语句(毕竟,
SELECT..WHERE id为NULL
如果第一行没有被删除,则返回一行)…太好了。非常感谢你。(我建议在这个答案中链接到bug 44694:虽然这不是一个bug,但这是bug DB上的帖子,相当于这个问题,我认为这可能有一些价值。)