백엔드/SQL 첫걸음

4장 데이터의 추가, 삭제, 갱신

dlng23 2024. 10. 5. 03:02

16강. 행 추가하기 - INSERT

INSERT INTO 테이블명 VALUES(값1, 값2, ...)

1. INSERT로 행 추가하기

테이블의 행 단위로 데이터를 추가

 

ex)

테이블 확인

SELECT * FROM test1;
no a b

 

 

테이블의 열 구성 확인

DESC test;
Field  Type Null Key Default Extra
no int(11) NO   NULL  
a varchar(30) YES   NULL  
b date YES   NULL  

 

 

테이블에 행 추가하기

INSERT INTO test1 VALUES(1, 'ABC', '2014-01-25');

 

테이블 확인

SELECT * FROM test1;
no a b
1 ABC 2014-01-25

 

 

2. 값을 저장할 열 지정하기

VALUES 구에 값을 지정할 경우에는 지정한 열과 동일한 개수로 값을 지정해야 함

INSERT INTO 테이블명(열1, 열2, ...) VALUES(값1, 값2, ...)

지정한 열에 값을 넣어 추가할 수 있음

 

ex)

INSERT INTO test1(a, no) VALUES('XYZ', 2);

SELECT * FROM test1;
no a b
1 ABC 2014-01-25
2 XYZ NULL

별도의 값을 지정하지 않았던 b열에는 기본값인 NULL이 지정됨

 

3. NOT NULL 제약

행을 추가할 때 유효한 값이 없는 상태(NULL)로 두고 싶을 경우에는 VALUES 구에서 NULL로 값을 지정할 수 있음

INSERT INTO test1(no, a, b) VALUES(NULL, NULL, NULL);

이 경우에는 에러 발생

no 열에 대해 NULL 값을 허용하지 않는 NOT NULL 제약이 걸려있기 때문

 

4. DEFAULT

VALUES 구에서 DEFAULT 키워드를 사용하면 디폴트 값이 저장됨

 

- 암묵적으로 디폴트 저장

디폴트값으로 저장할 열을 INSERT 명령문에서 별도 지정하지 않을 시 디폴트 값으로 추가됨

 

 

17강. 삭제하기 - DELETE

DELETE FROM 테이블명 WHERE 조건식

1. DELETE로 행 삭제하기

테이블의 행 단위로 데이터를 삭제

WHERE 구를 생략할 경우 모든 행을 대상으로 동작하여 모든 데이터가 사라지게 됨

WHERE 구를 지정한 경우에는 해당 조건식에 맞는 행만 삭제 대상이 됨

 

ex)

테이블 확인

SELECT * FROM test1;
no a b
1 ABC 2014-01-25
2 XYZ NULL
3 NULL NULL

 

행 삭제

DELETE FROM test1 WHERE no = 3;

SELECT * FROM test1;
no a b
1 ABC 2014-01-25
2 XYZ NULL

 

2. DELETE 명령 구

WEHRE 구에서 조건식을 변경하여 삭제할 행을 바꿀 수 있음

DELETE 명령에서도 SELECT 명령처럼 WHERE 구를 지정할 수 있음

ORDER BY 구는 사용X  (MySQL에서는 다름)

 

 

18강. 데이터 갱신하기 - UPDATE

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

1. UPDATE로 데이터 갱신하기

UPDATE 명령 : 테이블의 셀 값을 갱신하는 명령

DELETE와 달리 UPDATE는 셀 단위로 데이터를 갱신할 수 있음

WHERE 구에 조건을 지정하면 그에 일치하는 행을 갱신할 수 있음

WHERE 구를 생략한 경우에는 테이블의 모든 행이 갱신됨

 

SET 구를 사용하여 갱신할 열과 값을 지정

'SET 열명 = 값' : '=' 은 대입연산자

테이블에 존재하지 않는 열을 지정하면 에러 발생, UPDATE 명령 실행되지 않음

 

값은 자료형에 맞는 값을 지정해야 함

 

ex)

테이블 확인

SELECT * FROM test1;
no a b
1 ABC 2014-01-25
2 XYZ NULL

 

 

셀 값 갱신

UPDATE test1 SET b = '2014-09-07' WHERE no = 2;

SELECT * FROM test1;
no a b
1 ABC 2014-01-25
2 XYZ 2014-09-07

 

