簡體   English   中英

將InnoDB表中的AUTO_INCREMENT起始值設置為零?

[英]Set AUTO_INCREMENT starting value in a InnoDB table to zero?

有沒有什么可以讓InnoDB的AUTO_INCREMENT字段從0開始計數而不是1

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

MySQL文檔:

如果用戶為INSERT中的AUTO_INCREMENT列指定NULL或0,則InnoDB會將行視為未指定值,並為其生成新值。

因此,這意味着0是一個類似於NULL的“特殊”值。 即使使用AUTO_INCREMENT = 0也會將初始值設置為1。

從MySQL 5.0.3開始,InnoDB在CREATE TABLE和ALTER TABLE語句中支持AUTO_INCREMENT = N表選項,以設置初始計數器值或更改當前計數器值。 由於本節前面討論的原因,服務器重新啟動會取消此選項的作用。

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> = 5.0.3。

編輯:

剛剛注意到,MySQL通常不喜歡等於0自動增量值-它與所使用的存儲引擎無關。 MySQL僅使用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)

Daren 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開始自動遞增,但是從1開始,然后通過UPDATE將其設置為0很好。

我通常使用此技巧來檢測表中的刪除。

在更新任何行時,我都設置了該行的最后更新時間。

在刪除時,我設置第0行的最后更新時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM