본문 바로가기
Kosta DevOps 과정 280기/Java

스키마 수정

by 롯슈83 2024. 6. 19.

DDL

  • create : 테이블을 생성
  • alter : 테이블 구조를 변경
  • drop : 테이블 삭제 --> 단, 자식 테이블부터 먼저 삭제

DML 

  • insert : 레코드의 생성
  • update : 레코드의 수정
  • delete : 레코드의 삭제
  • select : 레코드의 조회

테이블 구조 변경하기 : alter 로 시작

  • 컬럼 추가 - 레코드가 이미 존재하는 테이블에 새로운 칼럼을 추가할 때 not null 제약 불가
  • 컬럼 삭제
  • 컬럼 속성 변경 - 레코드가 이미 있을 때 마찬가지로 바꿀 수 없다.

컬럼 추가하기

  • 형식
alter table 테이블이름 add 칼럼이름 자료형;

 

칼럼 삭제하기

alter table 테이블이름 drop column 칼럼이름

 

칼럼 속성 변경

alter table 테이블이름 modify 칼럼이름 새로운자료형

 

기본 키 설정

alter table newbook add primary key(컬럼[들]);
alter table 테이블이름 add constraint 제약명 primary key(칼럼[들]);

 

fk 설정

alter table 테이블이름 add foreign key(칼럼[들]) references 부모테이블(칼럼[들]);
alter table 테이블이름 add contraint 제약명 foreign key(칼럼[들]) references 부모테이블(칼럼[들]);

 

제약

제약(constraint) 추가하기

alter table newbook add check(조건);
alter table newbook add [constraint 제약이름] check(조건);

 

  • 사용자가 설정한 제약의 정보를 갖고있는 데이터 사전
    • 오라클은 user_constraints라는 데이터 사전(엄밀히 말하면 뷰)을 제공해준다.
    • 임의로 제약이름이 자동으로 붙는데 개인적으로 이름을 붙일 수도 있다.
    • constraint_name: 제약의 이름
    • constraint_type: 제약의 종류
    • table_name: 제약이 설정된 테이블 이름
    • status column은 제약의 상태를 알려준다.

 

검색 시 주의점

  • 데이터베이스 명령어 자체는 대소문자를 구별하지 않는다. 하지만 테이블 이름으로 값으로 판별할 때는 대소문자를 구별합니다.
  • 데이터 사전인 user_constraint 에 테이블 이름은 대문자로 들어갑니다.

제약(constraint) 비활성화, 활성화 하기

--제약 비활성화
alter table 테이블이름 disable constraint 제약명;

--제약 활성화
alter table 테이블이름 enable constraint 제약명;

 

  • 제약에 따른 만족하지 않는 레코드가  있으면 활성화시킬수 없다. 따라서 이럴 때는 조건에 맞지 않는 값을 수정한 뒤에 활성화시켜야 한다.

기존 제약 이름 변경

alter table 테이블명 rename constraint 원래이름 to 바꿀 이름;

 

기존 테이블 이름 변경

alter table 테이블명 rename to 바꿀테이블명;

 

기존 컬럼이름 변경

alter table 테이블명 rename column 원래이름 to 바꿀이름;

 

제약 삭제

drop constraint 제약명;
create table newbook(
    bookid number,
    bookname varchar2(20),
    publisher varchar2(20),
    price number
);

alter table newbook add isbn varchar2(13);
desc NEWBOOK;
drop table newbook;

create table newbook(
    bookid number,
    bookname varchar2(20),
    publisher varchar2(20),
    price number
);

insert into newbook values(1, '자바', 'kosta', 5000);

drop table newbook;
create table newbook(
    bookid number,
    bookname varchar2(20),
    publisher varchar2(20),
    price number
);
alter table newbook add isbn varchar2(13);
alter table newbook modify isbn number;
desc newbook;
alter table newbook drop column isbn;
--alter table newbook add isbn varchar2(13) not null;-- 불가
-- 레코드가 이미 존재하는 테이블에 새로운 칼럼을 추가할 때는 notnull 제약 불가

insert into newbook values(1, '재미있는 자바', '코스타', 40000);
insert into newbook values(2, '재미있는 신나는 스프리잉', '코스타', 40000);
alter table newbook modify bookname varchar2(50);

select * from newbook;
desc newbook; 
-- 연습 ) newbook 테이블에 bookname에 
-- 대하여 not null을 설정해보고 싶다.
-- 또 자료형 50자 not null 하기
alter table newbook modify bookname varchar2(50) not null;
-- 이미 있는 테이블에 pk 설정하기
alter table newbook add primary key(bookid);

insert into newbook values(3, '테스트!', '안되야함', 10);

alter table newbook add check(price >= 1000);

desc USER_CONSTRAINTS;

--연습) newbook 테이블에 설정된 제약 정보를 조회한다.)
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME, STATUS
from USER_CONSTRAINTS
WHERE TABLE_NAME = 'NEWBOOK';
-- 테이블명은 소문자 안됨

-- 제약을 비활성화 시키기
alter table newbook disable constraint sys_c008479;

--제약 다시 활성화 시키기
alter table newbook enable constraint sys_c008479;
alter table newbook enable constraint sys_c008478;

desc USER_CONSTRAINTS;

select CONSTRAINT_NAME,SEARCH_CONDITION_VC, CONSTRAINT_TYPE, TABLE_NAME, STATUS
from USER_CONSTRAINTS
WHERE TABLE_NAME = 'NEWBOOK';


create table person2(
    name varchar(10) not null,
    jumin number primary key,
    ki number check(ki > 0),
    addr varchar(30) default '한국 내 거주'
);
drop table person2;

 

'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글

commit, rollback  (0) 2024.06.20
insert, update  (0) 2024.06.20
예제  (0) 2024.06.19
기본키와 참조키의 설정  (0) 2024.06.19
제약의 종류와 설정  (0) 2024.06.18