DBMS DAY04(DML,삭제문, commit, rollback, 데이터 제어어, 컬럼 속성)

hn k·2023년 7월 25일

DBMS 수업

목록 보기
4/5
post-thumbnail

DML
DML(Data Manipuation Language)
데이터 조회 및 변형을 위한 명령어이다.

DML의 종류는 select, update, insert, delete가 있다.

1.update
업데이트는 지정한 테이블의 컬럼값을 변경해줄수가 있다.

예)
update 테이블명 set 컬럼1= 값1
where 조건;

2.insert
인설트는 create로 만든 테이블의 설정된 컬럼 값을 추가해줄수 있다.

예)
insert into 테이블명 values (값1, 값2...)
or
insert into 테이블명(컬럼1, 컬럼2...)
values (값1, 값2...)

삭제문
삭제문은 크게 drop, truncate, delete가 있다.

1.drop
drop은 테이블 존재 자체를 삭제시킨다.

2.Truncate
Truncate은 데이터만 통으로 삭제해 주지만 실제적으로는 테이블을 drop했다가 create해준다. 모든 행을 삭제하는 가장 빠르고 효율적인 방법이다.

3.delete
delete는 내가 삭제하고 싶은 데이터를 골라서 삭제가 가능하다.
하지만 한줄 한줄 삭제를 하기 때문에 많은 데이터를 삭제할려면 시간이 오래 걸리며 다른 삭제문과 다르게 복구가 가능한 방식이다.

COMMIT
commit은 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어이며 트랜잭션의 처리 과정을 데이터베이스에 반영하기 위해서, 변경된 내용을 모두 영구 저장하며 commit 수행하면 하나의 트랜젠션 과정을 종료하게 된다.

ROLLBACK
rollback은 작업중 문제가 발생했을 때 트랜젝션의 처리 과정에서 발생한 변경사항을 취소하고 트랜잭션 과정을 종료시킨다.
rollback은 이전 commit한 곳 까지만 복구해준다.


그림과 같이 요즘은 auto로 지원해주기 때문에 커밋과 롤백에 대한 이론만 알아두고 사용해주면 좋다.

데이터 제어어
사용자에게 권한 생성 혹은 권한 삭제 같은 명령어이다.
grant : 권한 생성
revoke : 권한 삭제

컬럼 속성

1.not null
not null은 널 값이 입력되지 못하게 하는 조건이다.

예)
CREATE TABLE null_test(
col1 varchar(20) NOT NULL,
col2 varchar(20) NULL,
col3 varchar(20)
);

INSERT INTO NULL_TEST (col1, col2)
VALUES ('bb', 'aa');
INSERT INTO NULL_TEST (col2, col3)
VALUES ('cc', ee');

하면 첫번째 인서트는 오류가 없지만 두번째 인서트부분에서는 오류가 발생한다.
그 이유는 col1이 not null로 설정했기 때문에 col1에 값을 넣어주지 않으면 null값으로 입력받아서 오류가 발생한다.

2.unique
unique은 중복된 값이 입력되지 못하게 하는 조건문이다.

예)
CREATE TABLE unique_test(
col1 varchar2(20) UNIQUE NOT NULL,
col2 varchar2(20) UNIQUE,
col3 varchar2(20) NOT NULL,
col4 varchar2(20) NOT NULL,
CONSTRAINTS temp_unique UNIQUE(col3, col4)
);

INSERT INTO UNIQUE_TEST (col1,col2,col3,col4)
VALUES ('aa','bb','cc','dd');

INSERT INTO UNIQUE_TEST (col1,col2,col3,col4)
VALUES ('aa','bb2','cc2','dd2');
하면 첫번째에서는 오류가 발생하지 않지만 두번째부분을 인서트하면 오류가 발생한다.
그 이유는 col1에 이미 aa라는 컬럼값이 입력되었기 때문에 동일한 aa값은 입력이 불가능하다.

3.CHECK
CHECK은 주어진 값만 허용하는 조건문이다.

예)
CREATE TABLE check_test(
gender varchar2(10) NOT NULL
CONSTRAINTS check_gender CHECK (gender IN ('M','F'))
);

INSERT INTO CHECK_TEST values('M');

INSERT INTO CHECK_TEST values('F');

이건 위에 M과 F만 허용한다고 지정했기 때문에 gender에서 입력받을수 있는것은 M과F뿐이다.

4.primary key
기본키라고 하며 기본적인 제약조건들은 테이블을 생성할 때 같이 정의하며 테이블당 하나만 정의가 가능하다.
primary key는 NOT NULL + UNIQUE + Index 합친 느낌이며 자동 index가 생성되는데 이는 검색 키로서 검색 속도를 향상시켜준다.

예)
create table pktest(
pkCol1 varchar2(10) primary key
);

create table pktest(
	pkCol1 varchar2(10) 
		constraints pk이름 primary key
);

create table pktest(
	pkCol1 varchar2(10), 
	pkCol2 varchar2(10),
	pkCol3 varchar2(10),
	constraints pk이름 primary key(pkCol1)
);

5.FOREIGN KEY
FOREIGN KEY가 정의된 테이블을 자식 테이블이라 칭하며 참조되는 테이블 즉 PRIMARY KEY가 있는 테이블을 부모 테이블이라고 한다.
부모 테이블은 PRIMARY KEY컬럼에 존재하는 데이터만 자식 테이블에 입력할 수 있으며 부모 테이블은 자식의 데이터나 테이블이 삭제된다고 영향을 받지 않는다.

예)
create table fk_test(
department_id varchar2(10)
constraints fk이름 references departments(departments_id)

);
 create table fk_test(
	department_id	varchar2(10),
	...
	constraints dept_fk foreign key(departments_id)
	reference departments (department_id)
);

6.삭제 옵션
-ON DELETE CASCADE
참조되는 부모 테이블 값이 삭제되면 연쇄적으로 자식 테이블 값 역시 삭제된다.

예)
department_id varchar2(10)
constraints fk이름 references departments(departments_id) ON DELETE CASCADE

);

인서트에 값을 입력하고 한가지의 테이블 값을 삭제하면 부모 자식 테이블 값을 동시에 삭제시켜준다.

-ON DELETE SET NULL
참조되는 부모테이블 값이 삭제가 되면 해당 참조하는 자식 테이블의 값들은 NULL값으로 설정된다.

예)
department_id varchar2(10)
constraints fk이름 references departments(departments_id) ON DELETE SET NULL

);

위에랑 다르게 인서트하고 테이블 값을 삭제하면 부모테이블 값은 삭제되지만 자식 테이블 값은 NULL로 변한다.

profile
국비 교육 받으면서 교육받은 내용을 다시 정리해보는 벨로그

0개의 댓글