04. Data 추가/수정/삭제

Last updated - 2024년 11월 21일 Edit Source

    유튜버 쉬운코드 님의 데이터베이스 강의를 정리한 내용


    # 데이터 다루기

    이전 강의에서 DB를 만들었으니 이제 다뤄보자.


    # 데이터 추가



    1
    
    INSERT INTO 테이블명 VALUES (1, 2, 3, ...);
    
    • 테이블을 정의할 때 attribute의 순서대로 데이터를 넣어줘야 함
    • 테이블에 정의된 모든 attribute에 값을 넣어야 함
      • null이 허용되어있으면 임시로 null이라도 넣어야 함

    1
    
    INSERT INTO 테이블명 VALUES (속성이름1, 속성이름2, ...) INTO ('값1', '값2', ... );
    
    • 테이블에 값을 넣는 attribute의 순서에 자유도가 생겼음
    • 넣고 싶은 attribute에만 값을 넣을 수 있음
      • 빈 곳에는 DEFAULT값이 있으면 DEFAULT, 없으면 NULL이 들어감

    1
    
    INSERT INTO 테이블명 VALUES (1, 2, 3, ...), (1, 2, 3, ...), ...;
    
    • 위 두개는 한 번에 하나의 데이터(튜플)을 넣는 것인데 이거는 한 번에 여러 데이터를 넣는것


    데이터 조회 맛보기

    1
    2
    3
    
    SELECT 속성 FROM 테이블명;
    SELECT * FROM 테이블명;
    테이블명에 있는거 전부 가져오기
    


    # 데이터 수정


    1
    2
    3
    
    UPDATE 테이블명 
    SET 속성1 = 1 
    [WHERE 조건];
    



    ex) 개발팀 (dept_id가 1003)의 연봉을 2배 인상하려고 한다면?

    1
    2
    3
    
    UPDATE employee
    SET salary = salary * 2
    WHERE dept_id = 1003;
    



    ex) 프로젝트 ID 2003에 참여한 임직원의 연봉을 2배 인상하려고 한다면?

    1
    2
    3
    
    UPDATE employee, works_on
    SET salary = salary * 2;
    WHERE id = empl_id and proj_id = 2003;
    
    • id = empl_id 부분이 두 employeeworks_on 테이블을 연결시키는 부분

    1
    2
    3
    
    UPDATE employee, works_on
    SET salary = salary * 2;
    WHERE employee.id = works_on.empl_id and works_on.proj_id = 2003;
    
    • 근데 직관적이지 않아서 테이블명.속성의 형태로 바꿔줬음


    # 데이터 삭제


    1
    2
    
    DELETE FROM 테이블명
    [WHERE 조건];
    
    • WHERE 절이 없으면 테이블의 모~든 튜플이 사라지는거라서 주의하자.



    ex) John이 퇴사해서 employee 테이블에서 John 정보 삭제해야함

    • John의 employee ID = 8, 현재 John은 project 2001에 참여 중

    1
    
    DELETE FROM employee WHERE id = 8;
    
    • 그렇다면 WORKS_ON 테이블에서도 따로 지워야할까?

    • WORKS_ON 테이블의 설정이 CASCADE로 되어있어서 employee 테이블만 지워도 반영됨



    ex) Dingyo가 두 개의 프로젝트 참여 중인데 하나에서 빠지기로 했으면?

    1
    
    DELETE FROM works_on WHERE impl_id = 5 and proj_id = 2002;
    



    ex) Dingyo가 2001 프로젝트만 집중하고 나머지는 다 빠지려면?

    1
    
    DELETE FROM works_on WHERE impl_id = 5 and proj_id <> 2001;
    
    • <> 이것은 제외한다는 의미!! , != 이거랑 동일한 표현

    # 예제

    # 데이터 추가 오류

    • PK 중복되니까 에러발생

    • CHECK 조건에서 연봉이 5천만원 이상이라고 했었으니까 에러 발생

    • SHOW CREATE TABLE 테이블명;으로 테이블 만들어진거 확인 가능

    • 아직 FOREIGN KEY가 없는데 111로 추가해버렸으니까
    • a foreign key constraint falis는 참조 무결성 제약조건 위배를 의미
      • 참조하는 값이 실제로 그 테이블에 있을 때에만 값을 지정할 수 있음

    Comment