Orcale data type & Key

위수현·2023년 2월 14일
0

데이터 타입

🔎 데이터 타입이란 컬럼이 저장되는 데이터 유형을 말한다

🔎 기본 데이터 타입은 문자형, 실수, 소수, 자료형 등의 여러 데이터를 식별하는 타입이다

문자형 테이터 타입

🔎 varchar2 가변길이로 저장된다.

-> char() 형식으로 사용하는 것보다 varchar() 형식으로 사용하는 것이 메모리 소비차원에서 합리적이다.

숫자형 데이터 타입

🔎 대부분 NUMBER형을 사용한다.

🔎 P는 소수점을 포함한 전체 자릿수를 의미하고, S는 소수점 자릿수를 의미한다.

🔎 NUMBER는 가변숫자이므로 P와S를 입력하지 않으면 저장 데이터의 크기에 맞게 자동으로 조절된다.

🔎 파라미터 값 두 개를 받아온다.(P,S)

	입력값		타입		저장되는 값
	123.89		NUMBER		123.89
	123.89		NUMBER(3)	124	
    // 3자리수 변환후 반올림
	123.89		NUMBER(3,2)	오류
	123.89		NUMBER(4,2)	오류
	123.89		NUMBER(5,2)	123.89
	123.89		NUMBER(6,1)	123.9

날짜형 데이터타입

🔎 일반적으로는 날짜 데이터 타입은 DATA 타입이다.

LOB데이터 타입

🔎 LOB이란 Large Object의 약자로 대용량 데이터를 처리할 수 있는 데이터 타입이다.

