4 minute read

22일차

220830

평가 대비

Integrity : 무결성 violation : 위반, 위배 constraints : 제약 조건 insufficient : 불충분한 privileges : 권한

DDL (Data Definition Language; 데이터 정의어)

객체를 수정, 삭제, 생성하는 명령어

create / drop / alter

Create

객체를 생성함

CREATE TABLE table_name(
		-- 제약 조건들
		-- 컬럼명 자료형 제약조건
)

SQL 자료형

  • number; 숫자
  • varchar; 문자열
    • 자료형의 크기를 꼭 기입해주어야 함 varchar(20)
    • 5바이트를 저장하게 될 시 남은 15바이트를 자동으로 줄여버림
    • 일반적인 문자열 → char() : 하나의 컬럼에 값이 수시로 바뀌는 경우
  • date, timestamp; 시간 자료형

제약 조건 (Constraint)

입력되야 할 데이터의 조건을 주는 문법

Constraint

시스템 카탈로그로 부터 유저가 생성한 제약조건 확인하기

select * from user_constraints;

제약 조건 명 지정하기

id number constraint id_pk primary key; -- 제약 조건 명 설정 id_pk

-- 여러 제약조건이 붙어도 똑같이 만들 수 있다.

NOT NULL

해당 컬럼의 값이 NULL 이 되지 못하게 함

column1 varchar(20) NOT NULL -- 비울 수 없어용
-- cannot insert NULL into ("KH"."CAFE_MENU"."PPRICE") error
														-- 계정. 테이블. 컬럼

PRIMARY KEY (기본키, 식별자 컬럼, PK)

기본키

  • 한 테이블에서 한 개의 컬럼에만 설정가능
  • 개체 무결성 제약조건을 가짐
    • 개체를 식별하기 위해 오류가 없도록 하기 위한 제약조건
    • 기본키는 NULL 값을 가져선 안되고, 중복될 수 없음
  • 최소성을 만족해야 함
    • 최소성이란, 키를 구성하는 속성들 중 가장 최소로 필요한 속성들로만 키를 구성하는 성질을 말한다. 쉽게 말해, 키를 구성하고 있는 속성들이 진짜 각 튜플을 구분하는 데 꼭 필요한 속성들로만 구성되어 있는지를 의미한다
pk_column number primary key
-- 컬럼명 자료형 primary key

Sequence

특정 단일 값을 규칙에 따라 증가시키며 기억하는 객체

CREATE sequence tb_name_seq
START WITH 1001 -- 시작지점
increment BY 1 -- 증가값
nomaxvalue -- 최댓값
nocache; -- 캐시 사용 안함 (성능이슈)

select TB_NAME_SEQ.NEXTVAL from dual; -- 다음값을 가져다줘
																			-- 1001 리턴후 시퀀스는 ++

-- 시퀀스는 값을 리턴해준 후 값을 1 증가시킨다.

select TB_NAME_SEQ.CURRVAL from dual;

-- 시퀀스의 현재값 확인

사용 예

insert  into cafe_menu 
				values(cafe_menu_seq.nextval, 'Cafe_Mocha', 3500, 'N');
-- PK 값에 시퀀스를 넣어줌

Foreign key (외래 키, 참조 키)

  • 기본키(Primary Key) 값이 있는테이블을 다른 테이블 간 연결을 설정할때 사용된다.
  • PK(Primary Key 기본키)를 가지고 오는 테이블이 외래키(FK Foreign Key)를 가지게 된다.
  • 기본키(PK)를 가지고 있는 테이블(부모테이블)이 생성되어야, 외래키(FK)를 가지는 테이블(자식테이블)을 생성할 수 있다.
  • Foreign Key의 이름은 중복되서는 안된다.

참조 무결성

참조 무결성(referential integrity)은 관계 데이터베이스 관계 모델에서 2개의 관련 있던 관계 변수(테이블) 간의 일관성(데이터 무결성)을 말한다


create table sales_record( -- 자식 테이블 생성
    sid number primary key, -- 거래내역번호
    pid references cafe_menu(pid), -- 외래키 , 참조키(다른 테이블의 기본 키)
    sdate timpstamp default sysdate not null -- 기본값으로 현재 시간 설정
);

-------------------------------------------------
create table sales_record(
    sid number primary key, -- 거래내역번호
    pid number not null,
    constraint fk_pid foreign key (pid) references cafe_menu (pid)
		--CONSTRAINT [FK명] foreign key([FK가 될 컬럼명]) references [PK가 위치하는 테이블] ([PK컬럼명])
);
  • 개발 단계에서의 foreign key

    데이터 수정 삭제의 제한이있기 때문에 개발단계에서는 외래키를 설정 하지 않는다.

    개발 막바지 단계에서 외래키 설정을 해줍니다.

UNIQUE

