[SQL 시작] 9. 데이터 삭제

표준 SQL 및 데이터베이스 입문

by AI개발자
gaebalai-sql-db (1).jpg

데이터의 삭제는 DELETE로 수행합니다. UPDATE와 마찬가지로 삭제 대상은 WHERE로 지정하는데, 만약 WHERE 조건을 생략하면 전체 데이터가 삭제되므로 주의해야 합니다. 먼저 SELECT문으로 WHERE 조건의 결과를 확인한 후에 실행하는 것이 좋습니다.


'DELETE FROM 테이블명 WHERE 조건'이라는 구문으로 수행합니다. WHERE절이 지정되지 않은 경우, 모든 데이터가 대상이 됩니다. 또한, 전체 데이터를 삭제하더라도 빈 테이블이 남게 됩니다.

sql014-3.png


⑴ 참조된 데이터 삭제

전체 데이터가 순식간에 삭제되어 버리는 것이 보이면 정말 무섭습니다. 이건 어떤 데이터라고 삭제할 수 있지만, 참조제약이 있는 경우, 참조되는 쪽의 데이터가 삭제될 수 있는지는 설정에 따라 달라집니다.


참조제약(외부키)로 참조되는 쪽의 데이터는 삭제나 변경이 불가능할 수 있습니다. 이는 참조제약에서 ON DELETE RESTRICT 또는 ON UPDATE RESTRICT가 설정된 경우로 이 경우 다른 테이블에서 참조되고 있는 값을 포함하는 행은 삭제나 변경할 수 없습니다.


반면에 ON DELETE CASCADE가 설정된 경우, 참조되는 테이블의 데이터가 삭제되면, 해당 데이터를 참조하고 있는 데이터도 함께 삭제됩니다. 마찬가지로 ON UPDATE CASCADE가 설정된 경우에는 다른 테이블의 데이터도 같이 변경됩니다.


ON DELETE 설정

sql015.jpg

삭제나 변경시 어떻게 되는지도 테이블에 따라 달라진다는 것입니다. 결국 '설계가 중요하다'는 것입니다. 만약, 학생마스터만 등록되어 있고, 아직 과목이나 시험등의 데이터가 등록되지 않았다면, students_id를 변경해도 괜찮을수도 있습니다. 하지만 이미 등록된 경우라면 변경하면 안되는 상황에는 ON UPDATE RESTRICT를 사용하고, 다른 데이터도 같이 일괄 변경해도 괜찮다면 ON UPDATE CASCADE를 사용하면 됩니다. 또한, 학생이 그만두면, student_id를 삭제할 떄, 관련 데이터를 모두 함께 삭제하고 싶다면 ON DELETE CASCADE를 사용하면 됩니다.


즉, 데이터의 성격에 따라 달라진다는 것입니다. 예를 들어, 상품코드와 같은 경우, 단종되더라도 과거 데이터를 삭제하지 않는 것이 좋을 수 있고, 그만둔 학생의 데이터는 일부 형태로 보관해 두더라도 평소 사용하는 데이터에서는 관련 데이터와 같이 모두 삭제하는 것이 나을 수 있습니다. 이런 점들을 고려하면서 설계를 해야 하는 것입니다.



©2024-2025 GAEBAL AI, Hand-crafted & made with Damon JW Kim.

GAEBAL AI 개발사: https://gaebalai.com

AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5


keyword
이전 08화[SQL 시작] 8. 데이터 변경