[SQL] 16장. 데이터 업데이트와 삭제

김상현·2022년 10월 8일
0

SQL

목록 보기
16/22
post-thumbnail

[손에 잡히는 10분 SQL - 벤 포터 지음, 박남혜 옮김] 책의 학습 후 정리자료입니다.


📍 데이터 업데이트

  • 테이블에 있는 데이터를 업데이트(수정)하기 위해 UPDATE 문을 사용한다.
  • UPDATE 문을 사용하는 방법엔 2가지 방법이 있다.
    • 테이블에 있는 특정 행 업데이트
    • 테이블에 있는 모든 행 업데이트

❗️ WHERE 절을 누락하지 말기

UPDATE 문을 사용할 때 실수로 테이블에 있는 모든 행을 업데이트할 수 있으니 매우 주의해야 한다.

💡 UPDATE 문과 보안

UPDATE 문을 사용하려면 특별한 보안 권한이 필요할 수도 있다.
UPDATE를 사용하기 전에 적절한 권한을 가졌는지 확인하자.
  • UPDATE 문의 기본 형태는 다음과 같이 세 가지 부분으로 이루어져 있다.
    • 업데이트할 테이블
    • 열 이름과 새로운 값
    • 어떤 행이 업데이트되어야 하는지를 지정하는 필터 조건

🧷 예제1

  • 고객 ID가 1000000005 인 고객의 이메일 주소가 없었지만, 새로운 이메일 주소를 추가하여 그 레코드를 업데이트한다.
UPDATE Customers
SET cust_email = 'kim@thetoysotre.com'
WHERE cust_id = 1000000005;
  • UPDATE 문은 항상 업데이트 할 테이블 이름으로 시작한다.
  • SET 명령은 열을 새로운 값으로 설정한다.
  • UPDATE 문은 DBMS가 어떤 행을 업데이트해야 하는지 알려 주는 WHERE 절로 끝난다.
  • 만약, WHERE 절이 없다면 DBMS는 테이블에 있는 모든 행을 새로운 값으로 업데이트 한다.

🧷 예제2

  • 고객 ID가 1000000005 인 고객의 cntactemail 열을 레코드에 업데이트한다.
UPDATE Customers
SET cust_contact = 'Sam Robert',
    cust_email = 'sam@toyland.com'
WHERE cust_id = 1000000006;
  • 여러 열을 업데이트할 때도 SET 절은 한 번만 사용하지만, '열 = 값'의 쌍은 콤마(,)로 구분해 나열해야 한다.

❗️ UPDATE 문에서 서브쿼리 사용하기

UPDATE 문에서도 SELECT 문으로 가져온 데이터로 열을 업데이트하기 위해 서브쿼리를 사용할 수 있다.

💡 FROM 키워드

일부 SQL 실행 환경에서는 UPDATE 문에서 FROM 절을 사용하도록 지원하기도 한다.
FROM 절을 사용하면 다른 테이블에 있는 데이터로 테이블의 열을 업데이트할 수 있다.

🧷 예제3

  • 열 값을 삭제하려면 열에 NULL을 설정하면 된다.
UPDATE Customers
SET cust_email = NULL
WHERE cust_id = 1000000005;
  • NULL 키워드는 해당 열에 어떤 값도 저장하지 않기 위해 사용한다.
  • 빈 문자열을 저장하는 것과는 다르게 NULL은 아무런 값도 가지지 않는다는 것을 의미한다.

📍 데이터 삭제

  • 테이블에서 데이터를 삭제하기 위해 DELETE 문을 사용할 수 있다.
  • DELETE 문은 두 가지 방법으로 사용한다.
    • 테이블에 있는 특정 행 삭제
    • 테이블에 있는 모든 행 삭제

❗️ WHERE 절을 누락하지 말기

DELETE를 사용할 때 실수로 테이블에 있는 모든 행을 삭제할 수 있으니 주의해야 한다.

💡 DELETE 문과 보안

DELETE 문을 사용하려면 특별한 보안 권한이 필요할 수도 있다.
DELETE를 사용하기 전에 적절한 권한을 가졌는지 확인해보자.

🧷 예제4

  • Customers 테이블에서 cust_id1000000006 에 해당하는 행을 삭제한다.
