1

InnoDB の AUTO_INCREMENT フィールドを取得して、1 ではなく 0 からカウントを開始する方法はありますか

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

5 に答える 5

6

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 テーブル オプションをサポートし、初期カウンター値を設定するか、現在のカウンター値を変更します。このオプションの効果は、このセクションで前述した理由により、サーバーの再起動によってキャンセルされます。

于 2009-10-16T15:01:53.277 に答える
2

これは InnoDB と MyISAM の両方で機能し、2 番目の挿入は1not2です:

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)
于 2013-04-30T02:11:31.483 に答える
1

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?

これは大したことではなく、単に面倒です。

ティム

于 2012-11-23T22:17:26.887 に答える