나만의 IT 기억 저장소/SQL 데이터베이스

DML - insert, update, delete 기본구문

퓨어리1 2021. 4. 21. 14:48

DML : Data Manipulation Language

 

매니풀레이션 -> 조작 조종

 

 

1) insert   ( 세트 : insert into )

테이블에 새로운 레코드 삽입

모든 속성 또는 부분 속성값 삽입 

 

(구문1 : 전체)

insert into 테이블이름

   values(값1, 값2, .... 컬럼m)

 

예)

insert into 학과

  values('무슨과', '무슨대학', '주소', '전화번호', 123)

 

위와 같은 레코드값 삽입됨.

문자는 반드시 ' 문자 ' 작은 따옴표를 넣어야 함.

숫자는 그대로..

 

 

(구문2 : 부분)

insert into 테이블이름(컬럼1, 컬럼4, ....  컬럼m)

  values(값1, 값4, ... 값m)

 

예)

insert into 학과(학과이름, 단과대학, 졸업학점)

  values('무슨과', '무슨대학', 120)

 

이런식으로 해당 컬럼을 따로 넣어주고 그에 대응하는 값만 부분 입력하는 방식

 

결국 맨 마지막줄에 입력한 '무슨과' '무슨대학' 120 의 자료가

전체 또는 부분으로 삽입이 됨을 알 수 있음

 

 

2) update ( 세트 : update set )

테이블의 레코드 특정 컬럼값을 수정

 

(구문1)

update 테이블이름

  set 컬럼1=값1 [,컬럼2=값2, .... 컬럼n=값n)

  [where조건]

 

컬럼값 1개만 바꾸려면

set 컬럼1=어쩌고      형식으로 바꾸고

컬럼값 여러개를 변경시

set 컬럼1=값어쩌고, 컬럼2=값 어쩌고, .... 이런식으로 변경

 

where는 선택이지만... 전체를 변경해야하는 극히 작은 경우를 제외하고는

DML문에서는 where는 무조건 사용해야 함.. 문제가 안생김..

 

 

(구문2 : 수식 적용) 

update 테이블_이름

  set 컬럼1=수식1 [,컬럼2=수식2, .... 컬럼n=수식n)

    [where조건]

 

 

예1)

 

update 학생

  set 주소='http://s.s.s.s.s.'

    where 학과이름='수학과'

 

테이블명 : 학생

컬럼명 : 주소

 

학과이름이라는 컬럼의 값이 '수학과' 일 때 주소를 'https://s.s.s.s' 로 변경하라.. 는 의미

 

예2)

 

잔액이 100,000 원 이하인 계좌에 5% 이자를 지급한다.

 

update 고객계좌

  set 잔액=잔액*1.05

     where 잔액<=100000

 

 

테이블명 : 고객계좌

컬럼명 : 잔액

 

고객계좌 테이블의 잔액이 10만원 이하의 값들을

+ 5% 지급적용한다.

 

 

1) delete ( 세트 : delete from + where)

 

조건에 일치하는 레코드 집합을 테이블에서 삭제.

특정 컬럼 값만을 삭제할 수는 없고 레코드 단위로만 삭제해야 함 --> 특정 컬럼값 삭제는 null 값을 update 하는 방식으로..

 

 

(구문)

delete from 테이블명

          [where 조건]     -> 그러나 필수

 

예1)

 

delete from 음악

   where 음악장르='kpop'

 

음악 테이블의 음악장르 레코드를 삭제

 

<주의사항>

update 나 delete 등의 구문을 입력했는데도

작동이 되지 않거나 오류가 나오는 경우는

 

해당 내용이 기본키 등 참조가 되어있기 때문에

그걸 먼저 삭제해야만 이상없이 삭제되는 경우가 자주 있다. (고 한다)

 

 

예2) 모든 음악장르 레코드를 삭제하라.  고 했는데

 

delete from 음악

 

이렇게 한다면 구문에는 문제가 없으나 테이블명 '음악'의 모든 레코드가 삭제된다.

따라서 무조건 where 를 넣어야 한다.

 

희박한 확률로 공부나 개발중일 때 초기화를 한다던가 등의 사유가 있는 경우도 있으나

어지간해서는 다 지우는 내용은 없고, 특히 라이브로 도는 운영중인 경우는 더더욱 없다.

 

따라서 반드시 where를 넣어 조건을 명확히 지정해야 한다.

 

관련해서 mySQL 등에서

SAFE UPDATES 모드라는 것이 있고 기본적으로 적용되어 있다. (고 한다.)

 

where 절이 없는 구문시 변경/삭제가 안되도록...

 

변경 구문 : set sql_safe_updates=0 또는 1     (1이 활성화)