이번에는 제약조건에 대해 적어볼 것이다.
먼저 기본키(PK)를 본다.
이렇게 테이블 tbl_aa를 만들고 id 컬럼에 기본키를 설정해준다.
이 테이블의 구조를 살펴보면 이렇게 기본키가 설정된 것을 볼 수 있다.
tbl_aa의 설정에 들어가서 index탭을 보면 자동으로 인덱스 설정이 되어있는 것을 볼 수 있는데 id열이 오름차순으로 되어 있는 것을 볼 수 있다.
그래서 여기에 값을 1이 아닌 2부터 넣어주고 나중에 1을 넣어도 pk가 오름차순으로 index되어 있기 때문에 1번 값이 먼저 나오게 된다.
또 다른 기본키를 설정하는 방법은 이런게 있다.
그러면 이렇게 기본키가 설정 된 것을 볼 수 있다.
다음은 두개의 열을 기본키로 설정하는 것이다.
이렇게 설정하면 id열과 name열에 기본키가 설정되는 것을 볼 수 있다.
다음은 명령어로 열 정보를 보는 방법이다.
select * from information_schema.columns where table_schema='shopdb' and column_key='PRI'; 이렇게 하면 information_schema 데이터베이스의 열들을 보는데 조건으로 table_schema 안의 테이블명인 shopdb의 기본키만 보도록 하는 방법이다.
또 다른 테이블을 만들었는데 이 테이블은 not null을 설정해주는 것이다.
< PK 추가 >
이제는 구조변경(제약조건 추가)를 해볼 것이다.
alter table 테이블명 add constraint PK명 primary key(열1, 열2);
tbl_dd 테이블에는 아직 기본키 값이 설정되어 있지 않는데 명령어를 적어서 id열과 name열 모두에게 기본값을 설정해줄 것이다.
alter table tbl_dd add constraint PK_tbl_dd_id primary key(id,name);
< PK 삭제 >
다음은 PK를 삭제 해볼 것이다.
alter table tbl_dd drop primary key; 로 삭제하면 기본키가 사라진 것을 볼 수 있다.
<연습문제>
create table buytbl_copy(select * from buytbl);
alter table buytbl_copy add constraint pk_buytbl_copy primary key(num);
desc buytbl_copy;
이번에는 외래키(FK)를 살펴볼 것이다.
먼저 tbl_aa테이블을 만드는데 id열에 primary key를 적용해 만들어준다.
그리고 tbl_bb도 만들어준다. 이때 tbl_aa의 기본키를 외래키로 가져올 것이다.
외래키 설정은
constraint 외래키명 foreign key(외래키열명) references tbl_a(기본키열명) 이렇게 해주면 된다.
tbl_bb의 외래키를 살펴보면 tbl_aa의 id 값이 외래키로 설정 된 것을 볼 수 있다.
또 index탭으로 가면 인덱스도 설정된 것을 볼 수 있다.
-- FK Options(외래키열의 옵션 정리)
-- RESTRICT : PK, FK 열의 값의 변경 차단
-- CASCADE : PK 열의 값 on Update, on Delete 이 변경시 FK 열의 값도 함께 변경
-- SET NULL : PK 열의 값이 변경시 FK 열의 값을 NULL로 설정
-- SET DEFAULT : PK 열의 값이 변경시 FK 열의 값은 Default로 설정된 기본값을 적용
-- NO ACTION : PK 열의 값이 변경시 FK 열의 값은 변경되지 않음으로 설정
명령어로 외래키 옵션을 설정해 볼 것이다.
외래키 설정은 on update 외래키 옵션 on delete 외래키 옵션 으로 하게 된다.
명령어를 입력한 후 설정에 들어가 외래키 옵션을 살펴보면 각각 CASCADE, SET NULL로 설정된 것을 볼 수 있다.
<연습 문제>
create table copy_buytbl(select * from buytbl);
alter table copy_buytbl add constraint pk_copy_buytbl primary key (num);
alter table copy_buytbl add constraint fk_copy_buytbl foreign key (userid) references buytbl(userid) on update cascade on delete restrict;
desc copy_buytbl;
'IT수업 > 데이터베이스' 카테고리의 다른 글
it 수업 6주차 (16) 변수, LIMIT, 형 변환, 비교연산자 (1) | 2024.02.01 |
---|---|
it 수업 6주차 (15) UNIQUE, CHECK, DEFAULT (2) | 2024.01.31 |
it 수업 6주차 (13) insert문 (0) | 2024.01.31 |
it 수업 6주차 (12) Group By 절 (1) | 2024.01.30 |
it 수업 6주차 (11) SQL문 2 (ORDER BY, DISTINCT, 복사) (1) | 2024.01.30 |