2025/03/25 TIL

김학열·2025년 3월 25일

행 추가하기(INSERT)

  • 행 추가하기(INSERT)
    • SELECT 명령은 데이터 검색을 위한 것으로, 질의를 하면 데이터베이스 서버가 클라이언트로 결과를 반환하는 형식으로 처리
    • 데이터를 추가할 경우 이와 반대로 클라이언트에서 서버로 데이터를 전송하는 형식을 취함
    • RDBMS에서는 INSERT 명령을 사용해 테이블의 행 단위로 데이터를 추가
      -- 1. 테이블 만들기
      CREATE TABLE students (
          student_id SERIAL PRIMARY KEY,
          name VARCHAR(100) NOT NULL,
          age INTEGER,
          major VARCHAR(100),
          email VARCHAR(100) UNIQUE,
          enrolled_date DATE DEFAULT CURRENT_DATE
      );
      -- major 열은 varchar(100)이므로 최대 길이가 100인 문자열을 저장할 수 있음
      
      -- 2. INSERT문으로 행 추가하기
      INSERT INTO students (name, age, major, email)
      VALUES 
      ('김지민', 21, '컴퓨터공학', 'jimin.kim@example.com'),
      ('이서준', 23, '경영학', 'seojoon.lee@example.com'),
      ('박하윤', 22, '디자인학과', 'hayoon.park@example.com');
      
      -- 3. SELECT문으로 추가된 행 확인하기
      SELECT *
      FROM students;
    • INSERT 명령을 실행해도 처리상태만 표시될 뿐 SELECT 명령을 실행했을 때처럼 결과를 출력하진 않음
    • SELECT 명령의 경우 실행하면 그 결과가 클라이언트에 반환되지만, INSERT명령은 데이터가 클라이언트에서 서버로 전송되므로 반환되는 결과가 없음
    • NOT NULL의 제약
      • 테이블에 저장하는 데이터를 설정으로 제한하는 것을 통틀어 ‘제약’이라고 부름
      • NOT NULL 제약이 걸려있는 열은 NULL 값을 허용하지 않음
      • NOT NULL 제약은 그중 하나로 이 외에도 다양한 제약이 있음
        -- 4. NOT NULL의 제약
        INSERT INTO students (name, age, major, email)
        VALUES 
        (NULL, 21, '컴퓨터공학', 'jimin.kim@example.com');
    • DEFAULT
      • Default는 명시적으로 값을 지정하지 않았을 경우 사용하는 초깃값
      • Default 값은 테이블을 정의할 때 지정할 수 있으며, 열을 지정해 행을 추가할 때, 지정하지 않은 열은 Default 값을 사용하여 저장
      • Default 값을 지정하는 것을 ‘DEFAULT 를 명시적으로 지정하는 방법’
        -- 5. DEFAULT로 값을 지정해 행 추가하기
        INSERT INTO students (name, age, major, email)
        VALUES 
        ('김연준', DEFAULT, '공간정보공학', 'yeonjun.kim@example.com');
      • 암묵적으로 디폴트 저장 : 열을 지정하지 않으면 디폴트 값이 추가
        -- 6. 암묵적으로 디폴트값을 가지는 행 추가하기
        INSERT INTO students (name, age)
        VALUES 
        ('김학준', 32);
        
        SELECT *
        FROM students;

##삭제하기(DELETE)

  • 삭제하기(DELETE)
    • 데이터베이스는 하드디스크와 같이 저장장치에 데이터를 저장해 관리
    • 저장장치에 저장용량이 정해져 있는 만큼 데이터를 무제한으로 저장할 수는 없음
    • 실제로 시스템에서 ‘삭제’나 ‘취소’ 버튼을 이용해 데이터를 삭제하는 경우가 많을 때 DELETE 명령을 사용
    • DELETE FROM students; 로 DELETE 명령어를 실행하면 students 테이블의 모든 데이터가 삭제
    • 특별한 경우가 아닌 이상, WHERE 구를 지정한 후 해당 조건식에 맞는 행만 삭제
      -- 7. 이름이 김학준인 행만 삭제
      DELETE FROM students WHERE name = '김학준';
      
      -- 8. 삭제된 행 확인
      SELECT * 
      FROM students;
    • 물리삭제와 논리삭제
      • 데이터베이스에서 데이터를 삭제하는 방법은 용도에 따라 크게 ‘물리삭제’와 ‘논리삭제’로 나뉨
      • 물리삭제와 논리삭제는 전용 SQL 명령이 따로 존재 하지 않으며, 시스템 설계 분야 내용
      • 물리삭제
        • SQL의 DELETE 명령을 사용해 직접 데이터를 삭제하는 방식
        • 회원이 탈퇴할 경우, 개인정보를 취급하는 마스터 테이블에서 삭제할 경우 물리삭제를 하는 편이 안전할 것
      • 논리삭제
        • 삭제한 것으로 가정하기. ‘삭제플래그’를 사용해서 논리삭제를 구현
        • 논리삭제는 데이터를 삭제하지 않기 때문에 삭제되기 전의 상태로 간단히 되돌릴 수 있음
        • 쇼핑 사이트의 경우 사용자가 주문을 취소할 경우에도 데이터를 삭제, 이러한 경우에는 논리삭제 방법을 사용
        • 주문이 취소되었다고 해도 발주는 된 것으로, 해당 정보가 완전히 불필요한 것이라고 말할 수는 없음
      • 물리삭제와 논리삭제는 용도에 맞게 선택해야 함
        -- 9. 물리삭제와 논리삭제를 위한 테이블 생성
        CREATE TABLE members (
            member_id SERIAL PRIMARY KEY,
            name VARCHAR(100) NOT NULL,
            email VARCHAR(100) UNIQUE NOT NULL,
            join_date DATE DEFAULT CURRENT_DATE,
            is_deleted BOOLEAN DEFAULT FALSE
        );
        
        INSERT INTO members (name, email)
        VALUES 
        ('홍길동', 'hong@example.com'),
        ('김영희', 'kim@example.com'),
        ('박철수', 'park@example.com');
        
        -- 10. 박철수(member_id=3)를 논리삭제 처리
        UPDATE members
        SET is_deleted = TRUE
        WHERE member_id = 3;
        
        -- 실제 서비스에서는 삭제된 회원을 제외하고 조회
        SELECT * 
        FROM members
        WHERE is_deleted = FALSE;
        
        -- 11. 김영희(member_id=2)를 테이블에서 완전히 삭제
        DELETE FROM members
        WHERE member_id = 2;
        
        SELECT * 
        FROM members;

데이터 갱신하기(UPDATE)

  • 데이터 갱신하기(UPDATE)
    • 데이터 갱신 작업은 시스템을 다루는 과정에서 자주 발생
    • 데이터를 잘못 입력하여 수정해야 하는 경우도 빈번
    • DELETE와 달리 UPDATE는 셀 단위로 데이터를 갱신할 수 있음
    • WHERE 구에 조건을 지정하면 그에 일치하는 행을 갱신할 수 있음
    • UPDATE 명령에서는 SET 구를 사용하여 갱신할 열과 값을 지정
    • 문법 ‘SET 열명 = 값’, =는 비교 연산자가 아닌, 값을 대입하는 대입 연산자
profile
QA/QC 1기 김학열

0개의 댓글