ECC/SQL 첫걸음

[SQL] 4. 데이터의 추가, 삭제, 갱신

jiheechoi 2025. 3. 28. 23:49

1. 행 추가하기 - INSERT

1) INSERT로 행 추가하기

-RDBMS에서는 INSERT 명령을 사용해 테이블의 행 단위로 데이터를 추가할 수 있음.

-데이터베이스를 처음 생성하면 테이블에는 아무런 데이터도 저장되어 있지 않은 상태임.

-SELECT 명령을 통해 기존의 테이블에 어떤 데이터가 저장되어 있는지 확인할 수 있고, DESC 명령을 통해 각 열에 어떤 유형의 데이터를 저장할 수 있는지 확인 가능함.

-INSERT 명령의 SYNTAX

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

 

   → 행의 데이터는 다음과 같이 VALUES 구를 사용해 지정해야 함. 

   → INSERT 명령의 경우 실행하면 데이터가 클라이언트에서 서버로 전송되므로 반환되는 결과는 없고 처리상태만 표시됨.

 

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

-INSERT 명령으로 행을 추가할 경우 값을 저장할 열을 지정할 수 있음.

-SYNTAX

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

 

   → 열을 지정할 경우 테이블명 뒤에 괄호로 묶어 열명을 나열하고 VALUES 구로 값을 지정함. VALUES 구에 값을 지정할 경우에는 지정한 열과 동일한 개수로 값을 지정해야 함.

 

3) NOT NULL 제약

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

-제약: 테이블에 저장하는 데이터를 설정으로 제한하는 것. NOT NULL 제약은 그 중 하나로 이외에도 다양한 제약이 있음.

-NOT NULL 제약: 이 제약이 걸린 열은 NULL 값을 허용하지 않음.

 

4) DEFAULT

-Default는 명시적으로 값을 지정하지 않았을 경우 사용하는 초깃값을 말함.

-Default 값은 테이블을 정의할 때 지정할 수 있음.

-열을 지정해 행을 추가할 때 지정하지 않은 열은 Default 값을 사용하여 저장됨.

   → 이를 디폴트를 암묵적으로 지정하는 방법이라고 함.(디폴트값으로 저장할 열을 INSERT 명령문에서 별도 지정하지 않는 것)

   → 디폴트를 명시적으로 지정하는 방법은 VALUES 구에서 DEFAULT 키워드를 사용하여 행을 추가하는 것임.

ex)

INSERT INTO sample411(no, d) VALUES (2, DEFAULT);

 

2. 삭제하기 - DELETE

1) DELETE로 행 삭제하기 

-RDBMS에서 데이터를 삭제할 경우에는 행 단위로 DELETE 명령을 수행함.

-SYNTAX

DELETE FROM 테이블명 WHERE 조건식

 

   → WHERE 구를 생략할 경우 모든 행을 대상으로 동작함. 

   → DELETE 명령은 WHERE 조건에 맞는 모든 행을 삭제함.

3. 데이터 갱신하기 - UPDATE 

1) UPDATE로 데이터 갱신하기

-RDBMS에서는 UPDATE 명령으로 테이블의 셀 값을 갱신할 수 있음.

-SYNTAX

UPDATE 테이블명 SET 열명=값 WHERE 조건식

 

   → UPDATE 명령에서는 SET 구를 사용하여 갱신할 열과 값을 지정함. 이때 '='은 비교 연산자가 아닌 값을 대입하는 대입 연산자임에 유의해야 함. 

   → SET 구에서 테이블에 존재하지 않는 열을 지정하면 에러가 발생하여 UPDATE 명령은 실행되지 않음. 

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

   → UPDATE 명령의 WHERE 조건문 역시 DELETE 명령과 마찬가지로 조건에 일치하는 모든 행이 그 대상이 됨. 그리고 WHERE 구를 생략하면 테이블의 모든 행이 갱신 대상이 됨.

 

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

-SET 구에서 갱신할 값을 열이 포함된 식으로도 표기할 수 있음. 이때 해당 열이 갱신 대상이 되는 열이라 해도 상관이 없음.

   → ex) UPDATE sample41 SET no = no + 1;

 

3) 복수열 갱신

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

-SYNTAX

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

 

-SET 구의 실행 순서

   → Oracle 에서는 SET 구에 기술한 식의 순서가 처리에 영향을 주지 않음.

   → MySQL에서는 SET 구에 기술된 순서로 갱신 처리가 일어남.

 

4) NULL로 갱신하기

-갱신할 값을 NULL로 지정하면 됨(NULL 초기화)

   → ex) UPDATE sample41 SET b = NULL

-다만 NOT NULL 제약이 설정되어 있는 열은 NULL이 허용되지 않음. 

4. 물리삭제와 논리삭제

1) 두 종류의 삭제 방법

-데이터베이스에서 데이터를 삭제하는 방법은 용도에 따라 '물리삭제'와 '논리삭제'로 구분됨.(단, 이는 SQL 명령이 두 가지 존재하는 것이 아닌 데이터 삭제에 관한 두 가지 사고방식이라고 이해하는 것이 맞음.)

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

   → 논리삭제: 테이블에 '삭제플래그'와 같은 열을 미리 준비해 두고, 테이블에서 실제로 행을 삭제하는 대신 UPDATE 명령을 이용해 '삭제플래그'의 값을 유효하게 갱신해두자는 발상에 의한 삭제방법을 말함. 즉, 실제 테이블 안에 데이터는 남아있지만 참조할 떄에는 삭제플래그가 삭제로 설정된 행은 제외하는 SELECT 명령을 실행하여 해당 행이 삭제된 것처럼 보이게 하는 것.

  • 논리삭제의 장점: 데이터를 삭제하지 않기 때문에 삭제되기 전의 상태로 간단히 되돌릴 수 있음.
  • 논리삭제의 단점: 삭제해도 데이터베이스의 저장공간이 늘어나지 않는 점, 데이터베이스의 크기가 증가함에 따라 검색속도가 떨어지는 점 등

2) 삭제방법 선택하기

-물리삭제와 논리삭제는 용도에 맞게 선택하는 것이 좋음.

   → 물리삭제의 예) SNS 서비스처럼 개인정보를 다루는 시스템에서 사용자가 탈퇴한 경우 사용자의 데이터는 물리삭제하는 편이 좋음.

   → 논리삭제의 예) 쇼핑사이트에서 사용자가 주문을 취소하는 경우