2009-10-16 28 views

回答

6

MySQL文档:

如果用户指定在INSERT的 AUTO_INCREMENT列NULL或0, InnoDB的将行仿佛没有指定过的值 并生成用于一个 新值它。

所以这意味着0是一个类似于NULL的'特殊'值。甚至当你使用AUTO_INCREMENT = 0是将初始值设置为1。

与MySQL 5.0.3开始,InnoDB的 支持AUTO_INCREMENT = N表 选项在CREATE TABLE和ALTER TABLE语句 ,设置初始计数器 值或改变当前计数器 的值。此选项的效果是 被服务器重新启动取消,前 部分中讨论的 原因。

+1

这个答案有点令人误解,因为MySQL _does_在'AUTO_INCREMENT'字段中允许零。有关此问题的正确答案,请参阅http://stackoverflow.com/questions/1578518/set-auto-increment-starting-value-in-a-innodb-table-to-zero/16291136#16291136。 – 2014-03-12 17:48:30

1
CREATE TABLE `df_mainevent` (
    `idDf_MainEvent` int(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`idDf_MainEvent`) 
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; 

作品。

编辑:

只注意到MySQL的一般不喜欢等于0自动递增值 - 这是独立于使用的存储引擎。 MySQL只使用1作为第一个自动增量值。所以要回答这个问题:NO这是不可能的,但它不依赖于存储引擎。

+0

这个答案显然是错误的。请参阅http:// stackoverflow。com/a/16291136/1432614 – 2014-03-06 14:13:13

0

我一直没有能够在0自动增量开始,但从1开始,然后通过更新设置为0工作正常。

我通常使用这个技巧来检测表中的删除。

更新任何行时,我设置了该行的上次更新时间。

在删除,我设置为0行

1

达人Schwenke的技术工作的最后更新时间。要糟糕,插入的下一个记录将是2
例如:

CREATE TABLE IF NOT EXISTS `table_name` (
`ID` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`Name` VARCHAR(100) NOT NULL, 
PRIMARY KEY(`ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; 

INSERT INTO `table_name` (`Name`) VALUES ('Record0?'); 
UPDATE `table_name` SET `ID`=0 WHERE `ID`=1; 
INSERT INTO `table_name` (`Name`) VALUES ('Record1?'); 
SELECT * FROM `table_name`; 

ID  Name 
0  Record0? 
2  Record1? 

这不是什么大不了的事它只是烦人。

+0

只要做另一个ALTER TABLE'table_name' AUTO_INCREMENT = 1;第一次插入后。 – Jannes 2013-04-03 13:34:00

1

这个工作在两个InnoDB和MyISAM数据,而第二刀片是1不是2

CREATE TABLE ex1 (id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=MyISAM; 

SET sql_mode='NO_AUTO_VALUE_ON_ZERO'; 

INSERT INTO ex1 SET id=0; 
INSERT INTO ex1 SET id=NULL; 

SELECT * FROM ex1; 

+----+ 
| id | 
+----+ 
| 0 | 
| 1 | 
+----+ 
2 rows in set (0.00 sec) 

CREATE TABLE ex2 (id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB; 

SET sql_mode='NO_AUTO_VALUE_ON_ZERO'; 

INSERT INTO ex2 SET id=0; 
INSERT INTO ex2 SET id=NULL; 

SELECT * FROM ex2; 

+----+ 
| id | 
+----+ 
| 0 | 
| 1 | 
+----+ 
2 rows in set (0.00 sec)