관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

테이블과 뷰 1 - 테이블 만들기 본문

알고리즘 및 자료 관리/SQL

테이블과 뷰 1 - 테이블 만들기

huenuri 2024. 10. 21. 15:33

드디어 새로운 단원 학습에 들어가게 된다. 오늘은 5장과 6장까지 학습해 볼 생각이다.

 

테이블은 MySQL 워크벤치 환경에서 간단히 마우스 클릭으로 만들 수 있지만, 실무에서는 SQL 문을 사용하는 것을 더 선호한다. 2가지 방법 모두 유용하게 사용되므로 차례대로 알아보겠다.

 

 

시작하기 전에

테이블은 표 형태로 구성된 2차원 구조로, 행과 열로 구성되어 있다. 

테이블은 엑셀의 시트와 상당히 비슷한 구조이다.


 

 

 

 

데이터베이스와 테이블 설계하기

2장에서 테이블을 만드는 법을 배웠지만 한번 더 복습하는 의미로 테이블을 생성하는 실습을 진행해보려고 한다. 

 

 

먼저 테이블의 구조를 정의한다. 4장에서 배운 데이터 형식을 활용해서 각 열에 가장 적합한 데이터 형식을 지정한다. 회원 테이블은 다음과 같은 구조로 설계한다. 특히 데이터 형식에 주의해서 아이디를 기본 키로 지정하고, 평균 키는 TINYINT UNSINGNED를 사용해서 0~255 범위로 지정하면 적당하다.

테이블을 만들기 전에 설계를 먼저 해야 한다. 테이블 설계는 테이블의 이름, 열 이름, 데이터 형식, 기본 키 등을 설정하는 것을 말한다.


 

 

 

 

GUI 환경에서 테이블 만들기

먼저 GUI 환경에서 테이블을 만드는 방법에 대해 배워보겠다.

 

데이터베이스 생성하기

 

처음에는 DB를 만들 수 없다는 오류가 잔뜩 떴는데 기존에 만들었던 DB를 삭제하니 이제 잘 만들어졌다.

 

 

 

Refresh를 하면 naver_db가 보인다.


 

 

 

 

테이블 생성하기

 

회원 테이블 생성

 

 


 

 

 

구매 테이블 생성

 

 

그런 다음에 외래키를 지정하는 코드를 추가한다. 이 부분을 수정하지 않고 apply를 했더니 다시 수정할 수가 없어서 모두 삭제하고 다시 만들어야 했다.

 

 

 

 

 

생성된 외래키는 SCHEMAS 패널에서 확인할 수 있다.


 

 

 

데이터 입력하기

 

회원 테이블

 

 


 

 

구매 테이블

 

 

하지만 적용을 하면 다음과 같은 오류가 발생한다.

 

 

 

 

회원 테이블과 구매 테이블은 기본키-외래키로 연결되어 있다. 이는 구매 테이블의 mem_id 값은 반드시 회원 테이블의 mem_id로 존재해야 한다는 의미이다. 우리는 아직 회원 테이블에 APN이라는 회원을 입력하지 않았다.

쉽게 이야기하면 물건을 구매하려면 먼저 회원 가입을 해야 한다는 것이다.

 

 

 

 

 

한 행을 삭제하고 2건만 적용했다.


 

 

 

 

 SQL로 테이블 만들기

이제 SQL을 이용해서 처음부터 다시 테이블을 생성해보겠다.

 

 

데이터베이스 생성하기


 

 

 

테이블 생성하기

회원 테이블 생성

 

테이블을 설계했던 표만 있으면 테이블을 만드는 건 쉬운 일이다. PK, NOT NULL은 아직 지정하지 않았다. 이제 NULL 및 NOT NULL을 지정해서 테이블을 다시 만들어본다. 아무것도 지정하지 않으면 기본값으로 NULL을 허용한다. 하지만 직접 NULL이나 NOT NULL을 모두 지정하는 것이 좋다.

 

 

 

 

이번에는 테이블에 기본 키를 설정할 것이다. 기본 키로 설정하기 위해서는 지정할 열 뒤에 PRIMARY KEY 문을 붙이면 된다. 기본 키로 지정한 열에는 NOT NULL을 생략해도 NOT NULL로 취급한다.

 

 

 


 

 

 

구매 테이블 생성

 

이때 주의할 점은 AUTO_INCREMENT로 지정한 열은 PRIMARY KEY나 UNIQUE로 꼭 지정해야 한다.

 

 

 


 

 

 

데이터 입력하기

회원 테이블에 3건의 데이터를 입력해 보겠다.

 

 

이번에는 구매 테이블에 3건의 데이터를 입력해 본다.

 

 

하지만 오류가 떴는데 이건 조금 전에 APK 회원 테이블을 만들지 않아서 그런 것이다.


 

 

 

 

단원 마무리하기

 

 

 

 

 

 

 

 

 

 

 

5번은 mem_id는 맞는데, debut_date가 아니라 height가 답이다. mem_id 행은 FOREIGN KEY가 아니라 PRIMARY KEY로 지정해야 한다. 이건 알고 있었다. 하지만 height에서는 TINYINT가 아니라 TINYINT UNSIGNED 또는 SMALLINT, INT, BIGINT로 지정해야 한다는 것이다.

 


 

 

 

학습을 마치고

이 단원도 마치는데 오랜 시간이 걸렸다. 공부를 하다 너무 졸려서 낮잠을 자기도 했고 월요일이라 그런지 공부가 가장 하기 싫은 날이기도 했다. 그래도 끝까지 단원을 다 마칠 수 있어서 다행이었다.

GUI 방식보다는 SQL로 작성하는 것이 훨씬 더 내겐 더 편했다. GUI로 할 때는 훨씬 더 어려웠고 한 행을 잘못 입력하면 처음부터 다시 작성해야 하니 여간 불편한 게 아니었다.

 

고급 SQL이라 그런지 생각했던 것보다 좀 어려워서 시간은 더 걸리지만 그래도 중요한 건 빨리 가는 것이 아니라 제대로 가고 있느냐이다.