본문 바로가기

개발일지(일간)

23년 1월 12일 sql

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