KDT/DB

240222 DB - SQL활용 데이터정의어(DDL) - table 1

001cloudid 2024. 2. 22. 12:50
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