✏️ [Database] 테이블에 데이터 추가 / 수정 / 삭제하기

박상민·2023년 11월 18일
0

Database

목록 보기
5/9
post-thumbnail

내용

  • 데이터 추가하기 (insert)
  • 데이터 수정하기 (update)
  • 데이터 삭제하기 (delete)
  • 조건절과 논리/비교 연산자 (where)

⭐️ 데이터 추가


우선 위와 같은 Employee 테이블이 있다고 하겠습니다. 각 attribute의 속성은 아래 사진과 같습니다.

그렇다면 이제 Employee 테이블에 데이터를 추가해보겠습니다.

테이블에 데이터를 추가하는 문법

INSERT INTO employee
VALUES (1, "MESSI", '1987-02-01', "M", "DEV_BACK", 100000000, null);

// 결과 //
Query OK, 1 row affected (0.05 sec)

이때 VALUES의 괄호에 들어가는 값들의 순서가 중요합니다.

  • 값들의 순서 <-> 테이블의 attribute의 순서

employee를 정의할 때 정해준 attribute의 순서에 따라서 값들을 작성해야합니다.
또한 모든 attrobute에 대응하는 값을 넣어줘야 합니다.

값을 넣는 순서는 변경을 못하나요?
가능합니다. 아래처럼 순서를 명시해주면 됩니다.

INSERT INTO employee(name, birth_data, sex, position, id)
VALUES ("JENNY", "2000-10-12", "F", "DEV_BACK", 3);

그렇다면 데이터를 한 번 더 추가하겠습니다.

INSERT INTO employee
VALUES (2, "JANE", '1996-05-05', "F", "DSGN", 40000000, null);

위의 코드를 실행했을 때 결과를 예상해봅시다. 문제 없이 데이터가 추가될까요?

답은 아니다입니다.

// 결과 //
ERROR 3819 (HY000): CHeck constraint 'employee_chk_2' uis violated.

위처럼 에러가 발생합니다.
왜 에러가 발생한 것일까요?

이런 상황에서 사용하기 좋은 문법이 있습니다.
mysql에서는 SHOW CREATE TABLE employee를 작성해주면 결과로 메시지들을 띄어주는데 중간에 아래와 같은 메시지가 있습니다.

오류 원인 메시지

CONSTRAINT 'employee_chk_2' CHECK (('salary' >= 50000000))

메시지를 읽어보니 'salary' attribute의 값이 조건을 만족하지 못했습니다.
초반에 나온 사진 중 employee 테이블의 attribute 속성을 나타낸 사진을 다시 보겠습니다.

사진을 보면 마지막 코드에 CHECK (salary>=50000000)가 있었는데 salary attribute의 값은 50000000 이상만 가능하다는 조건입니다.

우리가 추가해준 데이터는 salary의 값이 40000000으로 조건을 만족하지 못했기 때문에 에러가 발생한 것입니다.

에러 원인을 변경

INSERT INTO employee
VALUES (2, "JANE", '1996-05-05', "F", "DSGN", 90000000, null);

데이터를 추가했으니 제대로 추가가 됐는지 확인을 해보고 싶습니다. 이때는
SELECT * FROM employee; 문법을 사용하면 됩니다.

📌 INSERT Statement 정리

INSERT문은 크게 세 가지 형태로 분류가 됩니다.

  • 데이터를 하나만 추가하는 경우
    • INSERT INTO table_name VALUES (comma-separated all values);
      • 처음 Create Talbe을 할 때에 attribute 순서대로 모든 attribute에 대응하는 값을 넣어주는 쿼리
    • INSERT INTO table_name (attributes list)
      VALUES (attributes list 순서와 동일하게 comma-separated values);
      • 내가 원하는 일부 attribute에 대해서만 그 값들을 원하는 순서대로 넣고 싶을 때
  • 한 번에 한 테이블에 여러개의 데이터를 추가하는 경우
    • INSERT INTO table_name VALUES (..., ..), (..., ..), (..., ..);

⭐️ 데이터 수정

데이터를 수정하는 문법
UPDATE (수정할 테이블 이름) SET
(업데이트 하려는 attribute 이름) = (업데이트 할 attribute 값)
WHERE (조건)

아래 예시를 봅시다.

데이터 수정 문법 예시

UPDATAE employee SET dept_id = 1003 WHERE id = 1;

## 결과 ##
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0

수정은 했는데 적용이 됐는지 궁금합니다. 이때 확인을 해보고 싶다면
SELECT * FROM employee WHERE id = 1;를 작성해서 확인할 수 있습니다.

만약 이런 경우가 있을 수 있습니다.
회사에서 모든 개발자의 연봉을 2배 인상하기로 결정했습니다. 이때 모든 개발자의 salary를 2배로 변경해야합니다. 이때 위에서 나온 예시처럼 한 명씩 변경해야할까요?
너무나 번거롭지 않을까요?

이때 사용하는 방법이 있습니다.

여러 개의 수정을 동시에 하는 방법

UPDATA employee
SET salary = salary * 2
WHERE dept_id = (개발자들의 통합 ID);

위처럼 WHERE를 사용해서 조건에 맞는 데이터를 수정하면 됩니다.

문제! 회사의 모든 직원 연봉을 2배로 인상하려고 합니다. 이때 쿼리문은 어떻게 작성해야 할까요?

정답

UPDATE employee
SET salary = salary * 2

단순히 위 개발자의 개발자의 연봉을 2배 인상하는 쿼리에서 WHERE 문만 빼주면 됩니다.

📌 UPDATA Statement 정리

  • UPDATA table_name(s)

  • SET attribute = value [, attribute = value, .. ]

  • [ WHERE condition(s) ];

    • 조건을 걸 때

⭐️ 데이터 삭제

데이터 삭제 문법

DELETE FROM (테이블 이름) WHERE (삭제할 데이터 조건)

데이터 삭제 예시

DELETE FROM employee WHERE id = 8;

이때 삭제한 employee의 튜플이 Foreign Key로 연결되어 있는 튜플이 있는 경우에는 어떻게 할까요?

만약 employee에서 튜플이 지워졌는데 Foreign Key로 연결되어 있는 튜플에서는 데이터가 지워지지 않는다면 문제가 생길 수 있습니다.
이때 사용하는 것이 이전에 소개했던 CASCADE 입니다.

간략히 CASCADE를 소개하면 CASCADE를 사용하면 튜플이 삭제될 때 연결되어 있는 튜플 또한 같이 삭제해주거나, 값을 NULL로 만드는 등의 설정을 해줄 수 있습니다.

잘 사용한다면 굉장히 유용하게 사용할 수 있겠죠?

만약 회사에서 모든 직원을 해고한다고 했을 때의 쿼리문을 무엇일까요?

모든 직원을 해고

DELETE FROM employee;

DELETE FROM (테이블 이름); 을 해주면 해당 테이블의 모든 튜플들이 삭제가 됩니다.

📌 DELETE Statement 정리

  • DELETE FROM table_name
  • [ WHERE condition(s) ];

출처
글에 사용된 내용 및 사진은 모두 아래 영상의 자료입니다.
유튜브-쉬운코드
시니어 백엔드 개발자가 알려주는 데이터베이스 개론 & SQL

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글