DDL(Data Definition Lasnguage

🔎 데이터의 구조를 정의하기 위한 테이블 생성, 삭제와 같은 명령어

- create table	: 테이블 생성
- drop	 table	: 테이블 삭제
- alter	 table	: 테이블 수정
- truncate	table: 테이블에 있는 모든 데이터 삭제


-> 다음과 같이 정말 delete할 것인지에 대한 안내 문구가 나오는데, 신중히 선택한다.

데이터 조작어(Data Manipulation Language)

 - 데이터 조회 및 변형을 위한 명령어
 - select	: 데이터 조회
 - insert	: 데이터 입력
 - update	: 데이터 수정
 - delete	: 데이터 삭제

insert into 테이블명 values (값1, 값2, ...)
-> 전체컬럼
- insert into 테이블명 (컬럼1, 컬럼2, ...) values (값1, 값2, ...)
-> 특정컬럼
- update 테이블명 set 컬럼1 = 값1, 컬럼		2 = 값2, ...	where 조건..;
- delete 테이블명 where 조건;

drop VS truncate VS delete

drop

drop table 테이블명;

🔎 존재 자체가 삭제된다.

truncate

🔎 데이터만 통 삭제

🔎 truncate는 테이블이 삭제되는 명령어는 아니고 안에 들어있던 모든 레코드들을 제거하는 명령어이다.

🔎 테이블을 drop했다가, create하는 작업

🔎 모든 행을 삭제하는 데에는 가장 빠르고 효율적인 작업

delete

🔎 delete는 조건에 해당하는 것만 지울수도 있고, 전체를 지울수도 있는 이유가 한줄 한줄 삭제하기 때문이다.

🔎 로그를 남김

-> drop과 truncate는 정말 조심해서 사용하도록 한다.

<예제>

commit과 rollback

commit

🔎 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어이다.

🔎 트랜잭션의 처리 과정을 데이터베이스에 반영하기 위해서, 변경된 내용을 모두 영구 저장한다.

🔎 commit을 수행하면, 하나의 트랜젝션 과정을 종료하게 된다.

-> commit의 개념

🔎 transaction작업 내용을 실제 db에 저장

🔎 모든 사용자가 변경한 데이터의 결과를 볼 수 있다.

🔎select, insert, update, delete -> 이러한 하나의 작업 단위를 영구적으로 db에 저장

🔎상단바에 'Auto'를 누르면 로그를 볼 수 있다.

-> 다음과 같이 초기 설정은 Auto(commit)으로 되어있는데, 이를 해제하여 commit으로 코드를 작성하고 싶을 때 위 그림을 따라서 설정할 수 있다.

rollback

🔎 작업 중 문제가 발생했을 때, 트랜젝션의 처리 과정에서 변경 사항을 취소하고, 트랜잭션 과정을 종료시킨다
.
🔎 트랜젝션으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌린다.

🔎 이전 commit한 곳 까지만 복구한다.

🔎 트랜젝션 작업 중 하나라도 문제가 발생하면, 모든 작업을 취소해야 하기 때문에 하나의 논리적인 작업 단위로 구성해 놓아야 한다.

-> rollback의 개념

🔎 문제가 발생하면 논리적인 작업의 단위를 모두 취소해 버리면 되기 때문이다.

명령어의 장점

🔎 데이터의 무결성이 보장된다.

🔎 논리적으로 연관된 작업을 그룹화할 수 있다.

자동 rollback되는 경우

🔎 비정상적인 종료가 됐을 때

자동 commit되는 경우

🔎 DDL문(create, alter, drop, truncate)

🔎 DCL문(grant, revoke) 사용권한애 대한 insert, update, delete 작업 후 commit하지 않고 오라클을 정상 종료시에 commit명령어를 입력하지 않아도 정상 commit후 오라클 종료

컬럼속성(무결성 제약조건)

🔎 not null : 널값이 입력되지 못하게 하는 것

🔎 unipqe : 중복된 값이 입력되지 못하게 하는 조건

🔎 chck : 주어진 값만을 허요하는 조건

🔎 primary key : not null + unique + index의 의미

🔎foreing key : 다른 테이블의 필드(컬럼)를 참조해서 무결성을 검사하는 조건

<예제>

(1) not null

(2) unique

(3) check

Primary key

기본키(Primary Key)

🔎 기본키 역시 기본적인 제약조건들은 테이블을 생성할때 같이 정의한다.

🔎 테이블당 하나만 정의가 가능하다.

🔎 기본키 ,식별자, pk 등으로 불리고 있다.

🔎 not null + unique + index

기본키 설정 방법 예시

CREATE TABLE constTest(
	pkCol1	varchar2(10) PRIMARY KEY,		
    // 이 방법이 가장 많이 사용된다.
	pkCol2	varchar2(10) 
	CONSTRAINT pk_test1 PRIMARY KEY ,
	pkCol3	varchar3(10)
	CONSTRAINT pk_test2 PRIMARY KEY 	(pkCol3)
);

Foreign key

Foreign(외래키)

🔎 외부키, 외래키, 참조키, fk, 외부식별자 등으로 불린다.

🔎 FK가 정의된 테이블을 자식 테이블이라고 칭한다.

🔎 참조되는 테이블 즉, PK가 있는 테이블을 부모 테이블이라 한다.

🔎 부모테이블의 PK컬럼에 존재하는 데이터만 자식테이블에 입력할 수 있다.

🔎 부모테이블은 자식의 데이터나 테이블이 삭제된다고 영향을 받지 않는다.

🔎 참조하는 데이터 컴럼과 데이터 타입이 반드시 일치해야 한다.

🔎 참조할 수 있는 컬럼은 기본키이거나 unique만 가능하다.
(보통은 pk랑 엮는다.)

CREATE TABLE foreign_key(
	department_id	varchar2(10), 
	CONSTRAINT dept_fk REFERENCES 	departments(department_id)	
  // 제약을 거는 	이름 : dept_fk 
  // 제약 조건 : 	department(department_id)
	name	varchar2(10),								
  // 인라인 방법 	: 선언과 제약 조건이 같이 옴.
	salary	number(10),						
  // 컬럼이 나중에 오기 때문에 지목을 할 필요가 없음
  ( 앞에서 미리 해주었기 때문) ( 인라인 방식 )
);

기본키와 외래키의 할당 예시

-> 자식 테이블인'Employees' 테이블에서 40이라는 컬럼은 부모 테이블인 'Departments' 테이블에 들어갈 수 없으므로 해당 사진은 잘 못 된 예시이다.

외래키 삭제 옵션

🔎 on delete cascade
: 참조되는 부모 테이블의 행에 대한 delete를 허용한다.
즉, 참조되는 부모 테이블 값이 삭제되면 연쇄적으로
자식 테이블 값 역시 삭제된다.

🔎 on delete set null
: 참조되는 부모테이블의 행에 대한 delete를 허용한다.
이건 cascade와 다른데, 부모테이블의 값이 삭제되면
해당 참조하는 자식테이블의 값들은 null값으로 설정된다.

<예제>

<1-1> 기본키(daddy 테이블)

<1-2> 외래키(daughter 테이블)


<2-1> 기본키(TB_TEAM 테이블)

<2-2> 외래키(TB_PLAYER 테이블)

profile
수현

0개의 댓글