create table 테이블명
(컬럼명 유형 널
~~~~
, constraint 제약조건명 primary key(컬럼명)
);
create table 테이블명
(컬럼명 유형 널
~~
, constraint 제약조건명 primary key(컬럼명1, 컬럼명2)
);
create table 테이블명
(컬럼명 유형 널
~~
컬럼명 유형 unique -- column level 제약조건
);
create table 테이블명
(컬럼명 유형 널
~~
, constraint 제약조건명 unique(컬럼명)
);
create table 테이블명
(컬럼명 유형 널
~~
, constraint 제약조건명 unique(컬럼명1, 컬럼명2)
);
create table 테이블명
(컬럼명 유형 널
~~
, constraint 제약조건명 foreign key(컬럼명)
references 제약받을테이블명(제약받을 컬럼명)
);
create table 테이블명
(~~
, constraint 제약조건명 foreign_key(컬럼명)
references 부모테이블명(부모테이블컬럼명) on delete cascade
);
부서가 사라진다고 해도 사원이 사라지면 안되기 때문에
on delete cascade 주면 안된다.
원글(부모) - 댓글(자식)
자식테이블에 foreign key 에 해당하는 컬럼은 반드시 null 을 허락해주어야 한다.
create table 테이블명
(컬럼명 유형 널
~~
, constraint 제약조건명 check (조건)
);
alter table 테이블명
add constraint 제약조건명 check(컬럼명 in(0,1));
-- Ex)
select A.table_name, A.constraint_name, A.constraint_type
, A.search_condition, B.column_name, B.position
, A.r_constraint_name as 참조받는부모테이블의식별자제약조건명
from user_constraints A JOIN user_cons_columns B
ON A.constraint_name = B.constraint_name
where A.table_name = 'TBL_YEYAK' and A.constraint_type = 'R';
-- 제약조건 이름 R = FK
-> 복합제약조건이 있을 경우 하나의 constraint_name 으로 나온다.
select *
from user_constraints;
-> Ex) 테이블명, 컬럼명
-> 복합제약조건이 있을 경우 하나하나 컬럼별로 나온다.
select *
from user_cons_columns;
user_constraints 와 user_cons_columns JOIN
조건절 ON : constraint_name 이 같은 경우 => 컬럼명, 제약조건명
user_constraints의 table_name (where 절)
user_constraints 의 constraint_type
-- (where 절 -> R : F.K // C : Check, not null //
-- P : P.K // U : Unique)
SELECT C.column_name as "외래키 컬럼명"
, D.table_name as "부모테이블명"
, D.column_name as "참조를 당하는 컬럼명"
FROM
(
select B.column_name, A.r_constraint_name
from user_constraints A JOIN user_cons_columns B
ON A.constraint_name = B.constraint_name
where A.table_name = 'EMPLOYEES' and A.constraint_type = 'R'
-- 제약조건 이름 R => FK
) C JOIN user_cons_columns D
ON C.r_constraint_name = D.constraint_name;
/*
-------------------------------------------------------------
외래키 컬럼명 부모 테이블명 참조를 당하는 컬럼명
-------------------------------------------------------------
DEPARTMENT_ID DEPARTMENTS DEPARTMENT_ID
JOB_ID JOBS JOB_ID
MANAGER_ID EMPLOYEES EMPLOYEE_ID
*/
SELECT C.column_name as "외래키 컬럼명"
, D.table_name as "부모테이블명"
, D.column_name as "참조를 당하는 컬럼명"
, C.delete_rule as "CASCADE 옵션"
FROM
(
select B.column_name, A.r_constraint_name, A.delete_rule
from user_constraints A JOIN user_cons_columns B
ON A.constraint_name = B.constraint_name
where A.table_name = 'EMPLOYEES' and A.constraint_type = 'R'
-- 제약조건 이름 R => FK
) C JOIN user_cons_columns D
ON C.r_constraint_name = D.constraint_name;
/*
--------------------------------------------------------------------
외래키 컬럼명 부모테이블명 참조를 당하는 컬럼명 CASCADE 옵션
--------------------------------------------------------------------
DEPARTMENT_ID DEPARTMENTS DEPARTMENT_ID NO ACTION
JOB_ID JOBS JOB_ID NO ACTION
MANAGER_ID EMPLOYEES EMPLOYEE_ID NO ACTION
*/
-> local_hr에서작업한것