2014-04-28 3 views
1

지금 TableId_int 열은 1 와 동일한 1000 개 개의 레코드에 대해 동일한 값이 나는 데이터베이스 "MYDB"테이블 "MYTABLE에 대한 MySQL의 워크 벤치 편집기 동시에 다음과 같은 세 가지 SQL 문을 실행하면 "모든 열 값이 삭제지고

update Mydb.Mytable set TableId_int = 0 ; 

REPLACE into Mydb.Mytable(TableId_int) 
SELECT @a:[email protected]+1 AS TableId_int from(SELECT @a:=0) A ,Mydb.Mytable B; 




DELETE from Mydb.Mytable where TableId_int = 0 ; 

모든 레코드는 열 TableId_int에서 제외한 삭제됩니다. 값이 TableId_int인데 1000 번째 레코드의 경우 1에서 1000까지이지만 다른 모든 열 값은 삭제되고 비어 있습니다. 다른 모든 열 값을 그대로 유지하고 싶습니다.

내가 뭘 잘못하고 있는지 알려주세요.

나는 내 대답에 다음 SO post을 언급하고있다. 사람들이 제안한 바에 따르면, 자동 증가 키로 TableId_int을 설정하는 것이 가장 좋은 방법이지만, 이미 다른 테이블 열이 기본 키로 설정되어 있고 자동 증가로 설정되어 MySQL에서 다른 자동 증가를 설정할 수 없습니다.

내가 어떻게해야하는지 알려주십시오.

감사

답변

1

예, REPLACEINSERT 다음에 DELETE 않습니다. 다른 열에 값을 지정하지 않으면 INSERT 부분은 값을 유추 할 수 없으며 기본 키를 제외하고 이전에 있었던 값을 사용하지 않습니다.

TableId_int이 기본 키이거나 고유 키이므로 동일한 값을 가진 기존 행이 으로 바뀌고으로 바뀌 었다고 가정합니다. 즉, 삭제 된 다음 삽입됩니다.

당신은 단순히이 작업을 수행하기 위해 UPDATE을 사용할 수

UPDATE (SELECT @a:=0) A, Mydb.Mytable B SET B.TableId_int = (@a:[email protected]+1); 

하지만 난 당신이 연속으로 기본 키 값을 번호를 다시하려는 것처럼 보이는 것을 언급해야한다. 이것은 권장되지 않으며 필요하지도 않습니다. 자동 증가 기본 키 값은 고유 일이어야하지만 연속적 일 필요는 없습니다. 행 번호가 아니며 각 행을 식별합니다. 삭제, 롤백, 삽입 실패 등에서 갭이있는 것은 정상입니다.

+0

'TableId_int'는 기본 키가 아닙니다. 데이터 타입은'int (20) UN'입니다. – rocky

+0

감사합니다, 그 변화는 일했습니다 !! – rocky