오늘보다 더 나은 내일의 나에게_

Oracle 21/12/30 본문

Oracle

Oracle 21/12/30

chan_96 2022. 1. 12. 21:49
728x90

테이블 생성 및 관리

DDL

: 객체의 구조를 정의

 

데이터베이스 객체

객체 설명
테이블 기본 저장 단위, 행과 열로 구성
논리적으로 하나 이상의 테이블에 있는 데이터의 부분 집합
시퀀스 숫자 값 생성기, pk지정할 때 유용
인덱스 질의의 성능 향상, 검색 속도 향상
동의어 객체에 다른 이름을 제공
(employees 테이블 => emp 테이블)

 

이름 지정 규칙
-문자로 시작
-1자부터 30자까지 가능
-A-z, a-z, 0-9, $, _, #만 포함
-동일한 사용자가 소유한 다른 객체의 이름과 중복되지 않아야 함
-Oracle server 예약어 X

 

테이블 생성

CREATE TABLE TABLE_NAME
(COLUMN_NAME(DATATYPE(LENGTH),
 COLUMN_NAME(DATATYPE(LENGTH)
);

DB 구현

TABLE 생성(CREATE) => DATA 삽입(INSERT) => 저장(COMMIT)

 

데이터 딕셔너리

USER_TABLES => 자신이 소유한 테이블의 정보만 확인

ALL_TABLES => 내가 액세스 가능한 테이블의 정보 확인

DBA_TABLES => DB안에 모든 정보를 확인 가능

 

데이터 유형

데이터 유형 설명
VARCHAR2(SIZE) 가변 문자 데이터 / 성능 낮고 공간 활용 높음
CHAR(SIZE) 고정 문자 데이터 / 성능 좋고 공간 활용 낮음
NUMBER 가변 숫자 데이터
NUMBER - 126자, 성능 안 좋음, 거의 안 씀
NUMBER(P) - 정수
NUMBER(P, S) - 제일 많이 사용됨(S_ 소수점 자릿수)
DATE 날짜(년, 월, 일), 시간
언어체계에 따라 날짜 형식은 다름
DATE TIME 데이터 유형
TIMESTAMP - 소수점 이하 초까지 포함하는 날짜

LONG 최대 2GB의 가변 문자 데이터
CLOB 최대 4GB의 가변 문자 데이터
RAW, LONG RAW 원시 이진 데이터
BLOB 최대 4GB의 이진 데이터
BFILE 외부 파일에 저장된 이진 데이터(최대 4GB)
ROWID 테이블에서 행의 고유 주소를 나타내는 64진수

 

CREATE 서브 쿼리를 사용한 테이블 생성

CREATE TABLE TABLE명
(COLUMN명)
AS 서브 쿼리

컬럼명, 구조, 데이터 값을 가져온다.

 

 

ALTER TABLE문

-새 열 추가

-기존 열 수정(DATATYPE 변경, 길이 변경)

-새 열의 기본값 정의

-열 삭제

 

ADD - 컬럼 추가
=> 컬럼을 추가하게 되면 NULL으로 채워진다. 값 수정하려면 UPDATE(열 단위작업)을 사용해야 함
MODIFY - 데이터 타입 변경, 크기 변경
DROP - 컬럼 삭제
=> 자동으로 COMMIT이 되므로 ROLLBACK이 안되므로 신중히 사용!
- DROP 명령 수행 시 테이블 자체에 LOCK 걸려서 수행하는 동안 누구도 TABLE에 접근할 수 없다.
DML - 행에 LOCK
DDL - TABLE에 LOCK
SET UNUSED - 컬럼 삭제
사용 시 컬럼의 데이터와 공간은 남아있음
해결방법 - DROP UNUSED COLUMNS
DROP TABLE - 테이블 삭제
TRUNCATE TABLE - 행 삭제

 

삭제 명령어 비교

    COMMIT 데이터 삭제 영역 저장공간 ROLLBACK
DELETE
(행단위 삭제시 사용)
DML COMMIT 진행중 행 삭제  데이터 저장공간은 남음 가능
TRUNCATE
(모든 데이터 삭제시사용)
DDL 실행과 동시에 COMMIT 완료 행 삭제 데이터가 저장된 공간은 삭제, 테이블에 정보 공간은 남음 불가능
DROP DDL 실행과 동시에 COMMIT 완료 행, 정보 삭제 모두 삭제 불가능

 

제약 조건 포함

: 제약(무결성)을 주는 조건

-> 테이블의 데이터의 무결성으로 보장하기 위해서 제약을 주는 조건

-> 테이블의 컬럼 별로 설치(부여)

-> 컬럼 별로 컬럼의 데이터 특성에 따라 여러 개의 제약조건을 부여

-> 한 개의 컬럼에 여러 개의 제약조건을 부여 가능

제약 조건 설명
NOT NULL 반드시 값이 있어야함
UNIQUE 중복값을 허용하지 않음, NULL 허용
PRIMARY KEY 값이 반드시 있어야하고, 중복 허용 X, 테이블의 대표 컬럼
FOREIGN KEY 다른 테이블의 데이터를 참조 할 때 / 테이블과 테이블의 관계 설정,
종속된 삭제 방지
CHECK 사용자 정의 제약 조건, 조건을 만듬
EX_ SALARY > 0, 성별(MAN, WOMAN)

제약 조건 지침

-제약 조건에 이름 생략 시 Oracle server가 SYS Cn이름을 생성

-제약 조건 생성 시기(테이블이 생성될 때(CREATE), 테이블이 생성된 후(ALTER))

 

 

제약 조건 생성 방법

-제약조건 여러 개 생성 가능

CONSTRAINT 제약조건 이름 제약조건 유형(설치할 컬럼명)

(제약조건 이름 -> TABLE_COLUMN_약어)

 

NOT NULL은 컬럼과 같이 선언하고(단 제약조건 이름은 생략)

나머지 4개의 제약 조건은 컬럼을 선언한 이후, 별도로 CONSTRAINT명령을 통행 마지막에 따로 부여

 

FOREIGN KEY => 대상 컬럼 PK, UK 설치되어있어야 함, REFERENCES  참조 대상 TABLE(COLUMN) 지정

SET DELETE CASCADE - 참조된 행을 같이 삭제(종속적 삭제 가능)

SET NULL - 참조된 데이터를 NULL로 변경(종속적 변경 가능)

 

DROP TABLE 테이블명 CASCADE CONSTRAINTS; => 제약조건 무시하고 테이블 삭제

 


오류 내용 정리

더보기
ERROR at line 2:
ORA-01441: cannot decrease column length because some value is too big
: 컬럼의 길이를 줄일 경우 해당 컬럼의 값 중 변경할 길이보다 큰 값이 있으면 오류가 발생

=> 해당 컬럼의 길이를 조회하여 변경할 길이보다 큰 값이 있는지 확인하고 값을 변경

728x90

'Oracle' 카테고리의 다른 글

Oracle 21/12/31  (0) 2022.01.12
Oracle 12/12/29  (0) 2022.01.12
Oracle 21/12/28  (0) 2022.01.12
Oracle 21/12/27  (0) 2022.01.12
Oracle 21/12/24  (0) 2022.01.12
Comments