데이터베이스와 테이블 구축 3
📌 테이블의 row 갱신
테이블에 있던 기존의 row를 갱신
하는 방법을 알아보자. 수정
또는 갱신
이라고 한다.
SELECT * FROM course_rating.student;
기존 row를 갱신하고 싶으면
UPDATE
문을 사용하면 된다.
✅ 김소원이라는 학생이 화학과에서 멀티미디어 학과로 전과했다고 가정하자.
UPDATE student SET major = '멀티미디어학과' WHERE id = 2;
UPDATE 테이블
: 해당 테이블을 갱신하라.SET 컬럼 = 새로운 값
: 컬럼을 새로운 값으로 설정한다.WHERE 조건
: 조건에 해당하는 row를 갱신하라.
갱신
할 때는 WHERE
절이 중요하다.
UPDATE student SET major = '멀티미디어학과;
WHERE
절 없이 위 처럼 사용하면 특정 row가 아닌 테이블에 있는 모든 row의 major 컬럼을 갱신하게 된다.
❗ 갱신할 때는
WHERE
절에 조건을 달아서 어떤 row를 갱신할 건지 지정해야 한다.
✅ 김소원이라는 학생이 이름을 차소원이라고 개명했다고 가정하자.
UPDATE student
SET major = '멀티미디어학과', name = '차소원'
WHERE id = 2;
한 개 이상의 컬럼을 갱신할 때는 콤마(,)
로 구분해주고 같은 형식으로 작성한다.
📌 컬럼의 기존 값을 기준으로 갱신
기말고사 성적을 나타내는 final_exam_result
테이블이 있다.
✅ 모든 학생의 점수에 +3점을 해준다고 가정하자.
UPDATE final_exam_result SET score = 100 WHERE id = 1;
UPDATE final_exam_result SET score = 63 WHERE id = 2;
UPDATE final_exam_result SET score = 18 WHERE id = 3;
위처럼 실행해도 되지만 번거로워진다.
UPDATE
문을 사용할 때는 기존 값을 그대로 활용하는 방법도 있다.
UPDATE final_exam_result SET score = score + 3;
모든 row의 score 컬럼의 값이 기존 값보다 3이 더 큰 값으로 갱신된다.
SELECT * FROM FOR_TEST.final_exam_result;
모든 학생들의 점수가 기존보다 3점 증가한 것을 확인할 수 있다.
UPDATE
문으로 갱신할 때는 SET score = score + 3
처럼 컬럼의 이름을 활용해서 기존 값을 기반으로 갱신하는 경우도 많다.
📌 테이블의 row 삭제
기존의 row를 삭제하는 방법에 대해 알아보자.
✅ 정유진 학생이 다른 학교로 편입하였다고 가정하자.
DELETE FROM student WHERE id = 4;
DELETE
: 삭제하라FROM 테이블
: 해당 테이블로부터WHERE 조건
: 조건에 해당하는 row를 삭제하라
❗
DELETE
문도 반드시WHERE
절을 작성해줘야 한다.
WHERE
절을 작성하지 않으면 테이블의 모든 row들이 삭제된다.
📌 물리 삭제 vs 논리 삭제
row를 삭제하는 방법에는 크게 2가지 방법이 있다.
- 물리 삭제
- 논리 삭제
앞서 배운 것처럼 데이터를 삭제해야 할 때 row를 바로 삭제해버리는 것을 물리 삭제
라고 한다.
반면 논리 삭제
는 삭제해야 할 row를 삭제하지 않고 삭제 여부
를 나타내는 별도의 컬럼을 두고, 거기에 삭제 되었음
을 나타내는 값을 넣는다.
예를 들어 주문 내역을 조정하는 order
테이블이 있다고 가정하자.
SELET * FROM FOR_TEST.order;
이 때 2번 주문을 한 고객이 주문을 취소하여 주문 내역을 삭제하려고 한다.
✅ 물리 삭제
DELETE FROM order WHERE id = 2;
✅ 논리 삭제
만약 논리 삭제
를 한다면 is_cancelled
같은 컬럼을 추가하고 해당 컬럼에 주문이 취소되었음을 나타내는 값을 넣어주면 된다.
UPDATE order SET is_cancelled = 'Y';
✅ 과제 : 데이터 갱신과 삭제
중고 거래 사이트에서 회원들이 매물로 올려놓은 상품들을 관리하기 위해 아래 그림처럼 생긴 item
이라는 테이블을 사용하고 있다.
id
: PRIMARY KEY 컬럼name
: 중고 물품 이름type
: 중고 물품 카테고리price
: 판매자가 제시한 가격description
: 판매자의 중고 물품에 대한 설명upload_date
: 판매자가 중고 물품 판매 게시글을 업로드한 날짜purchased
: 판매 완료 여부, 판매가 완료되었으면 ‘Y’ / 아직 판매되지 않았으면 ‘N’ 을 값으로 가짐is_deleted
: 게시글 삭제 여부, 판매자가 게시글을 삭제했으면 ‘Y’ / 게시글을 업로드해둔 상태면 ‘N’을 값으로 가짐
논리 삭제
방식을 사용하고 있다.
-
‘남성정장 상하의 세트' 중고 물품이 너무 팔리지 않아서인지 판매자가 삭제해버렸다. 이 row의 is_deleted 컬럼의 값을 Y로 갱신하라.
-
is_deleted 컬럼의 값이 Y이면서, 그 게시글 업로드일이 2020년 7월 5일 기준으로 365일보다 더 오래된 상품들의 row를 물리 삭제하라.
💻 풀이
UPDATE item
SET is_deleted = 'Y'
WHERE name = '남성정장 상하의 세트';
DELETE FROM item
WHERE is_deleted = 'Y'
AND DATEDIFF('2020-07-25', upload_date) > 365;
SELECT * FROM item;
Author And Source
이 문제에 관하여(데이터베이스와 테이블 구축 3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@revudn46/데이터베이스와-테이블-구축-3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)