우수 답변
우선 “필드를 자르는 것이 불가능합니다”.
자르기 란 삭제 문이나 업데이트와 같지 않은 데이터베이스의 개념. Truncate의 주요 개념은 장면 뒤에서 메타 데이터를 처리하는 방법입니다. Oracle과 함께 작업하는 경우 “High Water Mark”라는 개념을 연구 할 수 있습니다 . Burleson의 블로그 여기
In Sql 서버에서 자세한 내용을 확인할 수 있습니다. 자동 증분 값이있는 기본 키에 대해 생각한다면 잘라내어 모두 기본 키로 설정하십시오. 사용자가 정의한 시작 값 또는 기본값 1을 의미합니다. 따라서 기본적으로 백엔드에서 수행하는 작업은 메타 데이터에 더 구체적이고 데이터베이스의 테이블 수준 속성에 더 구체적입니다.
이제, If 특정 열에 대해 NULL로 업데이트를 실행하거나 로 업데이트 할 수 있습니다.
Update TABLE
Set Column = NULL/’’
Where 1 =1
여기서 마지막으로 언급했습니다. 지금은 많은 데이터베이스가 where 절없이 전체 열을 업데이트 할 수 없기 때문입니다. mySql 에서는 안전 업데이트 플래그라고했습니다. 그러나 더 구체적으로 말하자면 대신 항상 NULL로 업데이트하여 모범 사례를 따르십시오.
Answer
DELETE는 행당 기록 된 작업입니다. 이는 각 행의 삭제가 물리적으로 기록 및 제거됨을 의미합니다. 제한 위반과 관련이없는 행은 삭제할 수 있으며 외래 키 또는 기타 제한은 그대로 둡니다.
TRUNCATE는 기록 된 작업이지만 다른 방식입니다. TRUNCATE는 정보가있는 정보 페이지의 거래 위치를 기록합니다. 정보 페이지 할당 해제는 정보 행이 실제로 정보 페이지에 여전히 존재하지만 확장이 재사용을 위해 비어있는 것으로 표시됨을 의미합니다. 이것이 TRUNCATE가 DELETE보다 빠른 작업을 수행하게하는 이유입니다. 외래 키 제약 조건이있는 테이블을자를 수 없습니다. 제약 조건을 제거하고 테이블을 자르고 제약 조건을 다시 적용해야합니다.
TRUNCATE는 모든 ID 열을 기본값 초기화로 재설정합니다. 즉, ID 열이있는 테이블이 있고 시드 값이 1 인 행이 264 개있는 경우 그의 최신 레코드는 ID 열에 값 264 (값 1로 시작했다고 가정)를 갖게됩니다. 빈 테이블에 새 레코드를 삽입 할 때 테이블을 자른 후 ID 열의 값은 1이됩니다. DELETE는 그렇지 않습니다. 동일한 시나리오에서 현재 행이 있으면 빈 테이블에 새 행을 삽입합니다. , ID 열의 값은 265입니다.
Truncate가 Delete보다 빠른 이유는 무엇입니까?
이유 : In 모든 정보를 삭제하기위한 쓰기는 롤백 테이블 스페이스에 복사되고 삭제 작업이 수행되므로 테이블을 삭제 한 후 ROLLBACK을 입력하면 정보를 되 찾을 수 있습니다 (롤백 테이블 속도에 따라 가져 오는 방법). 기술은 시간이 걸리지 만 TRUNCATE를 사용하면 롤백 테이블 스페이스에 복사하지 않고 직접 정보를 제거합니다. 따라서 TRUNCATE가 더 빠릅니다. 두 번 잘 리면 정보를 다시 가져올 수 없습니다.