16. 행 추가하지 - INSERT

  • DB의 테이블에 행을 추가하기 위해 INSERT 명령을 사용함
INSERT INTO 테이블명 VALUE(값1, 값2, ...)
  • SELECT 명령은 데이터 검색을 위한 것
    • 질의를 하면 데이베이스 서버가 클라로 결과를 반환하는 형식으로 처리됨
  • 데이터를 추가할 경우 반대로 클라에서 서버로 데이터를 전송하는 형식을 취하고 서버 측은 전송받은 데이터를 DB에 저장함
    • ex) 웹 페이지에서 신규 등록이나 추가와 같은 버튼을 클릭했을 때 처리되는 데이터 추가 기능

INSERT로 행 추가

  • RDBMS에서는 INSERT 명령을 사용해 테이블의 행 단위로 데이터를 추가함
  • DB를 생성하면 테이블에는 아무런 데이터도 저장되어 있지 않은 상태가 됨
  • 이후 INSERT 명령으로 데이터를 추가해 DB를 구축함
INSERT INTO 행을 추가할 테이블 VALUES(값1, 값2, ...)
  • VALUES 구를 사용해 행의 데이터를 지정함

값을 저장할 열 지정

  • INSERT 명령으로 행을 추가할 경우 값을 저장할 열을 지정할 수 있음
  • 열을 지정할 경우에는 테이블명 뒤에 괄호로 묶어 열명을 나열하고 VALUES 구로 값을 지정함
  • VALUES 구에 값을 지정할 경우에는 지정한 열과 동일한 개수로 값을 지정해야 함
INSERT INTO 테이블명(열1, 열2, ...) VALUES(값1, 값2, ...)

NOT NULL 제약

  • 행을 추가할 때 유효한 값이 없는 상태(NULL)로 두고 싶을 경우에는 VALUES 구에서 NULL로 값을 지정할 수 있음
  • NOT NULL 제약이 걸려있는 열은 NULL 값을 허용하지 않음

  • NULL의 조건을 비교할 때는 IS NULL을 이용해야 하며 NULL을 포함한 연산 결과는 모두 NULL이 되어버림
    • NULL을 허용하고 싶지 않다면 NOT NULL 제약을 걸어두는 편이 좋음

DEFAULT

  • DESC 명령으로 열 구성을 살펴보면 Default라는 항목을 찾을 수 있음
    • Default : 명시적으로 값을 지정하지 않았을 경우 사용하는 초깃값
    • Default 값은 테이블을 정의할 때 지정할 수 있음
  • 열을 지정해 행을 추가할 때 지정하지 않은 열은 Default 값을 사용하여 저장됨

암묵적으로 디폴트 저장

  • 열을 지정하지 않으면 디폴트값으로 행이 추가됨

17. 삭제하기 - DELETE

  • DB의 테이블에서 행을 삭제하기 위해서 DELETE 명령을 사용함
DELETE FROM 테이블명 WHERE 조건식
  • DB는 하드디스크와 같은 저장장치에 데이터를 저장해 관리함
    • 저장장치에는 저장용량이 정해져 있는 만큼 데이터를 무제한으로 저장할 수 없음
  • 저장공간이 모자라 데이터를 삭제해야 하는 경우도 자주 발생함
    • ex) 시스템에서 삭제나 취소 버튼을 이용해 데이터를 삭제하는 경우

DELETE로 행 삭제

  • RDBMS에서 데이터를 삭제할 경우에는 행 단위로 DELETE 명령을 수행함
DELETE FROM 테이블명 WHERE 조건식
  • DELETE 명령에는 WHERE 구를 지정할 수 있으나 SELECT 명령처럼 WHERE 구를 생략할 경우에는 모든 행을 대상으로 동작함
  • DELETE 명령어는 행을 지정할 수 있지만 SELECT처럼 열을 지정할 수 없음

DELETE 명령 구

  • WHERE 구에서 대상이 되는 행을 검색하는 것은 SELECT 명령에서도 DELETE 명령에서도 똑같음
    • SELECT 명령에서는 조건에 맞는 행의 결괏값이 클라이언트로 반환됨
    • DELETE 명령에서는 조건에 맞는 행이 삭제됨

