당신이해야 할 일은 그 테이블에 대한 auto_increment를 삽입하고자하는 새로운 레코드를위한 공간을 만드는 데 필요한 숫자로 설정하는 것입니다. 당신이 ID의 1-100에 행을 삽입 한 경우 예를 들어
, 당신은 수 있습니다
select auto_increment as val from information_schema.tables where table_schema='myschema' and table_name='mytable';
는 (값의 그 값이 101이 될 것이라고 가정하자 그 : 실행하여
확인 다음 AUTO_INCREMENT 값을 새 행을 삽입 한 경우 사용됩니다). 실행하여 수행 할 수 있습니다 "사전"는 AUTO_INCREMENT 값 :
alter table myschema.mytable auto_increment = 111;
이 같은 새 행 삽입하는 경우 :
insert into mytable (not_the_id_column) values ('test');
그것은 (111)의 "다음"ID를 얻을하지만 것이다 당신은 ID를 지정하는 경우
insert into mytable (id, not_the_id_column) values (101, 'test101');
insert into mytable (id, not_the_id_column) values (102, 'test102');
... -- more inserts as needed
를 PK 값을 업데이트 할 때 지금, 당신은 여전히 적절한 예방 조치를 취해야합니다 값은 수동으로, 당신은 당신이 이런 식으로 원하는 레코드를 삽입 할 수 있도록, 111보다 작은 값 사용하는만큼이 경우에 확인됩니다 , 또는 종속성이있는 값 (외래 키 또는 기타)이지만 결과 auto_increment 값이 이미 테이블에있는 값과 중복되지 않는 한 id 값을 강제로 증가 및/또는 백필하는 것은 완전히 합법적입니다.
자동 증가 값을 무시하지 마십시오. 주문이 필요한 경우 다른 열을 사용하십시오! –
하지만, 나는 노력했고, 효과가 있었다. UPDATE'table' SET'id' ='id' + 10 – dngs
'1에서 10까지의 ID를 가진 테이블의 시작 부분에 10 개의 새로운 행을 추가하고 싶습니다. '- 아니, 실제로는 원하지 않습니다. 나는 네가 그렇게 생각한다고 생각하지만 너는 그렇게하지 않는다. 모든 것이 가능하며 나는 개인적으로이 잔인 함을 저지르는 코드를 제공하지 않습니다.당신이 쓴 해결책은'auto_increment'를 망치는 것을 잊어 버리고,'order_id'라고 부르는 다른 컬럼을 생성하고, 인덱스를 작성한 다음, 그 컬럼을 사용하여 * retrieve * 할 때 당신의 행을 정렬 할 것입니다. 지금, 당신은 나의 충고를 받아 들일 수있다, 또는, 당신이 가질 수있다, 오, 그렇게 auto_increment가 당신을 물면 재미있다. 그리고 그렇게 될 것입니다. –