티스토리 뷰

DDL

DDL(데이터정의어) : 객체(테이블, 뷰, 인덱스 등)를 생성, 수정, 삭제하는 명령어
- create, alter, drop, truncate
- 작업 단위 : 객체(테이블, 뷰, 인덱스 등)
- autocommit을 내포하고 있음.

 

 

* 테이블 table

테이블 생성 시 기본 정보 : 테이블명, 컬럼명, 데이터타입

옵션 : default값, 제약조건

데이터타입

  • 숫자 - int, bigint, double, float
  • 문자 - char(고정길이 문자형), varchar(가변길이 문자형)
  • 날짜 - date(연/월/일), datetime(연/월/일/시/분/초) 

 

* View

하나 이상의 테이블을 기반으로 생성되었으나 물리적으로 존재하지않고 DB에 정의만 되어있는 논리적 가상 테이블
- 보안성, 편의성, 공간적 효율성의 목적으로 사용

- 계산과 조작 용도의 insert, update는 불가능하다.


- 뷰 생성 create view

create view 뷰명
as select 컬럼1, 컬럼2, 컬럼3 (서브쿼리 구문 형태) from 테이블
  [where 조건문];
  
create view empvu10
as select employee_id, last_name, salary, department_id
   from emp
   where department_id = 10;

 

 

1. 테이블 생성 create table

1) default 값이 포함된 테이블 생성

값을 입력하지 않을 시 default 값이 입력된다.

create table dept
(deptno int,
 dname varchar(10),
 create_date datetime default now( ));

 

2) 제약조건

  • not null : 컬럼에 null값을 허용하지 않는다. 값이 반드시 있어야하는 필수 컬럼에 지정.
    varchar(가변길이 문자형) 사용 권장 - char일 경우 공간을 모두 차지하기 때문
  • unique : 중복되지 않는 유일한 값을 입력해야 한다. null 값은 허용(여러 개 입력 가능)
    주로 중복되면 안되는 주민번호, 전화번호, 메일 등에서 활용
create table test
( id int not null unique, 
  name varchar(10) not null,
  jumin varchar(13) not null unique,
  email varchar(25) unique,
  job varchar(20) );

 

  • primary key : 대표 컬럼(행을 고유하게 식별해줌)에 선언하는 기본 키. nn+uk
  • foreign key : 두 테이블의 관계 선언(데이터의 무결성을 보장), 특정 컬럼을 참조.
    - pk, uk 선언된 컬럼만 참조 가능
    - fk 선언된 컬럼 : 자식 컬럼 /
    참조하는 컬럼 : 부모 컬럼
    - 부모 컬럼에 있는 데이터 중 하나만 삽입, 수정 가능
create table test2
( t_num int primary key, 
  t_id int, title varchar(15) not null, 
  info varchar(100) not null, 		   -- 여기까지가 컬럼 레벨 정렬
  foreign key(t_id) references test(id) ); -- 테이블 레벨 정렬

 

  • check : 해당 컬럼이 만족해야하는 조건을 지정
create table test3
( id int(10) primary key, 
  jumin varchar(13) not null unique check (length(jumin)=13),
  gender check (성별 in ('남', '여', '기타')),
  start_date date check (start_date >= '2020-01-01') );

 

테이블에 선언된 제약조건을 정보를 조회할 때

use information_schema;

-- test2 테이블에 선언된 제약조건 정보 조회
select * from table_constraints
where table_name = 'test2';

-- shop DB(스키마)에 존재하는 테이블에 선언된 모든 제약조건 정보 조회
select * from table_constraints
where constraint_schema = 'shop';

 

서브쿼리를 사용해 테이블 생성 시 구조와 데이터가 복사된 테이블이 생성된다고 했는데

제약조건은 not null만 복사된다.

2. 테이블 수정 alter table

데이터타입, 컬럼사이즈, default값 등 수정 가능하다.

 

1) 컬럼 추가

테이블 생성 후 컬럼을 추가하면 마지막 컬럼으로 추가된다.

null이 초기 값이나 default 값 지정 시 default 값이 삽입되어 있다.

alter table dept10
add  job_id varchar(5)
     mail varchar(20) default '미입력';

-- 가장 앞에 컬럼 추가
alter table dept10
      add emp_no int first

-- 특정 컬럼 뒤에 컬럼 추가
alter table dept10
      add salary int default 100 not null after name;

 

2) 컬럼 수정

-- 데이터 타입 수정
alter table dept10
      modify salary mint;

-- 컬럼 사이즈 수정
alter table dept10
      modify name varchar(20) not null;

-- default 값 수정
alter table dept10
      modify salary mint default 200 not null;
    
-- 컬럼명 수정
alter table dept10
      rename column hire_date to start_date;

 

3) 컬럼 삭제

부모 컬럼일 경우 제약조건을 먼저 삭제해야 한다!

alter table dept10
drop emp_no;

 

4) 제약조건 추가

-- pk 추가(uk와 동일)
alter table dept10
add primary key(employee_id);

-- nn 추가
alter table dept10
modify annsal double(22,0) not null; 

-- check 추가
alter table dept10
add check (salary > 100); 

-- fk 추가
alter table dept10
add mgr_id int default 100;

 

 

5) 테이블 삭제 drop table

테이블을 (구조, 데이터, 제약조건 등) 삭제한다.

drop table dept10;

 

제약조건 삭제

- pk 삭제 시 오류가 발생한다.

- 부모 컬럼에 선언된 pk, uk는 삭제할 수 없다(fk를 먼저 삭제해야함)

 

우선 제약조건 정보를 조회한다.

use information_schema;
select *
from table_constraints
where table_name = 'dept10';
-- fk 삭제 
alter table dept10
drop foreign key dept10_ibfk_1; 

-- check 삭제
alter table 테이블명
drop check check제약조건명;

-- uk 삭제
alter table 테이블명
drop index unique제약조건명;

-- nn 삭제
alter table dept10
modify annsal double(22,0) null;

 

6) 테이블 절단

테이블의 모든 행을 삭제한다.

truncate table dept10;

 

delete와 truncate 구분

delete truncate
DML 데이터조작어 DDL 데이터정의어
commit, rollback 결정 가능 auto-commit 내포
테이블의 특정 행을 삭제 테이블의 모든 행 상제
delete from 테이블명; == truncate table 테이블명;

 

'배운 것 기록 > DB' 카테고리의 다른 글

[Oracle] SQL Developer  (0) 2022.07.06
[Oracle] Oracle DBMS 접속 방법  (0) 2022.06.23
[MySQL] DML(insert, update, delete)  (0) 2022.06.16
[MySQL] 서브쿼리  (0) 2022.06.09
[MySQL] 단일행함수  (0) 2022.06.03
댓글
최근에 올라온 글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함