我们发现删除记录存在问题,这似乎取决于特定版本的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会受到这种行为的影响?或者这是配置问题吗?
答案 0 :(得分:8)
啊哈,这不是一个错误,这是一个功能。
如果此变量设置为1(默认值),则在成功插入自动生成的AUTO_INCREMENT值的语句之后,您可以通过发出以下格式的语句来查找该值: SELECT * FROM tbl_name WHERE auto_col IS NULL
default has been changed from 1 to 0 in >= 5.5.3
It is mentioned in MySQL's bug database,但那个人同样没有意识到这个功能。