sql의 제약조건에 대해서 학습했다.
테이블을 만들때 pk제약조건을 걸수 있다.
create table member
(
mem_id char(8) not null primary key,
mem_name varchar(10) not null,
height tinyint unsigned null
);
혹은 alter와 constraint를 이용해 pk 제약조건을 추가할 수 있다.
alter table member add constraint primary key (mem_id);
fk제약조건은 다음과 같이 걸 수 있다.
create table buy
(
num int auto_increment not null primary key,
mem_id char(8) not null,
prod_name char(6) not null,
foreign key(mem_id) references member(mem_id)
);
테이블을 만들때 ON UPDATE CASCADE, ON DELETE CASCADE를 추가해 연관관계가 있는 테이블들의 값을 자동으로 변경하게 할 수 있다.
create table buy
(
num int auto_increment not null primary key,
mem_id char(8) not null,
prod_name char(6) not null,
foreign key(mem_id) references member(mem_id)
on update cascade
on delete cascade
);
이전에 스프링 입문과정을 배웠을때 sql을 잠깐 배우면서 이런 쿼리를 본적이 있다.
ALTER TABLE EXAM DROP CONSTRAINT exam_fk_student_code;
ALTER TABLE EXAM ADD CONSTRAINT exam_fk_student_code FOREIGN KEY(student_code) REFERENCES STUDENT(student_code) ON DELETE CASCADE;
ALTER TABLE MANAGER DROP CONSTRAINT manager_fk_student_code;
ALTER TABLE MANAGER ADD CONSTRAINT manager_fk_student_code FOREIGN KEY(student_code) REFERENCES STUDENT(student_code) ON DELETE CASCADE;
DELETE FROM STUDENT WHERE student_code = 's1';
STUDENT 테이블에서 s1 수강생을 삭제했을 때, 연관관계가 있는 EXAM의 s1수강생 시험성적과 MANAGER의 managerA가 관리하는 수강생 목록이 자동으로 삭제 될 수 있도록 하는 쿼리였는데, 이제 이해가 된다.
ALTER TABLE … DROP CONSTRAINT …를 사용하여 FK의 제약조건을 삭제한다음, 다시 DELETE CASCADE로 제약조건을 추가 해줬기 때문에, DELETE ... student_code = 's1'; 했을때 s1과 연관관계가 있는 데이터들이 사라졌던 것이다.
sql을 배우면서 이해가 되는 것이 있고, 이해가 되지 않는 것들이 있는데, 이해가 가지 않더라도 어디에 쓰는지 외우면 도움이 될 것 같아 이해가 가지 않는 것들은 외우고 있다.이전에 sql을 배우면서 작성해놓았던 쿼리들을 보니, 기억나는 것도 있고, 기억나지 않는것도 있었다.조만간 간단한 db를 하나 작성해서 쿼리들을 써보며 익혀야 할 것 같다.
'개발일지(일간)' 카테고리의 다른 글
23년 01월 16일 팀프로젝트 (0) | 2023.01.16 |
---|---|
23년 1월 13일 sql (0) | 2023.01.13 |
23년 1월 11일 sql (0) | 2023.01.11 |
23년 1월 10일 sql (0) | 2023.01.10 |
23년 1월 9일 (0) | 2023.01.09 |