select문 말고 오랫만에, DDL문을 해 봅시다. 데이터를 삭제하는 명령어는 delete from 하고, drop table이 있는데요. 이 둘이 어떤 차이점이 있는지 간단하게 알아보도록 하겠습니다.
먼저, t2 테이블에 있는 내용을 봅시다.
그러면, a, b, c, d라는 레코드가 있음을 알 수 있어요. 여기에서, delete from AA where BB 명령어는 AA 테이블에 있으면서, BB 조건을 만족하는 레코드를 모두 삭제하라는 의미입니다.
그러면, AA가 t2이고 BB가 str = 'a'인 경우에는 어떨까요? 이 때에는 t2 테이블에서, str 필드가 'a'인 것을 모두 삭제하라는 의미입니다. str 필드가 'a'인 record가 삭제될 겁니다. 그러면 남은 것은 'b', 'c', 'd'일 겁니다. 다시, t2의 내용을 모두 출력해 봅시다.
그러면, 'b', 'c', 'd'만 남아있는 것을 확인할 수 있습니다.
delete from AA는, AA에 있는 레코드들을 모두 삭제하라는 의미입니다. 이 명령어를 수행해 봅시다.
그러면, 테이블에 대한 데이터는 남아 있음을 확인할 수 있어요. 예를 들어, str 필드의 type이 무엇인지, Character set이 무엇인지 등등은 남아 있습니다.
위에서 설명한 내용을 정리하면 다음과 같습니다. 당연하게도, AA table의 구조는 보존이 됩니다.
그런데 drop table AA 를 수행하면 어떻게 될까요?
t2를 지워봅시다. 그러면, 데이터 뿐만이 아니라 테이블도 같이 날라갑니다.
스키마 목록에 t2가 사라진 것을 볼 수 있습니다. 그러면 select * from t2 쿼리를 수행하면 어떻게 될까요? 이는 t2 스키마에 있는 레코드들을 모두 출력하라는 의미인데요. t2가 없습니다.
따라서 수행을 하면 Error가 뜹니다. 당연할 겁니다. 없는 테이블에 있는 레코드들을 모두 가져오라고 하기 때문입니다.
오늘 배운 내용을 표로 정리해 보면 위와 같습니다. 교과서에는 delete from ~ 보다 drop table ~ 가 더 극적인 작업이라고 되어 있습니다. 이 문장만 기억하셔도 될 듯 싶네요.
'코딩 > Sql' 카테고리의 다른 글
mysql datediff 함수 : 두 날짜의 차이를 일 단위로 리턴해 준다. (8) | 2019.12.01 |
---|---|
mysql timediff 함수 : 두 시간의 차이를 계산한다. (10) | 2019.11.19 |
mysql having 절 : 그룹에 대해서 조건을 건다. (6) | 2019.11.07 |
mysql on절 vs where절 : 언제 어떻게 필터링 되는가? (12) | 2019.11.04 |
mysql left join : 왼쪽 릴레이션을 보존한다. (8) | 2019.11.03 |
최근댓글