DELETE FROM Customers
WHERE cust_id = 1000000006;
  • DELETE FROM 에는 데이터를 삭제할 테이블 이름을 적고,
  • WHERE 절에는 어떤 행을 삭제할지에 대한 조건을 적는다.
  • 만약 WHERE 절을 적지 않는다면, 테이블에 있는 모든 데이터가 삭제된다.

💡 외래키

두 개의 테이블을 조인할 대는 두 테이블 모두에 있는 공통된 필드가 있어야 한다.
하지만 외래 키를 이용하여 DBMS 관계를 설정할 수도 있다.
DBMS는 외래 키를 참조 무결성을 위해 사용한다.
외래 키의 장점은 참조 무결성을 보장하기 위해 관계에 필요한 향을 삭제하지 못하도록 막는다는 점이다.
  • DELETE 문에서는 열 이름이나 와일드카드 문자를 사용하지 않는다. DELETE는 열이 아니라 전체 행을 삭제하므로, 특정 열을 삭제하려면 UPDATE 문을 사용해야 한다.

✏️ DELETE는 테이블이 아니라 테이블 내용을 삭제한다.

DELETE 문은 테이블에서 행을 삭제한다.
심지어 테이블에 있는 모든 행을 삭제할 수도 있다.
하지만, DELETE 문은 테이블에 있는 내용을 삭제하는 것이지 테이블 자체는 삭제하지 않는다.

💡 빠른 삭제

테이블에 있는 모든 행을 삭제하고 싶다면 DELETE 문을 사용하지 말고,
대신 TURN CATE TABLE 문을 사용하자
똑같이 삭제 작업을 하지만 훨씬 더 빠르다.
TURN CATE TABLE 문은 데이터 변경 기록이 남지 않기 때문에 더 빠르게 작동한다.

📍 업데이트와 삭제에 관한 가이드라인

  • UPDATE와 DELETE 문은 모두 WHERE 절을 가지고 있다.
  • WHERE 절을 생략하면 UPDATE나 DELETE는 테이블에 있는 모든 행에 적용된다.
  • 즉, WHERE 절 없이 UPDATE를 실행하면 테이블에 있는 모든 행은 새로운 값으로 업데이트될 것이고,
  • DELETE는 테이블에 있는 모든 행을 삭제할 것이다.

📌 SQL 개발자들이 따라야 할 중요한 가이드라인

  • 모든 행은 업데이트하거나 삭제하려는 의도가 없는 한, WHERE 절 없이 절대로 UPDATE나 DELETE를 사용하면 안 된다.
  • 모든 테이블이 기본 키를 가졌는지 확인한다. 그리고 가능한 WHERE 절에서 기본 키를 사용하라.
  • UPDATE나 DELETE 문에서 WHERE 절을 사용하기 전에 먼저 SELECT 문으로 테스트해서 올바른 행이 검색되는지 확인한다.
  • 데이터베이스 참조 무결성을 사용한다. 다른 테이블과 연결된 행은 DBMS가 함부로 삭제하지 못한다.
  • 가장 중요한 것은 SQL은 실행취소 버튼이 없다는 것이다.
  • 그래서 UPDATE와 DELETE 문을 사용할 때는 매우 주의를 기울여야 한다. 그렇지 않으면 잘못된 데이터를 업데이트하거나 삭제할 수 있다.

📍 도전 과제

  1. 미국 주의 약어는 항상 대문자여야 한다. 판매처의 주(Vendors에 있는 vend_state)와 고객의 주(Customers에 있는 cust_state)를 모두 대문자로 업데이트하는 SQL 문을 작성하라.
UPDATE Vendors
SET vend_state = UPPER(vend_state)
WHERE vend_country = 'USA';

UPDATE Customers
SET cust_state = UPPER(cust_state);
WHERE cust_country = 'USA';
  1. 15장의 도전 과제 1에서 고객 테이블에 여러분의 정보를 추가해 달라고 요청하였다. 이제 그 추가한 부분을 삭제해 보자. WHERE 절을 꼭 사용해야지, 그렇지 않으면 모든 고객을 삭제해 버릴 것이다(DELETE 문을 사용하기 전에 SELECT 문으로 테스트해 보길 권한다).
SELECT *
FROM Customers
WHERE cust_id = 1000000007;

DELETE FROM Customers
WHERE cust_id = 1000000007;
profile
목적 있는 글쓰기

0개의 댓글