18. 데이터 갱신하기 - UPDATE

  • 테이블의 셀에 저장되어 있는 값을 갱신하려면 UPDATE 명령을 사용함
UPDATE 테이블명 SET 열1 = 값1, 열2 = 값2, ... WHERE 조건식

UPDATE로 데이터 갱신

  • RDBMS에서는 UPDATE 명령으로 데이터를 갱신할 수 있음
  • UPDATE 명령은 테이블의 셀 값을 갱신하는 명령
UPDATE 테이블명 SET 열명 = 값 WHERE 조건식
  • DELETE와 달리 UPDATE는 셀 단위로 데이터를 갱신할 수 있음
  • WHERE 구에 조건을 지정하면 그에 일치하는 행을 갱신할 수 있음
  • WHERE 구를 생략한 경우에는 DELETE의 경우와 마찬가지로 테이블의 모든 행이 갱신됨

  • 값은 상수로 표기함
  • INSERT 명령과 마찬가지로 자료형에 맞는 값을 지정해야 함
    • 수치형 열에는 수치형 리터럴
    • 문자열형 열에는 문자열형 리터럴
  • 갱신해야 할 열과 값이 복수인 경우에는 열 = 값을 콤마(,)로 구분해여 리스트 형식으로 지정할 수 있음
  • SET 구에 지정한 갱신 내용은 처리 대상이 되는 모든 행에 적용됨

UPDATE로 갱신할 경우 주의사항

복수열 갱신

  • UPDATE 명령의 SET 구에서는 필요에 따라 콤마(,)로 구분하여 갱신할 열을 여러 개 지정할 수 있음
UPDATE 테이블명 SET 열명1 = 값1, 열명2 = 값2, ... WHERE 조건식
  • UPDATE 명령을 하나로 묶어서 실행하는게 효율적
UPDATE 테이블명 SET 열명1 = 값1 WHERE 조건식1;
UPDATE 테이블명 SET 열명2 = 값2 WHERE 조건식2;

UPDATE 테이블명 SET 열명1 = 값1, 열명2 = 값2 WHERE 조건식;

SET 구의 실행 순서

  • DB의 제품에 따라 처리 방식이 다름
    • 즉, DB 제품에 따라 결과가 달라짐
    • ex) MySQL에서는 서로 다른 결괏값이 나오지만 Oracle에서는 어느 명령을 실행해도 결과는 같음

NULL로 갱신

  • UPDATE 명령으로 셀 값을 NULL로 갱신할 수 있음
  • 갱신할 값을 NULL로 지정하면 됨
    • NULL 초기화라고 부름

19. 물리삭제와 논리삭제

  • DB에 데이터를 삭제하는 방법은 용도에 따라 크게 물리삭제논리삭제의 두 가지로 나뉨
    • 시스템 설계 분야에서 시스템 구축할 때 자주 사용하는 용어

두 종류의 삭제방법

  • 데이터를 삭제할 때는 두 가지 사고 방식이 있음

물리삭제

  • SQL의 DELETE 명령을 사용해 직접 데이터를 삭제하자는 사고 방식

논리삭제

삭제방법 선택

  • 어떤 방법으로 삭제할 것인지는 시스템의 특성이나 테이블에 저장되어 있는 데이터의 특성에 따라 다름
    • 상황에 맞게 선택해야 함
  • SNS 서비스처럼 사용자의 개인정보를 다루는 시스템에서는 사용자가 탈퇴한 경우 데이터를 삭제함
    • 이 경우 개인정보를 취급하는 마스터 테이블에서 삭제할 경우에는 물리삭제를 하는 편이 안전함
      • 개인정보의 유출을 미연에 방지하는 측면에서 좋은 선택임
  • 쇼핑 사이트의 경우는 사용자가 주문을 취소할 경우에도 데이터를 삭제함
    • 이 경우 논리삭제 방법을 많이 사용함
    • 주문이 취소 되도 발주는 된 것으로, 해당 정보가 완전히 불필요한 것은 아니기 때문에

reference

SQL 첫걸음