728x90
무결성: CONSTRAINT
COLUMN을 지정하는 성질
primary key : 기본키 NULL을 허용하지 않는다. 빈칸은 안된다. 중복 불가 id, 주민번호
unique key: 고유키. NULL은 허용한다. 중복 불가 E-mail
foreign key: 외래키. 테이블과 테이블을 연결하는 목적의 성질이다. Join
NULL 허용
외래키로 설정된 컬럼은 연결된 테이블에서PK나 UK로 설정되어있어야한다.
CHECK : 범위를 설정. 지정된 값외에는 사용할 수 없다. NULL허용
NOT NULL : NULL허용하지 않는다.
NOT NULL
--NOT NULL
CREATE TABLE TB_TEST01(
COL1 VARCHAR2(10) NOT NULL,
COL2 VARCHAR2(20)
);
INSERT INTO tb_test01(COL1, COL2)
VALUES('AAA','111');
INSERT INTO tb_test01(COL1, COL2)
VALUES('BBB',''); -- java "" != NULL
SELECT
*
FROM tb_test01
;
INSERT INTO tb_test01(COL1, COL2)
VALUES('','222');
INSERT INTO tb_test01(COL1)
VALUES('CCC');
PRIMARY KEY
-- primary key = Unique + not null
DROP TABLE tb_test01
CASCADE CONSTRAINTS; -- 지우기 무결성까지
CREATE TABLE TB_TEST01(
PKCOL VARCHAR2(10) CONSTRAINT PK_TEST_01 PRIMARY KEY,
COL1 VARCHAR2(20),
COL2 VARCHAR2(20)
);
INSERT INTO tb_test01(PKCOL,COL1,COL2)
VALUES('AAA','aaa','111');
INSERT INTO tb_test01(PKCOL,COL1,COL2)
VALUES('BBB','','');
-- NULL넣으면 에러
INSERT INTO tb_test01(PKCOL,COL1,COL2)
VALUES('','','');
SELECT
*
FROM tb_test01;
DROP TABLE tb_test01
CASCADE CONSTRAINTS;
CREATE TABLE TB_TEST01(
PKCOL VARCHAR2(10) CONSTRAINT PK_TEST_01 PRIMARY KEY,
COL1 VARCHAR2(20) CONSTRAINT PK_TEST_02 PRIMARY KEY,--table can have only one primary key
COL2 VARCHAR2(20)
);
--primary key 는 한테이블안에서 여러개 생성 불가
-- 따로 테이블밖에서 alter를 통해 add해준다.
CREATE TABLE TB_TEST01(
PKCOL VARCHAR2(10) ,
COL1 VARCHAR2(20) ,
COL2 VARCHAR2(20),
CONSTRAINT PK_TEST_01 PRIMARY KEY(PKCOL,COL2)
);
CREATE TABLE TB_TEST01(
PKCOL VARCHAR2(10) ,
COL1 VARCHAR2(20) ,
COL2 VARCHAR2(20)
);
UNIQUE KEY
--외부에서 ALTER --> primary key 추가
--Unique: 고유키. 중복된 값은 입력불가 NULL 허용
CREATE TABLE TB_TEST01(
UKCOL VARCHAR2(10) CONSTRAINT UK_TEST_01 UNIQUE,
COL1 VARCHAR2(20),
COL2 VARCHAR2(30)
);
INSERT INTO tb_test01(UKCOL,COL1,COL2)
VALUES('AAA','aaa','111');
INSERT INTO tb_test01(UKCOL,COL1,COL2)
VALUES('','aaa','111');
-- unique 키를 삭제해야할경우
ALTER TABLE tb_test01
DROP CONSTRAINT UK_TEST_01
;
FOREIGN KEY
-- FOREIGN KEY : 외래키
-- 기본테이블(departments)에서는 PK, UK 로 설정되어 있어야한다
-- NULL을 허용
--PARANT TABLE
CREATE TABLE TB_DEPT(
DEPARTMENT_ID VARCHAR2(10),
DEPARTMENT_NAME VARCHAR2(20),
LOCATION_ID NUMBER,
CONSTRAINT PK_DEPT_TEST PRIMARY KEY(DEPARTMENT_ID)
);
INSERT INTO TB_DEPT(DEPARTMENT_ID , DEPARTMENT_NAME, LOCATION_ID)
VALUES('10','기획부',120);--------------
INSERT INTO TB_DEPT(DEPARTMENT_ID , DEPARTMENT_NAME, LOCATION_ID)
VALUES('20','관리부',150);
INSERT INTO TB_DEPT(DEPARTMENT_ID , DEPARTMENT_NAME, LOCATION_ID)
VALUES('30','개발부',180);
--CHILD TABLE
CREATE TABLE TB_EMP(
EMPNO VARCHAR2(10),
ENAME VARCHAR2(20),
DEPARTMENT_ID VARCHAR2(10), ------>>>>외래키
CONSTRAINT FK_EMP_TEST FOREIGN KEY(DEPARTMENT_ID)
REFERENCES TB_DEPT(DEPARTMENT_ID)
);
INSERT INTO TB_EMP(EMPNO,ENAME, DEPARTMENT_ID)
VALUES(100,'이수빈', 10);
INSERT INTO TB_EMP(EMPNO,ENAME, DEPARTMENT_ID)
VALUES(100,'성춘향', 20);
INSERT INTO TB_EMP(EMPNO,ENAME, DEPARTMENT_ID)
VALUES(100,'외래', 30);
INSERT INTO TB_EMP(EMPNO,ENAME, DEPARTMENT_ID)
VALUES(100,'성춘향', 40); ---> 외래키에 40이 없기때문에 오류
SELECT
*
FROM tb_emp e, tb_dept d
WHERE e.department_id = d.department_id
;
CHECK
--CHECK 지정된 값만 넣을 수 있다. NULL을 허용한다
-- 중복 허용한다
CREATE TABLE TB_CHECK(
COL1 VARCHAR2(10),
COL2 VARCHAR2(20),
CONSTRAINT CHK_01 CHECK(COL1 IN('사과','배','바나나')),
CONSTRAINT CHK_02 CHECK(COL2 > 0 and COL2 <=100)
);
INSERT INTO TB_CHECK(COL1, COL2)
VALUES('사과',50);
INSERT INTO TB_CHECK(COL1, COL2)
VALUES('귤',50);
INSERT INTO TB_CHECK(COL1, COL2)
VALUES('바나나',0);
728x90
'데이터베이스' 카테고리의 다른 글
26일차// [Oracle] VIEW (0) | 2021.02.17 |
---|---|
26일차// [Oracle] TABLE 예제 (0) | 2021.02.17 |
25일차// [Oracle] TABLE 생성, 컬럼 설정 (0) | 2021.02.16 |
25일차//[Oracle] RANK, DENSE_RANK 순위 함수 사용법 (over, partition by) (0) | 2021.02.16 |
25일차//[Oracle] SUB QUERY 예제(2) (0) | 2021.02.16 |