2013-07-17 40 views
3

我使用的是MySQL 5.1.60非空自動遞增列 - 但「爲空」查詢返回剛剛插入的行

,我有所謂的「文件夾」一表

CREATE TABLE `folder` (
`folder_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`name` varchar(50) DEFAULT NULL, 
`parent_id` int(10) unsigned DEFAULT NULL, 
`update_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP, 
PRIMARY KEY (`folder_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 

而且我爲它插入一個值。

INSERT INTO `folder` (`name`) VALUES ('test_name'); 

剛過,我執行選擇查詢

查詢

SELECT * FROM folder f WHERE f.folder_id IS NULL 

但令人驚訝的是,它實際上返回最後插入的行(僅在第一次運行)。

爲什麼這種行爲在MySQL中發生。

+0

Yip即使在不同版本的MySQL上,我也會得到相同的結果。確實很奇怪.... – Namphibian

+0

[沒有repro here](http://sqlfiddle.com/#!8/2bde9/3) – hims056

+0

我不這麼認爲。 folder_id被定義爲非空和auto_increment。使用上述查詢不應該返回任何行。請參閱http://sqlfiddle.com/#!2/9a44f/1 –

回答

2

實際上它是在MySQL 5.1.60中的錯誤,您正在使用,並且它不是在MySQL的早期版本的問題。

但是,您可以通過運行以下命令將其修復到當前版本的mysql中: mysql> SET sql_auto_is_null = 0;

+0

其工作。感謝你的時間... – user2130460

1

檢查"innodb_flush_log_at_trx_commit"系統變量 並將其設置爲1,然後再次嘗試

+0

葉似乎如果你足夠快的數據不刷新到磁盤,從而允許這種行爲傳播。 – Namphibian

+0

@Biju Soman謝謝你的時間。我使用** SHOW VARIABLES **查詢了MySQL中的系統變量,但是對於** innodb_flush_log_at_trx_commit **,缺省值是1。我仍然可以在這裏重現這個問題。 – user2130460

相關問題