본문 바로가기

프로젝트/KimsBoard

DML 작성

 

FRONT에서 데이터를 입력하여 이것을 서버에 반영하고 싶거나 데이터를 불러올때 DML이 필요한데 이때 DML을 작성하는데 있어 단순히 만들어놓은 API명세서만을 보고 DML을 작성하는 것이 아니라 작성해놓은 DDL의 생성된 테이블을 참고하여 하나의 테이블에 넣을 하나의 튜플(인스턴스)을 만들기 위해 어떤정보를 DML에 넣을 것인지를 판단해준다. 클라이언트에서 REQUEST를 보내면서 BODY에 실어보내는 정보 뿐만이 아니라 서버 자체에서 얻을 수 있는 정보는 REQUEST의 BODY에 포함되어 오지 않기 때문에(이말 맞는 말임????) DDL에 정의된 테이블의 필드를 살피는 것이다. 예를들어 API명세서에 '게시물 작성' 이라는 기능이 있는데 게시물을 작성하기 위해 어떤 정보가 필요한지는 서버 자체에서 얻을 수 있는 정보도 있기 때문에 클라이언트에서 보내는 API명세서를 보는 것보다 DDL의 CREATE TABLE 양식을 보는 것이 더 정확하다. 

'게시물 작성' DML을 만들어보자

board의 DDL이 아래와 같다.

따라서 '게시물 작성' 이라는 기능을 구현하고자할때 DB에 날리는 DML은 아래와 같다.

INSERT INTO board(title, content, write_datetime, favorite_count, comment_count, view_count, writerEmail)
VALUES ('제목', '내용', '2024-02-12 20:20', 5,3,2,'user@email.com');

참고로 board테이블에 들어가게 되는 객체는 wrtierEmail이라는 외래키 필드를 포함한다. 즉 user테이블에 해당 email을 가진 user가 존재해야 그 이메일을 위에서 board테이블에 insert할때 VALUES 값으로 사용할 수 있다. 만약 user에 해당 email이 존재하지 않으면 아래와 같은 오류가 발생한다.

com이 아니라 net이다.

com을 net으로 수정하면 아래와 같이 정상적으로 INSERT되는 것을 확인할 수 있다.

=======================================================================================

참고. VSCode의 확장팩인 DATABASE사용법 관련하여 이미 테이블을 생성해 놓은 상태에서 추가적인 제한사항을 더 적용하고 싶을때 어떻게? 물론 테이블을 DROP하고 처음부터 다시 테이블을 생성해도 되지만 다른테이블이 참고하고 있는 경우는 이것도 녹록치 못하다. 따라서 이때는 해당 테이블의 컬럼을 더블클릭하면 ALTER TABLE CHANGE라는 쿼리가 나오는데 여기서 내가 적용하고 싶은 제한사항을 추가해 주면 된다.