728x90
SQL 활용
데이터정의어(DDL) - table
제약 조건
PK, FK, UK, NN, CK
제약조건 선언 시기
- table 생성 시 : create table
- table 생성 후 : alter table
제약조건명 지정(Mysql과 다른점임)
고유하고 의미있는 제약 조건명 부여가 권장됨 ex) 테이블 약자_컬럼 약자_제약조건 유형 약자
※MySql 테이블 생성 시 특징
- 제약조건명을 부여하지 않음.
- 내부적으로 DBMS가 자동으로 이름을 부여해놓음.
- 제약조건명을 사용할 일이 없음
-- MySql
create table stu
(stu_no int primary key,
stu_name varchar(10) not null,
birth date not null,
phone varchar(30) unique
age int check(age>19));
create table class
(class_no int primary key,
stu_no int,
class_name varchar(20),
foreign key(stu_no) references stu(stu_no));
-- fk만 테이블 레벨 문법을 사용, 그 이외에는 컬럼 레벨 문법을 사용
제약조건 선언 문법
- 컬럼 레벨 문법 : PK, FK, UK, CK, NN
create table employees(
employee_id number(6)
constraint emp_emp_id_pk primary key,
first_name varchar2(20),
...);
- 테이블 레벨 문법 : PK, FK, UK, CK
create table employees(
employee_id number(6)
first_name varchar2(20),
constraint emp_emp_id_pk primary key(employee_id));
not null
- 컬럼 레벨의 문법만 가능
- null값이 들어올 수 없는 제약 조건
- 필수 정보인 컬럼에 not null 제약조건을 사용
create table test1
(id number(10) constraint t1_id_nn not null,
name varchar2(30) constraint t1_name_nn not null,
job varchar2(20),
email varchar2(20),
phone varchar2(20) constraint t1_ph_nn not null,
start_date date);
desc test1;
unique
- 고유한 값만 들어올 수 있는 제약조건
- 중복된 값은 들어 올 수 없는 제약조건
- ex)주민등록번호, 전화번호, 메일주소, 학번, 사번 등
create table test2
(id number(10) constraint t2_id_nn not null constraint t2_id_uk unique,
name varcahr2(30) constraint t2_name_nn not null,
job varchar2(20),
email varchar2(20),
phone varchar2(20) constraint t2_ph_nn not null constraint t2_ph_uk unique,
start_date date,
constraint t2_email_uk unique(email));
desc test2;
-- == 테이블 레벨 선언(not null은 컬럼레벨로만 선언 가능)
create table test2
(id number(10) constraint t2_id_nn not null,
name varcahr2(30) constraint t2_name_nn not null,
job varchar2(20),
email varchar2(20),
phone varchar2(20) constraint t2_ph_nn not null,
start_date date,
constraint t2_id_uk unique unique(id),
constraint t2_email_uk unique(email),
constraint t2_ph_uk unique phone(phone));
-- == 컬럼 레벨 선언
create table test2
(id number(10) constraint t2_id_nn not null constraint t2_id_uk unique,
name varcahr2(30) constraint t2_name_nn not null,
job varchar2(20),
email varchar2(20) constraint t2_email_uk unique,
phone varchar2(20) constraint t2_ph_nn not null constraint t2_ph_uk unique,
start_date date,);
primary key
- 기본키 제약 조건
- not null + unique 성격을 가짐
- 테이블 당 한 번만 선언 가능
create table test3
(id number(10) constraint t3_id_pk primary key,
name varchar2(30) constraint t3_name_nn not null,
job varchar2(20),
email varchar2(20) constraint t3_email_uk unique,
phone varchar2(20) constraint t3_ph_nn not null constraint t3_ph_uk unique,
start_date date);
foreign key
- 외래키 제약 조건
- 자기 자신 테이블이나 다른 테이블의 특정 컬럼(pk, uk)을 참조하는 제약 조건
check
- 컬럼이 만족해야하는 조건문을 자유롭게 지정하는 제약 조건
테이블 생성하기
create table employees1
(employee_id number(6) constraint emp1_employee_id_pk primary key,
first_name varchar2(20),
last_name varchar2(25) constraint emp1_last_name_nn not null,
email varchar2(25) constraint emp1_email_nn not null
constraint emp1_email_uk unique,
phone_number varchar2(20),
hire_date date constraint emp1_hire_date_nn not null,
job_id varchar2(10) constraint emp1_job_nn not null,
salary number(8,2) constraint emp1_salary_ck check(salary>0),
commission_pct number(2,2),
manager_id number(6) constraint emp1_manager_fk references employee1(employee_id),
department_id number(4) constraint emp1_dept_fk references departments(departemnt_id));
desc employees1;
728x90
'KDT > DB' 카테고리의 다른 글
240304 DB - SQL활용 데이터정의어(DDL) - table3 (0) | 2024.03.04 |
---|---|
240228 DB - SQL활용 데이터정의어(DDL) - table2 (0) | 2024.02.28 |
240221 DB - Data Dictionary, SQL 활용 (0) | 2024.02.21 |
240216 DB - 치환 변수 (0) | 2024.02.16 |
240214 DB - DML 2, 트랜잭션 (0) | 2024.02.14 |