쥬로그
오라클 - 스키마 정의, 자료형, 제약조건 (2) 본문
< 스키마 정의, 자료형, 제약조건 (2) >
* 스키마는 테이믈/DB(데이터베이스)의 구조나 데이터타입을 정의한다.
* 제약 조건은 레코드를 추가할 때 외에도 수정/삭제할 때도 적용된다.
* 자료형 (Data Types)
♧ NUMBER (a, b)
- 숫자를 다루는 데 사용하는 데이터 타입
- number(10, 2) 소수점 기준으로 10자리, 소수점 이하 2자리
- 다른 시스템/언어와의 호환성을 위해 int/float도 허용
♧ 문자열
- CHAR (size): 고정 길이 문자열
- VARCHAR2 (size): 가변 길이 문자열
♧ Long
- 2GB 이내의 문자열을 처리하는 데이터 타입
♧ Date
- 날짜와 관련한 데이터를 저장하는 데이터 타입
♧ CLOB (Character Large Object)
- 4GB 이하의 문자열을 저장하는 데이터 터압
♧ BLOB (Binary Large Object)
- 4GB 이하의 바이너리 데이터를 저장하는 데이터 타입
* 스키마 정의
♧ DDL (Data Definition Language)
- 데이터 베이스와 테이블을 CRUD (Create, Retrieve, Update, Delete)
- 테이블에 대한 정보는 메타데이터(MetaDate)로 데이터사전(DataDictionary)에 저장, 관리된다.
♧ 데이터베이스(DB) 생성
CREATE DATABASE 데이터베이스명;
♧ 테이블 생성
CREATE TABLE 테이블명 (컬럼명1 데이터타입(크기), 컬럼명2...);
ex) 컬럼으로 이름(Name), 주소(Address), 전화번호(Telephone)를 가지는 BUSINESSCARD 테이블을 정의하고 생성하시오. 단, 이름, 주소, 전화번호는 문자열(varchar2) 최대 길이 255자로 지정함.
-> create table BUSINESSCARD (Name varchar2(255), Address varchar2(255), Telephone varchar2(255));
-> desc BUSINESSCARD; (생성된 테이블의 스키마 보기)
-> insert into BUSINESSCARD values ('Bob', 'Seocho-dong 123', '123-4567'); (레코드 삽입)
-> insert into BUSINESSCARD values ('Tom', 'Sindang-dong 456', '321-4321'); (레코드 삽입)
* 제약조건 (Constraint)
- 입력 데이터의 제약 조건을 걸어 해당되지 않는 데이터는 입력되지 않음
> NOT NULL : 데이터가 NULL 값을 받아들이지 않음
> UNIQUE : 테이블에 동일한 값이 입력되어 있을 경우 받아들이지 않음
> PRIMARY KEY (PK) : 기본키 제약조건 (UNIQUE, NOT NULL 조건)
> FOREIGN KEY (FK) : 외래키 제약조건
> CHECK : 입력값 체크 (ex: Age >= 0)
> DEFAULT : 컬럼값이 입력되지 않으면 기본값을 입력
ex) 1. BUSINESSCARD 테이블의 이름(Name)이 NOT NULL로 생성하시오.
-> create table BUSINESSCARD (Name varchar2(255) not null, Address varchar2(255), Telephone varchar2(255));
-> insert into BUSINESSCARD values ('Bob', 'Seocho-dong 123', '123-4567');
-> insert into BUSINESSCARD values (NULL, 'Seocho-dong 123', '123-4567');
※ NULL 값은 NOT NULL 제약 조건에 의해 추가 되지 않음
ex) 2. BUSINESSCARD 테이블의 Name이 동일한 값이 허용되지 않도록 지정하시오.
-> create table BUSINESSCARD (Name varchar2(255) unique, Address varchar2(255), Telephone varchar2(255));
-> insert into BUSINESSCARD values ('Bob', 'Seocho-dong 123', '123-4567');
-> insert into BUSINESSCARD values ('Bob', 'Seocho-dong 345', '321-4321');
※ Bob이 중복되어 UNIQUE 제약 조건에 의해 추가 되지 않음
ex) 3. BUSINESSCARD 테이블의 아이디(id)을 기본키로 지정한다.
-> create table BUSINESSCARD (id int not null, name varchar2(255), Address varchar2(255), Telephone varchar2(255), primary key(id));
-> insert into BUSINESSCARD values (1, 'Bob', Seocho-dong 123', '123-4566');
-> insert into BUSINESSCARD values (2, 'Bob', 'Sinsa-dong 456', '789-4561);
-> select * from BUSINESSCARD;
※ id 값에 1, 2 또는 NULL을 추가할 경우 not null 제약 조건과 primary key 제약 조건으로 의해 추가 되지 않음
ex) 4. Salary 테이블의 business_card_id를 외부키로 지정한다.
-> create table BUSINESSCARD (id int not null, name varchar2(255), Address varchar2(255), Telephone varchar2(255), primary key(id));
-> create table Salary (id number not null, salary_amout number, business_card_id number not null, primary key(od), foreign key(business_card_id) reference BUSINESSCARD(id));
-> insert into BUSINESSCARD values (1. 'Bob', 'Seocho-dong 123', '123-4567');
-> insert into Salary values(1, 5000, 1);
-> select * from BUSINESSCARD;
-> select * from Salary;
ex) 5. BUSINESSCARD 테이블의 Age 값은 0 보다 커야한다.
-> create table BUSINESSCARD (Name varchar2(255), Address varchar2(255), Telephone varchar2(255), Age int check(Age > 0));
-> insert into BUSINESSCARD values ('Bob', 'Sinsa-dong 123', '123-4567', 0);
※ Age 값이 0 이므로 Check 제약 조건을 위반하여 저장되지 않는다.
ex) 6. BUSINESSCARD 테이블의 주소(Address)값이 지정되지 않으면 'SEOUL'로 입력되도록 하시오.
-> create table BUSINESSCARD (Name varchar2(255), Address varchar2(255) default 'SEOUL', Telephone varchar2(255));
-> insert into BUSINESSCARD(name, telephone) values ('Sam', '123-4567-);
-> select * from BUSINESSCARD;
※ 이름, 전화번호만 입력했으므로 Default 제약 조건에 의해 주소는 기본값인 seoul이 출력된다.
* 시퀀스 (Sequence)
♧ 자동 번호 생성기
- 기본키로 사용하기 편하도록 숫자를 정해진 규격에 의해 생성
- 다른 DBMS의 AUTO_INCREMENT 속성에 대응하는 개념
CREATE SEQUENCE 시퀀스명
START WITH N
INCREMENT BY N
♧ 시퀀스 조회 함수
CURRVAL() -> 현재 시퀀스 값 조회
NEXTVAL() -> 새로운 시퀀스 값 조회
ex) 시퀀스를 새로 생성하고, 현재 시퀀스 값을 표시하시오.
-> creat table BusinessCard (id int, Name varchar2(255), Address varchar2(255), Telephone varchar2(255));
※ 먼저 테이블 생성
-> create sequence businesscard_seq;
※ 시퀀스 생성
-> select businesscard_seq.nextval from dual;
※ 새로운 값 시퀀스 생성 (테스트)
-> select businesscard_seq.currval from dual;
※ 현재 시퀀스 조회
-> insert into BusinessCard values (businesscard_seq.nextval, 'Bob', 'Seocho-dong 123', '123-4567');
※ nextval 을 이용해 id 값을 얻어내 레코드 추가
-> insert into BusinessCard values (businesscard_seq.nextval, 'Sam', 'Sinsa-dong 345', '321-4321');
※ nextval 을 이용해 id 값을 얻어내 레코드 추가
< Point>
☆ DML(Data Manipulation Language)는 테이블의 데이터를 CRUD하는 언어이고,
DDL(Data Definition Language)는 테이블의 스키마에 영향을 주는 언어,
DCL(Data Control Language)는 데이터나 테이블/DB에 접근권한을 설정하는 언어이다.
즉, 테이블 구조에 영향을 미치는 언어는 DDL이다.
☆ 데이터 사전(Data Dictionary)는 테이블 스키마(Schema)의 정보가 저장되는 곳이다.
☆ 오라클에서 제공하는 데이터 타입은 number, varchar, varchar2가 있고,
boolean는 지원하지 않는 데이터타입이다.
< 요약 >
* 스키마 정의
- DB(Data Base) 생성, 테이블 생성
* 자료형
- 테이블의 각 컬럼의 자료형 지정
- NUMBER, CHAR, VARCHAR, VARCHAR2, DATE, BLOB, ...
* 제약조건
- 테이블의 제약조건을 지정
- NOT NULL, UNIQUE, PRIMARY KEY, FORIGN KEY, CHECK, DEFAULT
'Study > Oracle' 카테고리의 다른 글
오라클 - 스키마 수정, 삭제 (0) | 2021.08.31 |
---|---|
오라클 - 중복정보 수정, 정규형, 참조무결성 (0) | 2021.08.31 |
오라클 - 서브쿼리, 집합연산 (0) | 2021.08.31 |
오라클 - LIKE 검색, NULL 값, GROUP BY/HAVING (0) | 2021.08.30 |
오라클 - SELECT INTO, INSERT INTO SELECT (0) | 2021.08.30 |