211230

조영혜·2021년 12월 30일
0

DDL - 객체를 정의하는 언어. EX. 수정, 삭제

  • 객체 : 데이터 구조를 가지고 있는 애들
    테이블 - 기본 저장단위가 행과 열로 구성.
    뷰 - 데이터의 액세스 제안. 논리적으로 하나 이산의 테이블에 있는 데이터의 부분 집합을 나타냄.
    시퀀스 - 숫자 값 생성기. 번호 자동 생성기.
    인덱스 - 질의의 성능을 향상. 테이블의 데이터 검색 속도를 향상시키기 위한 용도. 사용은 많이 안함
    동의어 - 객체에 다른 이름 제공.

테이블 이름에 쓸 수 있는 특수문자 = _ $ #
실제로 테이블 이름 정할 땐 업무규칙(테이블을 정확히 설명할 수 있는 단어조합)에 철저히 따르기. -> 관리 용이.

테이블 - 테이블 이름, 컬럼 이름, 데이터 유형 및 크기(숫자)

CREATE TABLE table
(column_name datatype(length),
(column_name datatype(length)); 
복수추가일 시  ,로 추가 가능. 

디비 구현 단계 :
테이블 생성->데이터 삽입->저장(COMMIT)

데이터 딕셔너리 : 디비 안에 있는 애들의 정보를 보여줌.
user_tables - 자신이 소유한 데이터 정보만 확인 가능.
all_tables - 내가 엑세스 가능한 것 까지 정보 확인 가능
dba_tables - 오로지 dba만 정보 확인 가능. 모든 테이블 정보 확인 가능.

CHAR(n)-고정길이 문자 데이터 타입. (n)은 저장 공간. 미리 n만큼의 공간 구축을 해놓음. 성능 좋음. 공간 낭비. nx20%가 이상적인 데이터 저장 공간.
VARCHAR2(n)-가변길이 문자 데이터 타입. 요청이 들어오면 그때 마다 n만큼 할당. 성능 별로. 공간 활용도 높음.
NUMBER-성능 이슈로 사용도 낮음.
NUMBER(p)
NUMBER(p,s)-호환성 가장 좋음.
DATE-날짜값 저장. 한글포맷(년/월/일) 영어포맷 (일/월/년)->날짜 쓸 때 언어형태 확인. 시차 적용 안됨.
TIMESTAMP-년/월/일시간/분/초, AM/PM까지 적용 가능. (HIRE_DATE TIMESTAMP)
BLOB-4GB의 이진 데이터, 이미지 영상 음성데이터.
ROWID-인덱스

  • as 서브쿼리
    서브쿼리의 결과를 바로 테이블 생성 가능
    컬럼명, 컬럼의 구조, 데이터까지 모두 가져올 수 있음.
코드를 입력하세요
  • ALTER TABLE : 컬럼 추가, 수정(데이터 타입 변경, 길이(크기) 변경, 새 열의 기본값 정의, 열 삭제.
    ALTER ADD - 컬럼 추가
    ALTER MODIFY - 데이터 타입 변경. 크기 수정 할 땐 기존 데이터보단 커야함. (구조확인!)
    ALTER DROP - 컬럼 삭제 오토커밋 이슈가 있으니 실행 전 꼭 확인!! 컬럼안에 모든 정보 삭제됨. (저장공간, DD, date) 백업본 없으면 절대 복구 안됨.
    SET UNUSED

DELETE DML명령어. commit ing 행삭제 데이터가 저장된 공간은 남아있음. (=디스크 조각이 생김) rollback으로 복구 가능.
TRUNCATE DDL명령어. outo commit 행삭제 데이터가 저장된 공간은 삭제 이루어지고, 테이블의 정보 공간은 남아있음. (=테이블 초기화) 오토커밋으로 롤백(복구) 불가(백업본 있으면 복구 가능)
DROP DDL명령어. outo commit 행/정보 전체 삭제 오토커밋으로 롤백(복구) 불가(백업본 있으면 복구 가능)
dml은 행에 락.
ddl은 테이블 전체에 락.

제약조건 :
테이블의 무결성(제약) 증명하기 위해 제약을 주는 조건.

테이블의 컬럼 별로 설치(부여). ex.E_ID(하나의 컬럼에만 무결성 증명되면 됨)
컬럼별로 컬럼의 데이터 특성에 따라 여러개의 제약조건을 부여한다.
한 개의 컬럼에 여러개의 제약조건 동시에 부여 가능.
(ex.학생의 주민번호/학번)
NOT NULL - 반드시 값이 있어야 함.
UNIQUE -널 허용. (널은 값이 아니기 떄문)
PRIMARY KEY - NOT NULL + UNIQUE, 테이블 대표 컬럼에 설치. 반드시 한 개의 컬럼에 한 개의 PK가 이상적. 검색 속도 향상.
FOREIGN KEY - 참조키(외래키). 다른 데이터를 참조할 때 사용 하는 키. 테이블과 테이블의 관계 설정. 종속된 데이터의 삭제 방지.
CHECK - 사용자 정의 제약조건. 조건에 맞는 데이터만 사용 가능하게 함. (ex. SALARY>0, gender in(MAN, WOMAN)

테이블이 생성될 때 -> create table (사용도 높음)
테이블이 생성된 후에 -> alter table

  • 제약 조건 생성할 때 : CONSTRAINT 제약조건이름 제약조건유형 (설치할 컬럼 이름)
CONSTRAINT dept_did_pk primary key (did) 
=>테이블 레벨 선언. 컴마 구분 필수. 
->프라이머리 키 제약 조건을 dept_did_pk라는 이름으로 did라는 컬럼에 설치하겠다. 
CONSTRAINT dept_dname_uk unique(dname)
-> create table dept
did number(3) constrint dept_did_pk primary key(did) 
=>컬럼 레벨 선언. 

not null은 컬럼 레벨 선언만 가능.
sys(이름 기본 저장명)로 시작되는 애들은 다 NOT NULL으로 구분.

not null 제약조건은 컬럼과 같이 선언을 하고 (단, 제약조건이름은 생략) 나머지 4개의 제약조건은 컬럼을 선언한 이후, 별도로 constraint 명령을 통해 마지막에 따로 부여.

복합 pk 개념
마트에서 주문번호만 pk로 설정했다면, 한번에 구매 못하고 물건 하나씩 구매해야 하니 보통 주문번호와 물품_id를 함께 pk로 설정.

  • FOREIGN KEY 제약조건
    참조대상컬럼에 PK나 UK가 설치되어 있어야 설치할 수 있음!!
    REFERENCES절에 참조대상 테이블과 컬럼을 명시해야함.

DELETE CASCADE 참조된 행을 같이 삭제.
DELETE SET NULL 참조 (데이터)대상만을 NULL로 변경.
둘 다 종속적 삭제 가능.

DROP TABLE DEPT CASCADE DONSTRAINTS;
->테이블과 테이블과의 관계 끊어짐.
drop table dept cascade constraints; -> 테이블 구성하기 전 모든 정보 삭제 
drop table emp cascade constraints;

create table dept //dept라는 테이블 생성 
(deptno number(2), //컬럼은 숫자 2자리인 크기로 설정. 
dname varchar2(14) not null, //컬럼은 문자14글짜 크기고 널값 없음. 컬럼 규칙 정할 때 constraint절에 컬럼명 따로 적지 않으면 sys_Cn 이런식으로 이름 기본자동저장돼서 검색 용이함.  
loc varchar2(13) not null, //컬럼 문자 13글자, 널값 없음. dept 테이블은 총 3개의 컬럼을 가짐. 
constraint dept_deptno_pk primary key(deptno), //dept테이블의 deptno이라는 컬럼으로 프라이머리 키 설정. 
constraint dept_dname_uk unique(dname) //유니크조건 넣음. 
);

create table emp //emp라는 테이블 생성. 
(empno number(4),
ename varchar2(10) not null,  
gender char(10) not null, 
job varchar2(9) not null, 
meg number(4),
hiredate date not null, 
sal number(7,2) not null, 
comm number(7,2), 
deptno number(2),
constraint emp_empno_pk primary key(empno),  //emp 테이블에 empno칼럼에 프라이머리키 설정. 
constraint emp_gender_ck check(gender in('MAN', 'WOMAN')), //man/woman 둘중에 하나 라는 조건이 있으므로 체크 조건으로 gender in 추가. (복수 아니고 단수 일 땐 = 쓰면 됨) 
constraint emp_deptno_fk foreign key(deptno) references dept(deptno) //deptno 컬럼은 dept와 emp 중복으로 있고 포링키 설정하여 emp와 dept 관계 맺어줌. 
);

insert into dept
values (10, 'Adminstration', 1700); //한 행씩 추가. 테이블 순서대로 명시. 
insert into dept 
values (20, 'Marketing', 1800);
insert into dept
values (30, 'Purchasing', 1700);
insert into dept
values (40, 'Human', 2400);
insert into dept
values (50, 'Shipping', 1500);

insert into emp
values (100, 'King', 'MAN', 'AD_PRES', NULL, '87/01/17', 24000, NULL, 10);
insert into emp
values (101, 'Kochar', 'MAN', 'AD_VP', 100, '89/09/21', 1700, NULL, 50);
insert into emp
values (102, 'DE Haen', 'WOMAN', 'AD_VP', 100, '87/01/17', 17000, NULL, 50);
insert into emp
values (103, 'Hunold', 'MAN', 'IT_PROG', 102, '90/07/03', 9000, NULL, 40);
insert into emp
values (104, 'Ernst', 'WOMAN', 'IT_PROG', 103, '97/07/25', 4800, NULL, 40);

commit; //완료. 

0개의 댓글