본문 바로가기
Study/중앙정보처리학원과정

27일차. SQL 제약조건(CONSTRAINT)

by 얏옹이 2022. 12. 1.
반응형

 

오늘은 SQL의 TABLE 생성시 제약조건 관련하여 수업을 진행했다.

 

제약조건의 종류들은 이전 발행한 포스팅이 있으니 참고 바란다.

 

2022.11.30 - [Study/Oracle Database] - SQL 제약조건의 종류

 

SQL 제약조건의 종류

컬럼의 제약조건을 CONSTRAINT라고 한다. NOT NULL : NULL을 허용하지 않는다. 값을 필수로 넣어줘야한다. UNIQUE : 유일한값, 중복을 허용하지 않는다. CHECK : 조건을 만족하는지 체크한다. CHECK(조건)으로

yat-ong.tistory.com

 

 

제약조건은 TABLE 생성시 부여가 가능하다.

 

--게시판 테이블, 생성과 동시에 제약조건 추가
create table 테이블명(
    컬럼명 데이터타입(데이터크기) constraint 제약조건명 제약조건,
    컬럼명 데이터타입(데이터크기) constraint 제약조건명 제약조건,
    컬럼명 데이터타입(데이터크기) constraint 제약조건명 제약조건,
);

 

제약조건을 의미하는 CONSTRAINT 뒤에 제약조건의 이름제약조건의 종류를 기재해주면 된다.

 

저렇게 컬럼명별로 일일히 제약조건을 지정하는 방법이 첫번째 방법이고

 

두번째 방법은 컬럼을 모아서 지정후에, 제약조건도 따로 모아서 선언해주는 두번째 방법도 있다.

 

create table 테이블명(
    컬럼명1 데이터타입(데이터크기),
    컬럼명2 데이터타입(데이터크기),
    컬럼명3 데이터타입(데이터크기), 
    constraint 제약조건명 제약조건(컬럼명1),
    constraint 제약조건명 제약조건(컬럼명2),
    constraint 제약조건명 제약조건(컬럼명3)
);

 

이렇게도 선언이 가능하다. 첫번째와 두번째 둘다 편한쪽으로 사용하면 될것 같다.

 

 

기존 TABLE에 있는 Column에 제약조건을 추가하거나 수정하려면 Create Table이 아닌 Alter Table 선언을 해주며

없던 제약조건을 추가해주는건 ADD, 기존 제약조건을 수정하는거면 MODIFY를 사용한다.

 

alter table 테이블명
add constraint 제약조건명 제약조건(컬럼명);-- 추가
modify 컬럼명 constraint 기존제약조건명 제약조건; --수정

 

add는 컬럼명이 맨 뒤에오지만 modify는 컬럼명이 앞부분에 오고 기존 제약조건명을 적어줘야한다.

 

 

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

 

제약조건을 삭제해주는 문법이다.

 

추가로 Foreign key에 대해서만 별도로 언급해보자면 Foreign key는 보통 참조키로 많이 사용된다

 

관계형 데이터베이스에서 바로 테이블과 테이블을 연결시켜주는 참조키가 Foreign key인데 

 

이 Foreign key 선언만 다른 제약조건이랑 다르게

 

create table 테이블명(
    컬럼명 데이터타입(데이트크기) instraint 제약조건명 foreign key(컬럼명) references 부모테이블(부모테이블의 컬럼명)
);

 

이러한 방식으로 생성한다. 이는 참조하는 상위테이블과 하위테이블의 관계형성을 할때

 

Foreign Key에는 하위클래스의 컬럼명, references 뒤에는 상위클래스의 컬럼명을 기재해주면 된다.

 

마지막으로 오늘 강사님이 내주신 숙제가 있다.

 

공지사항 게시판과 관련된 테이블 생성해서 제약조건을 부여하고, DUMMY 데이터 입력하는 Insert문을 작성해서 내시오

 

개인적으로 시퀀스도 생성해주는걸로 정하고 숙제를 마쳤다.

 

--게시판 테이블, 생성과 동시에 제약조건 추가
create table board(
    boardno number constraint PK_board_boardno primary key, --게시글번호
    title varchar2(100) constraint nn_board_title not null, --제목
    comments number default 0, --댓글수
    user_number number, --회원번호, 참조키(추후 추가)
    user_id varchar2(10) constraint UK_board_user_id  unique, --회원id
    regdate date default systimestamp, --작성날짜(추후 Java나 DB에서 포맷 변경)
    readcount number(4) default 0, -- 조회수
    likecount number(4) default 0 -- 좋아요수
);

--시퀀스
create sequence board_boardno_seq
start with 1
increment by 1
maxvalue 9999
nocache;


--더미데이터 insert
insert into board(boardno, title, user_id)
values(board_boardno_seq.nextval, '제목입니다', '이소룡');

 

 

힘든 하루였다. 지하철 파업을 해도 대체인력이 투입되어 출퇴근시간에 영향이 없을줄 알았는데...

 

출근시간엔 영향이 없었지만 퇴근시간에....... 2호선 강남역 출입을 막아서 결국 논현역까지 걸어가서 7호선을 타고 귀가했다. 게다가 숙제라니... 하필이면 이런날 ㅠㅠㅠㅠ 

반응형