2009-10-16 1 views

답변

6

MySQL의 문서 : 사용자가 INSERT에서 AUTO_INCREMENT 열에 대해 NULL 0 지정

경우 이노의 값 가 지정되지 않은 것처럼 열을 취급하고 대한 새로운 값을 생성 그것.

따라서 0은 NULL과 비슷한 '특별'값입니다. 비록 당신이 AUTO_INCREMENT = 0 5.0.3부터 1

에 대한 초기 값을 설정하는 것입니다 사용하는 경우, InnoDB의 는 설정, 표 문을 테이블을 만들고 ALTER 옵션에 AUTO_INCREMENT = N 테이블을 지원합니다 초기 카운터 값을 변경하거나 현재 카운터를 값으로 변경합니다. 이 옵션의 효과는 이유에 대해 섹션에서 앞에서 설명한 서버 재시작에 의해 취소 된 입니다.

+1

이 답변은 MySQL이 'AUTO_INCREMENT' 필드에 0을 허용하기 때문에 다소 오도 된 것입니다. 이 질문에 대한 올바른 대답은 http://stackoverflow.com/questions/1578518/set-auto-increment-starting-value-in-a-innodb-table-to-zero/16291136#16291136을 참조하십시오. –

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; 

작품을 세기 시작하는 이노의 AUTO_INCREMENT로 필드를 거기에 도착하는 것입니다.

는 편집 : - 즉 사용 된 스토리지 엔진에서 독립적이다

그냥 일반적으로 MySQL이 0와 같은 자동 증가 값을 좋아하지 않는 것으로 나타났습니다. MySQL은 1을 첫 번째 자동 증가 값으로 사용합니다. 그래서 질문에 대답 : 아니오 그게 불가능하지만 스토리지 엔진에 의존하지 않습니다.

+0

이 대답은 단지 틀린 말입니다. http : // stackoverflow를 참조하십시오.com/a/16291136/1432614 –

0

자동 증가가 0에서 시작하지 못했지만 1에서 시작하여 UPDATE를 통해 0으로 설정하면 정상적으로 작동합니다.

일반적으로이 트릭을 사용하여 테이블에서 삭제를 검색합니다.

행이 업데이트되면 해당 행의 최종 업데이트 시간을 설정합니다.

은 삭제, 나는 행 0 다렌 Schwenke의 기술이 작동

1

의 마지막 업데이트 시간을 설정합니다. 삽입 한 다음 레코드는 예를 들어 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

1

이 이노와의 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)