데이터베이스는 데이터를 저장하는 공간. MySQL을 설치한 후에는 가장 먼저 데이터베이스를 준비해야 한다. 그리고 데이터베이스 안에 테이블을 생성해야 한다.
테이블은 2차원의 표 형태로 이루어져 있으며, 각 열에 해당하는 데이터를 한 행씩 입력할 수 있다. 필요하다면 행에 입력된 데이터를 수정하거나 삭제할 수 있다. 마지막으로 입력이 완료된 데이터를 조회해서 활용할 수 있다.
<데이터베이스 구축 절차>
데이터베이스 만들기 → 테이블 만들기 → 데이터 입력/수정/삭제하기 → 데이터 조회/활용하기
데이터베이스를 구축하기 위해서는 DBMS를 설치해야 한다. 다행히 우리는 1장에서 DBMS의 한 종류인 MySQL을 설치해놨다.
+ 그림에 표현된 A, B 데이터베이스는 MySQL을 설치하면 기본적으로 들어 있는 데이터베이스를 표현한 것. 좀 더 자세히 이야기하면 1장에서 SHOW DATABASE 명령으로 나왔던 sakila, sys, world 등.
이제 DBMS 안에 데이터베이스를 만들 차례. 이번 실습을 마치면 비어 있는 '쇼핑몰 데이터베이스'가 생성된다.
작업 표시줄의 MySQL Workbench 아이콘을 클릭하고 MySQL Workbench 창의 [MySQL Connection]에서 'Local instance MySQL'을 클릭. Connect to MySQL Server 창이 나타나면 [User]는 'root'로 지정되어 있고, [Password]에 1장에서 설정한 '0000'을 입력한 후 [OK] 버튼 클릭한다.
+ 작업 표시줄에 MySQL Workbench 아이콘이 없다면 윈도우즈의 [시작] 버튼을 클릭하고 [MySQL] - [MySQL Workbench 8.0 CE]를 선택한다.
좌측 하든에 [Administration]과 [Schemas]가 탭으로 구분되어 있다. [Schemas] 탭을 클릭하면 MySQL에 기본적으로 들어 있는 데이터베이스가 3개 보인다. 지금은 그냥 무시하고 넘어가자!
+ 스키마(schema)와 데이터베이스는 동일한 용어. 앞으로 스키마 용어가 나오면 그냥 데이터베이스라고 이해해도 된다!!
[SCHEMA] 패널의 빈 부분에서 마우스 오른쪽 버튼을 클릭한 후 [Create Schema]를 선택한다.
새로운 쿼리 창에서 [Name]에 쇼핑몰을 의미하는 'shopdb'를 입력하면 자동으로 탭 이름도 동일하게 변경된다. [Apply] 버튼을 클릭하면 Apply SQL Script to Database 창에 SQL 문이 자동으로 생성된다. 다시 [Apply]와 [FInish] 버튼을 클릭하면 좌측 [SCHEMAS] 패널의 목록에 'shop_db'가 추가된다.
+ 지금은 처음이라 메뉴를 통해 데이터베이스를 생성한다. 앞으로는 실무에서 사용하는 것처럼 CREATE DATABASE 'shopdb'와 같은 SQL 문을 사용할 것이다.
탭을 닫기 위해 [File] - [Close Tab] 메뉴를 클릭하고 만약 Close SQL Tab 창이 나타나면 [Don't Save]를 선택한다. 이렇게 해서 비ㅓ 이쓴 쇼핑몰 데이터를 완성!
이제 테이블을 만들 차례! 이번 실습에서 테이블을 만들면 다음 그림과 같이 데이터베이스 안에 2개의 테이블이 생성된다.
테이블 생성하기 위해서 설계가 필요하다. 테이블을 설계한다는 것은 테이블의 열 이름과 데이터 형식을 지정하는 것.
회원 테이블은 다음과 같이 설계 완성했다고 가정하기.
회원 테이블은 아이디, 회원 이름, 주소 3개 열로 구성하고 각각의 영문 이름도 지정한다. 또한 데이터 형식은 모두 문자로 지정. 문자는 CHAR(Character의 약자)라는 MySQL 문법상 이미 약속된 예약어를 사용해야 한다. 문자의 최대 길이도 적절히 지정함.
널(NULL)은 빈 것을 의미하며 널 허용 안 함(Not Null, NN)은 반드시 입력해야 한다는 의미. 회원이라면 당연히 아이디와 이름은 있어야 하기 때문에 아이디 및 회원 이름 열은 꼭 입력하도록, 주소는 넣지 않아도 무방하도록 설계함.
+ 열 이름은 영문으로 만들 때 띄어쓰기 하지 않는 것이 좋음. 띄어쓰기 할 경우에는 열 이름을 큰따옴표("")로 묶어 줘야 해서 불편하다. 그래서 보통은 언더 바로 구분.
회원 테이블과 차이점이 있다면 INT가 새롭게 등장함. INT는 Integer의 약자로 소수점이 없는 정수를 의미함.
MySQL WorkBench 창의 [SCHEMAS] 패널에서 'shop_db'의 ▶를 클릭해 확장하고 [Tables]를 마우스 오른쪽 버튼으로 클릭한 후 [Create Table]을 선택한다.
우선 앞에서 설계한 회원 테이블의 내용을 입력한다. [Table Name(테이블 이름)]에 'member'를 입력하고, [Column Name(열 이름)]의 첫 번째 항목을 더블 클릭한다.
+ 테이블 이름, 열 이름은 모두 소문자로 입력. 대문자로 입력해도 모두 소문자로 변경되어 적용됨.
첫 번쨰 [Column Name(열 이름)]은 'memberid'로 입력하고 [Datatype(데이터 형식)]은 문자 8글자이므로 'CHAR(8)'이라고 입력한다.
그리고 설계할 때 아이디(member_id) 열을 기본 키로 설정하기로 했으므로 [PK(기본 키)]와 [NN(Not Null)]을 체크한다.
+ 만약 열 잘못 설정했다면 해당 열 선택 후 마우스 오른쪽 버튼을 클릭하고 [Delete Selected]를 선택하여 열 정보 삭제 가능._
이어서 아래 빈 줄을 더블 클릭해서 표에서 계획한 대로 회원 이름(membername, CHAR(5))과 주소(member-addr, CHAR(20))를 추가한다. [NN]은 member_name만 체크하면 된다. 최종적으로 다으뫄 같이 완성 후 우측 하단에서 [Apply] 버튼 클릭한다.
+ 테이블 만들 때는 [Table Name]과 테이블의 모든 [Column Name], [Datatype]을 지정해야 한다. 필요하다면 추가로 [PK] 및 [NN]도 지정한다._
Apply SQL Script to Database 창이 나타나고 자동으로 생성된 SQL 문이 보인다. [Apply]와 [Finish] 버튼을 클릭해서 테이블 만들기를 완료한다. [File] - [Close Tab] 메뉴를 선택해서 테이블 생성 창을 닫는다.
01 - 05 반복하여 제품 테이블 구성하기
2개의 테이블을 만들었다. [SCHEMAS] 패널에서 [shop_db] - [Tables]를 확장하면 회원 테이블(member)과 제품 테이블(product)을 확인할 수 있다.
테이블 구성까지 완료했다! 이제는 실제로 데이터를 입력할 차례. 데이터는 행(가로) 단위로 입력한다. 회원 테이블에는 4건, 제품 테이블에는 3건의 데이터를 입력하자. 입력된 결과는 다음 그림과 같이 그린다.
MySQL Workbench 창의 [SCHEMAS] 패널에서 [shop_db] - [Tables] - [memeber]를 선택하고 마우스 오른족 버튼 클릭 후 [Select Rows - Limits 1000]을 클릭.
MySQL Workbench 창의 중앙에 [Result Grid] 창이 나타난다. 아직은 모두 NULL로 표시. 데이터가 한 건도 없는 상태.
[member_id], [member_name], [member_addr] 항목의 'NULL' 부분을 클릭해서 다음과 같이 데이터 입력. 우측 하단에서 [Apply] 버튼 클릭하면 입력한 내용이 SQL로 생성된다.
Apply SQL Script to Database 창에서 [Apply]와 [Finish] 버튼 클릭하면 데이터가 입력된다.
입력된 결과 확인된다. [File] - [Close Tab] 메뉴를 클릭해서 데이터 입력 창 닫는다.
+ 기본 키 열로 자동 정렬
자세히 보면 아이디(member_id) 열의 알페벳 순서로 정렬되어 있는 것을 확인할 수 있다. 이유는 member_id를 기본 키로 설정했기 때문이다. 즉 기본 키로 설정한 열이 기준이 되어 오름차순으로 자동 정렬된다.
01 - 05와 같은 방법으로 제품 테이블(product)에 데이터를 3건 추가한다. 이것도 직접!
이번에는 수정, 삭제를 진행하기 위해 먼저 데이터를 추가해보자. 다시 [SCHEMAS] 패널의 회원 테이블(member)에서 마우스 오른쪽 버튼을 클릭하고 [Select Rows - Limits 1000]을 선택. 연습용 데이터를 1건 입력한 후 [Apply] 버튼을 연속 2회 클릭하고, [Finish] 버튼 클릭해서 입력 데이터를 적용한다.
조금 전 입력한 데이터 내용을 수정해보자. 수정할 데이터를 클릭하고 변경하면 된다. 여기서는 주소 변경함. 변경 후에는 다시 [Apply] 버튼 클릭해야 한다.
역시 SQL이 자동으로 생성된다. 이번에는 수정이기 때문에 UPDATE 문이 생성된 것을 확인할 수 있다. [Apply]와 [Finish] 버튼을 클릭해서 수정한 내용을 적용한다.
이번에는 데이터 삭제. 삭제하고자 하는 행의 제일 앞 부분을 클릭하면 행이 파란색으로 선택된다. 그 상태에서 마우스 오른쪽 버튼을 클릭하고 [Delete Row]를 선택한다. 삭제한 후에도 역시 [Apply] 버튼 클릭해야 한다.
SQL이 자동으로 생성된다. 이번에는 삭제이기 때문에 DELETE 문이 생성된 것을 확인할 수 있다. [Apply]dhk [Finish] 버튼 클릭해 수정한 내용 적용한다.
데이터까지 입력하여 데이터베이스 구축을 완료했다. 이번에는 데이터베이스를 활용하는 방법을 살펴보자. SQL에서는 데이터베이스를 활용하기 위해 주로 SELECT 문을 사용하며, 이 책에서도 SELECT 문을 활용하는 내용이 가장 많은 비중을 차지한다.
쿼리 창이 열려 있지 않은 상태에서 새 SQL을 입력하기 위해 툴바의 Create a new SQL tab for executing queries 아이콘을 선택한다. 실행된 결과 보기 위해 Output 아이콘 클릭하여 [Output] 패널도 활성화 한다.
작업할 데이터베이스를 선택하기위해 [SCHEMAS] 패널의 'shop_db'를 더블 클릭한다. 진하게 변경되면 앞으로 쿼리 창에 입력할 SQL이 선택된 shop_db에 적용된다는 의미이다. 처음 MySQL을 사용할 때 자주 빼먹는 부분이니 주의!
먼저 회원 테이블의 모든 행을 조회하기 위해 다음 SQL을 입력한다. SELECT의 기본 형식은 SELECT 열 이름 FROM 테이블_이름 [WHERE 조건]이며 *는 모든 열을 의미한다.
따라서 '회원 테이블의 모든 열을 보여줘'라는 의미이다. 툴바에서 Execute the selected portion of the script or everything 아이콘 클릭하면 [Result Grid] 창에는 결과가, [Output] 패널에는 현재 결과의 건수와 조회하는 데 소요된 시간(초)이 표시된다.
SELECT * FROM member;
+ SQL의 대소문자
SQL은 대소문자를 구분 X. 하지만 이 책에서는 구분하기 쉽도록 SQL 예약어에는 대문자로 표시. SQL의 제일 뒤에는 세미콜론(;)이 꼭 있어야 한다.
회원 테이블 중에 이름과 주소만 출력해보자. 기존 SQL을 지우고 다음과 같이 새로 입력 후 실행. 열 이름 부분에 회원 이름(member_name)과 주소(member_addr)만 나왔다. 이렇게 여러 개의 열 이름을 콤마(,)로 분리하면 필요한 열만 추출된다.
SELECT member_name, member_addr FROM member;
아이유 회원에 대한 정보만 추출해보자. 이번에는 앞의 SQL을 지우지 말고 다음 줄에 이어서 다음과 같이 입력한 후 실행. WHERE 다음에 특정 조건을 입력하여 회원 이름(member_name)이 '아이유'인 회원만 출력되도록 한 것. 그런데 [Result Grid] 창의 아래쪽 탭 살펴보면 2개의 SQL이 모두 실행된 것을 확인할 수 있다.
SELECT member_name, member_addr FROM member;
SELECT * FROM member WHERE member_name = '아이유';
05번과 같은 경우를 방지하기 위해서 1개의 SQL만 남기고 모두 지우는 방법도 있지만, 더 편리한 방법은 필요한 부분만 마우스로 드래그래서 선택한 후 실행하는 것. 두 번째 SQL만 선택하고 실행하다 마우스로 선택된 부분만 실행되기 때문에 하나의 결과 탭만 생성. 앞으로는 이 방법 사용!