-
데이터 업데이트, 삭제Database/SQL 2023. 9. 29. 17:20728x90
목표
- UPDATE, DELETE 문을 사용해 테이블 데이터를 조작 한다.
목차
- [데이터 업데이트]
- [데이터 삭제]
- [업데이트와 삭제 가이드]
데이터 업데이트
테이블에 있는 데이터를 업데이트하기 위해 UPDATE 문을 사용한다.
- 테이블에 있는 특정 행 업데이트
- 테이블에 있는 모든 행 업데이트
UPDATE 문을 사용할 때 실수로 테이블에 있는 모든 행을 업데이트할 수 있으니 매우 주의해야 한다.
UPDATE를 정확히 이해하고, UPDATE 문을 사용하는 것이 좋다.
UPDATE문의 기본 형태는 다음과 같이 세 가지 부분으로 이루어져 있다.
- 업데이트할 테이블
- 열 이름과 새로운 값
- 어떤 행이 업데이트되어야 하는지를 지정하는 필터 조건
UPDATE Customers SET cust_email = 'kim@thetoystore.com' WHERE cust_id = 10000000005;
UPDATE 문은 항상 업데이트할 테이블 이름으로 시작하고, SET 명령은 열을 새로운 값으로 설정한다. UPDATE 문은 DBMS가 어떤 행을 업데이트해야 하는지 알려 주는 WHERE 절로 끝난다.
WHERE 절이 없다면 DBMS는 Customers 테이블에 있는 모든 행을 새로운 데이터로 업데이트할 것이다.여러 열을 업데이트하는 문법은 다음과 같다.
UPDATE Customers SET cust_contact = 'Sam Roberts',cust_email = 'sam@toyland.com' WHERE cust_id = 1000000006;
여러 열을 업데이트할 때도 SET 절은 한 번만 사용하지만 '열 = 값’의 쌍은 콤마로 구분해 나열한다.
[!NOTE]
UPDATE 문에서도 SELECT 문으로 가져온 데이터로 열을 업데이트하기 위해 서브쿼리를 사용할 수 있다.일부 SQL 실행 환경에서는 UPDATE 문에서 FROM 절을 사용하도록 지원하기도 한다.
FROM 절을 사용하면 다른 테이블에 있는 데이터로 테이블의 열을 업데이트할 수 있다.열 값을 삭제하려면 열에 NULL(테이블이 NULL 값을 허용하도록 정의된 경우)을 설정하면 된다.
UPDATE Customers SET cust_email = NULL WHERE cust_id = 1000000005;
NULL 키워드는 열에 어떤 값도 저장하지 않기 위해 사용한다.
빈 문자열을 저장하는 것과는 다르게 NULL 은 아무런 값도 가지지 않는다는 것을 의미한다.
데이터 삭제
테이블에서 데이터를 삭제하기 위해 DELETE 문을 사용할 수 있다.
- 테이블에 있는 특정 행 삭제
- 테이블에 있는 모든 행 삭제
[!NOTE]
DELETE를 사용할 때 실수로 테이블에 있는 모든 행을 삭제할 수 있으니 주의해야 한다.
DELETE의 특징을 잘 이해하고, DELETE 문을 사용하도록 하자.DELETE FROM Customers WHERE cust_id = 1000000006;
[!NOTE] DELETE 문과 외래 키
두 개의 테이블을 조인할 때 두 테이블 모두에 있는 공통된 필드가 필요하다고 배웠다.
하지만 외래 키를 이용하여 DBMS 관계를 설정할 수도 있다. DBMS는 외래 키를 참조 무결성을 위해 사용한다.
DELETE 문에서는 참조 무결성을 보장하기 위해 관계에 필요한 행을 삭제하지 못하도록 막는다.DELETE 문에서는 열 이름이나 와일드카드 문자를 사용하지 않는다. DELETE는 열이 아니라 전체 행을 삭제하므로,
특정 열을 삭제하려면 UPDATE 문을 사용해야 한다.
DELETR는 테이블이 아니라 테이블 내용을 삭제한다.
심지어 테이블에 있는 모든 행을 삭제할 수도 있지만 DELETE 문은 테이블에 있는 내용을 삭제하는 것이지 테이블 자체는 삭제하지 않는다.[!NOTE] 빠른 삭제
테이블에 있는 모든 행을 삭제하고 싶다면 DELETE 문을 사용하지 말고,
대신 TRUNCATE TABLE 문을 사용하자.
똑같은 삭제 작업을 진행하지만 데이터 변경 기록을 남기지 않기 때문에 훨씬 더 빠르게 작동한다.업데이트와 삭제 가이드라인
UPDATE와 DELETE 문 모두 WHERE 절을 가지고 거이에는 이유가 있다.
WHERE 절을 생략하면 UPDATE나 DELETE는 테이블에 있는 모든 행에 적용 된다. 이런 동작은 위험하기 때문에 WHERE 절을 함께 사용한다.다음은 SQL 개발자들이 따라야 할 중요한 가이드라인이다.
- 모든 행을 업데이트하거나 삭제하려는 의도가 없는 한, WHERE 절 없이 절대로 UPDATE나 DELETE를 사용해선 안된다.
- 모든 테이블이 기본 키를 가졌는지 확인한다. 그리고 가능한 WHERE 절에서 기본 키를 사용하라
- UPDATE나 DELETE 문에서 WHERE 절을 사용하기 전에 먼저 SELECT 문으로 테스트해서 올바른 행이 검색되는지 확인한다. 잘못된 WHERE 절을 사용하기가 매우 쉽다.
- 데이터베이스 참조 무결성을 사용한다. 그러면, 다른 테이블과 연결된 행은 DBMS가 함부로 삭제하지 못한다.
- 일부 DBMS는 데이터베이스 관리자가 WHERE 절 없이 UPDATE나 DELETE를 수행할 수 없게 한다. 만약, 우리가 사용하고 있는 DBMS가 이런 기능을 지원한다면 이 기능을 사용하자
가장 중요한 것은 SQL은 실행 취소 버튼이 없다는 것이다. 그래서 UPDATE와 DELETE 문을 사용할 때는 주의가 필요하다.