중복성을 제약하는 제약 조건

  • PK 와 다르게 NULL 값을 허용한다.
    • null 값을 제약 하려면 not null 을 함께 사용해준다.
column_name varchar(20) unique
-- unique constraint violated

Check

입력 데이터 값을 제한하는 제약조건

YN_Column char(1) check (YN_Column in ('Y', 'N')) not null

Drop

객체를 삭제함

DROP TABLE table_name;

테이블의 키가 참조되고 있다면 테이블은 드랍 될 수 없음. CASCADE 를 통해 연쇄 삭제 가능

Alter

객체를 수정하는 명령어

alter table table_name add(컬럼명, 컬럼 속성, 제약 조건); -- 새로운 컬럼 추가
-- default not null 속성을 주어야 기존값과 충돌하지 않으며 에러가 나지 않는다.

alter table table_name add constraint constraint_alies 제약조건(컬럼명); -- 새 제약조건 추가

alter table table_name modify(컬럼명, 컬럼 속성, 제약 조건); -- 기존 속성 변경

alter table table_name rename column column_title to changed_column_name; -- 기존 컬럼의 이름 변경

alter table table_name drop column column_title; -- 기존 컬럼 삭제

alter table table_name drop constraint column_constraint; -- 컬럼 제약조건 삭제

DML (Data Manipulation Language; 데이터 조작어)

Insert

해당 컬럼에 값을 삽입함.

insert into table_name values()
-- 모든 컬럼 값을 다 입력할 때 문법

insert into table_name (column1, column3) values(1002, 1003)
-- 일부 컬럼 값을 선택적으로 입력할 때 문법
-- 외래키 참조 삽입
insert into sales_record values(sales_record_seq.nextval, FK , default);

Delete

튜플(행)을 삭제함

Delete from table_title where 조건;

고유키 또는 유니크 키가 참조되고 있다면 DELETE 할 수 없음. 종속옵션을 통해 삭제 가능

Update

데이터의 속성을 갱신하는 작업.

UPDATE table_name SET column_name = '변경값' where 조건;
-- 변경할 데이터는 콤마(,) 로 여러 값을 변경할 수 있다.

종속 옵션

CASCADE

연쇄적인 옵션을 넣어줍니다.

pid references cafe_menu(pid) on delete cascade -- 부모키 삭제 시 종속된 키 연쇄 삭제
pid references cafe_menu(pid) on update cascade 

SET NULL

부모키 삭제 및 변경시 자식키 옵션에서 해당 키 값을 가진 속성을 NULL 로 변경

pid references cafe_menu(pid) on delete set null -- 부모키 삭제 시 NULL 값으로 변경

DICTIONARY (데이터 사전, 시스템 카탈로그)

데이터 사전(Data Dictionary)은 데이터베이스 관리 시스템(Database Management System, 이하 DBMS)을 효율적으로 사용하기 위해 데이터베이스에 저장된 정보를 요약한 것이다

오라클 내의 저장된 시스템 테이블로, 사용자가 내린 쿼리 명령에 의해서 발생하는 부가적인 내용을 저장하는 테이블

ORACLE 의 DICTIONARY

Untitled

DICTIONARY 의 권한


TCL(Transaction Control Language; 트랜잭션 제어 언어)

Transaction(트랜잭션, Tx)

데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위
  • 트랜잭션의 특징

Untitled

commit

트랜잭션을 DB에 저장시키는 작업

commit;

트랜잭션 자동 커밋

DML 을 제외한 language 를 하게 된다면 자동으로 커밋이 되어버림 (DDL)

Rollback

현재 진행중인 트랜잭션을 취소하고 가장 커밋이 완료된 시점으로 DB의 상태를 되돌림

rollback;

Savepoint

분기점을 생성한다.

savepoint abc;
rollback abc;

한 계정이 트랜잭션중에 commit이 완료 될 때 까지 다른 계정은 대기상태가 되어 버린다.


VIEW

뷰(view)는 데이터베이스에 존재하는 일종의 가상 테이블을 의미합니다. 이러한 뷰는 실제 테이블처럼 행과 열을 가지고 있지만, 실제로 데이터를 저장하고 있지는 않습니다.

특정 테이블 (or 테이블 들) 에서 추려낸 정보로 만들어지는 하나의 링크형 임시 테이블 only read

create view view_name
as
조건문(select ) from 테이블;
-- view 를 하기 위한 권한 부여
-- insufficient privileges errors

grant create view to 계정명;

DCL (Data Control Language; 데이터 제어어)

Grant

각종 권한을 부여하는 명령어

Grant 각종 권한 on 테이블 to 계정명;

Revoke

권한 부여를 취소하는 명령어

revoke 

실습

sales_record_seq 테이블의 sid 컬럼용 sequence 생성하기

create sequence sales_record_seq
    start with 1
    increment by 1
    nomaxvalue
    nocache;