반응형
제약조건 CONSTRAINT
NOT NULL
-- 해당 컬럼에 null값이 들어오지 못하도록 함
UNIQUE
-- null은 허용하지만 중복은 저장하지 못함
PRIMARY KEY
-- null과 중복을 저장하지 못함, 테이블에 저장된 데이터를 고유하게 식별하기 위한 키를 정의, 인덱싱 기능, FOREIGN KEY의 원본 테이블의 필드
DEFAULT
-- null값이 입력될 경우 default로 정의된 값이 자동으로 입력
CHECK
-- 컬럼에 정해진 데이터 조건을 지정하여 그 범위내에 데이터만 입력
-- 테이블 만들기
CREATE TABLE tb_student(
stu_idx NUMBER(5) NOT NULL, -- 99999까지
stu_name VARCHAR2(20) NOT NULL,
stu_age NUMBER(3) NOT NULL,
stu_gender VARCHAR2(6) NOT NULL, -- CHAR(1) : 'm' 아니면 'w' 둘 중 하나만 들어가게 만듬
stu_tel VARCHAR2(20),
CONSTRAINT stu_gender CHECK (stu_gender IN ('male','female')) -- 제약조건
);
-- 제약조건 삭제
ALTER TALBE tb_student DROP CONSTRAINT STU_GENDER;
-- stu_gender의 데이터 타입을 VARCHAR2(6)으로 변경하고 CHECK 제약조건을 male 또는 female만 입력받도록 변경
ALTER TABLE tb_student MODIFY(
stu_gender VARCHAR(6) CHECK(stu_gender IN('male', 'female'))
);
/*
오라클에서는 여러필드에 primray key를 적용할 수 있다
1개의 테이블에 primary key는 하나의 이름에만 여러개 필드를 적용할 수 있음
이것은 테이블 create 시에만 가능 / alter 시에는 불가
*/
-- CREATE 시 기본키(pk_userid)를 한개 이상(mem_userid, mem_idx) 줄 수 있음.
CREATE TABLE tb_member(
mem_idx NUMBER(7) UNIQUE NOT NULL,
mem_userid VARCHAR2(20) UNIQUE NOT NULL,
mem_userpw VARCHAR2(20) NOT NULL,
mem_name VARCHAR2(20) NOT NULL,
mem_gender VARCHAR2(10),
mem_email VARCHAR2(50) UNIQUE,
mem_hp VARCHAR2(20),
mem_zipcode CHAR(5),
mem_address1 VARCHAR2(100),
mem_address2 VARCHAR2(100),
mem_address3 VARCHAR2(100),
mem_regdate DATE DAFAULT SYSDATE,
CONSTRAINT pk_userid PRIMARY KEY(mem_userid, mem_idx),
CONSTRAINT ck_gender CHECK(mem_gender in('남자','여자'))
);
ALTER TABLE tb_member ADD PRIMARY KEY(mem_hp); -- (x) table can have only one primary keyalter 시에는 불가
-- tb_member 테이블을 참조하는 tb_order 테이블
CREATE TABLE tb_order (
ord_no VARCHAR2(10),
ord_userid VARCHAR2(20),
ord_product VARCHAR2(50) NOT NULL,
ord_count NUMBER(5),
ord_price NUMBER(7),
ord_regdate DATE DEFAULT SYSDATE,
CONSRAINT pk_no PRIMARY KEY(ord_no),
CONSRAINT fk_userid FOREIGN KEY(ord_userid) REFERENCES tb_member(mem_userid)
);
반응형
'Database > Oracle' 카테고리의 다른 글
[Oracle] 오라클 instr() 함수 (0) | 2021.08.12 |
---|---|
[Oracle] 데이터 타입 (0) | 2021.08.12 |
댓글