2. UPDATE로 갱신할 경우 주의사항

SET 구에서 = 은 대입 연산자

갱신할 값을 열이 포함된 식으로도 표기할 수 있음, 해당 열이 갱신 대상이 되는 열이어도 상관X

 

ex)

UPDATE test1 SET no = no + 1;

갱신은 행 단위로 처리되므로 현재의 no 값은 그 행이 갱신되기 전의 값에 해당

 

3. 복수열 갱신

UPDATE 명령의 SET 구에서는 필요에 따라 콤마(,)로 구분하여 갱신할 열을 여러 개 지정할 수 있음

 

ex)

UPDATE test1 SET a = 'xxx' WHERE no = 2;
UPDATE test1 SET b = '2014-01-01' WHERE no = 2;

UPDATE test1 SET a = 'xxx', b = '2014-01-01' WHERE no = 2;

 

- SET 구의 실행 순서

UPDATE test1 SET no = no + 1, a = no;	# ①
UPDATE test1 SET a = no, no = no + 1;	# ②

데이터베이스 제품에 따라 처리 방식이 달라짐

 

test1 테이블

no a b
2 ABC 2014-01-25
3 XYZ 2014-09-07

 

MySQL의 경우

명령① 실행

no a b
3 3 2014-01-25
4 4 2014-09-07

 

명령② 실행

no a b
4 3 2014-01-25
5 4 2014-09-07

 

MySQL UPDATE 명령 실행 전 테이블이라고 가정

Oracle의 경우

명령① 실행

no a b
3 2 2014-01-25
4 3 2014-09-07

 

명령② 실행

no a b
4 3 2014-01-25
5 4 2014-09-07

 

MySQL 에서는 ①을 실행했을 때 no 열과 a열의 값은 같아지지만, ②를 실행하면 no 열과 a 열의 값은 서로 달라짐

Oracle에서는 ①을 실행해도 ②를 실행해도 a 열 값은 'no - 1' 상태를 유지함

 

⇒ Oracle에서는 SET 구에 기술한 시의 순서가 처리에 영향을 주지 않지만,

MySQL 에서는 SET 구에 기술된 순서로 갱신 처리가 일어나므로 no 열의 값은 갱신된 이후의 값을 반환함

따라서 MySQL의 경우, 갱신식 안에서 열을 참조할 때는 처리 순서를 고려해야 함

 

4. NULL로 갱신하기

UPDATE 명령으로 셀 값을 NULL로 갱신할 수 있음 → 'NULL 초기화'

NOT NULL 제약이 설정되어 있는 열은 NULL이 허용되지 않음 (제약이 설정되어 있는 경우 에러 발생)

 

 

19강. 물리삭제와 논리삭제

데이터베이스에서 데이터를 삭제하는 방법은 용도에 따라 '물리삭제'와 '논리삭제' 두 가지(사고 방식)로 나뉨

1. 두 종류의 삭제방법

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

논리삭제 : 테이블에 '삭제플래그' 같은 열을 미리 준비해 두어 테이블에서 실제로 행을 삭제하는 대신, UPDATE 명령을 이요해 '삭제플래그'의 값을 유효하게 갱신해두자는 발상에 의한 삭제 방법

 

논리삭제의 경우 테이블 안에 데이터는 남아있지만, 참조할 때에는 '삭제플래그'가 삭제로 설정된 행을 제외하는 SELECT명령 실행

 

논리삭제의 장점 : 데이터를 삭제하지 않기 때문에 삭제되기 전의 상태로 간단히 되돌릴 수 있음

논리삭제의 단점 : 데이터베이스의 저장공간이 늘어나지 않음, 데이터베이스의 크기가 증가함에 따라 검색속도가 떨어짐

 

2. 삭제방법 선택하기

어떤 방법으로 삭제할 것인지는 시스템의 특성이나 테이블에 저장되어 있는 데이터의 특성에 따라 다르기 때문에

상황에 맞게 선택해야 함

 

'백엔드 > SQL 첫걸음' 카테고리의 다른 글

6장 데이터베이스 객체 작성과 삭제  (0) 2024.10.12
5장 집계와 서브쿼리  (0) 2024.10.11
3장 정렬과 연산  (0) 2024.10.05
2장 테이블에서 데이터 검색  (0) 2024.09.27
1장 데이터베이스와 SQL  (0) 2024.09.27