VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
DELETE는 행 전체를 제거합니다. 트랜잭션 밖에서는 되돌리기가 없으므로, 들일 만한 습관은 WHERE를 먼저 쓰고 그것이 무엇을 선택하는지 보는 것입니다.
이 예제들은 INSERT의 sakila_practice 데이터베이스를 사용합니다. 시작하기 전에 그곳의 설정 블록을 다시 실행한 다음, mysql -u root -p sakila_practice로 클라이언트를 여세요.
DELETE의 동작 방식
TABLE_NAME을 테이블로, CONDITION을 제거할 행을 고르는 검사로 바꾸세요.
열 목록은 없습니다. DELETE는 행 전체를 제거하므로, 열 1개를 비우는 것은 그것을 NULL로 설정하는 UPDATE입니다.
예제
- 먼저 보고, 그다음 삭제하기
WHERE를 SELECT로 쓰고 곧 잃게 될 행을 읽으세요.
WHERE는 그대로 두세요.
DELETE는 영향받은 행 수만 보고하고 그 밖에는 아무것도 보고하지 않습니다. UPDATE는 Rows matched와 Changed가 있는 두 번째 줄을 출력하지만, DELETE에는 그에 해당하는 것이 없습니다.
- 아무것과도 일치하지 않는 WHERE는 오류가 아닙니다
0 rows affected는 WHERE가 틀렸다는 뜻이고, 문장은 그렇다고 말해 주지 않습니다.
WHERE가 없으면 테이블을 비웁니다
WHERE에 키가 없는 UPDATE를 거부하는 것과 정확히 같습니다. UPDATE가 그것이 내는 ERROR 1175를 보여 주고, mysql -u root -p --safe-updates sakila_practice가 세션 전체에 대해 그것을 켭니다.
TRUNCATE는 다르게 비웁니다
테이블이 비어 있으므로, 행을 하나 삽입하고 그 id를 보세요.DELETE가 제거한 행에서 이어졌습니다. TRUNCATE TABLE은 그렇지 않습니다.
TRUNCATE는 테이블을 삭제하고 빈 테이블을 만들며, 그래서 몇 개의 행을 제거했든 0 rows affected를 보고하고 카운터가 처음부터 다시 시작합니다. WHERE를 받지 않고, 롤백할 수 없으며, DELETE 트리거를 실행하지 않습니다. 테이블을 빈 상태로 되돌리려면 TRUNCATE를, 그 밖의 모든 경우에는 DELETE를 사용하세요.
요약
DELETE FROM table WHERE condition으로 쓰고,WHERE를 먼저SELECT로 실행하세요.- 행 수만 나오고
Rows matched줄은 없다고 예상하세요. 0 rows affected는 실패가 아니라 아무것도 찾지 못한WHERE로 읽으세요.WHERE를 빼면 확인 단계 없이 테이블이 비워집니다.- 테이블을 비우고 초기화하려면 되돌릴 수 없다는 점을 알고
TRUNCATE TABLE을 사용하세요.
함께 보기
- UPDATE — 행 변경과 안전 업데이트 보호 장치
- WHERE — 어떤 행이 사라질지 결정하는 절
- 트랜잭션 — DELETE를 되돌리는 유일한 방법
- MySQL의 소프트 삭제 — 행을 제거하는 대신 사라진 것으로 표시하기