데이터 베이스를 운영하다보면 테이블의 구조를 변형해야 할 때가 있습니다. 가령, 손님의 정보 요구사항에 나이가 추가 되었다면 customer 테이블의 어트리뷰트( 열 )에 나이를 표시하는 항목이 추가되어야 할 것입니다. 이럴 경우 지금까지 배운 지식으로는 전체 테이블을 지우고 다시 만드는 수 밖에 없습니다. 하지만 테이블 안에 많은 양의 정보가 들어있을 경우 백업하기도 힘들고, 속도도 느리기 때문에 비효율적입니다.


1. 어트리뷰트 추가

 이럴 경우 간단히 테이블의 구조를 바꿀 수 있는 sql 구문이 있습니다. 바로 alter 구문인데요. 테이블에 어트리뷰트를 삽입하는 sql 문은 다음과 같습니다.


 table_name 에는 구조를 바꿀 테이블의 이름을 쓰고 A 에는 어트리뷰트 이름을 씁니다. D 는 추가 할 어트리뷰트의 도메인을 넣습니다. 예를 들어 customer 테이블에 age 라는 어트리뷰트를 추가하는 sql 문은 다음과 같습니다.

alter table customer add age int;

 위 sql 문이 적용되기 이전의 테이블이 다음과 같은 모습이었다고 가정하겠습니다.



sql문을 적용하고 난다음 테이블의 모습은 다음과 같습니다.




보시다 시피 age라는 어트리뷰트가 추가 된 것을 볼 수 있습니다. 하지만 따로 값을 지정해 주지 않았기 때문에 Mysql 의 경우에는 NULL 값을 채워 넣습니다.


2. 어트리뷰트 제거

 이제 테이블에서 어트리뷰트를 제거하는 sql문을 배워 보도록 하겠습니다. 어트리뷰트를 제거하는 sql구문은 다음과 같은 형태를 갖습니다.


 table_name 부분에는 어트리뷰트를 삭제하고자 하는 테이블의 이름을 쓰고 A에는 제거 할 어트리뷰트의 이름을 써 넣습니다. 그럼 예를 들어 보도록 하겠습니다. customer 테이블에 추가한 age 라는 어트리뷰트를 다시 제거해 보도록 하겠습니다.

alter table customer drop age;

위 sql 문이 적용되기 전의 테이블의 상태는 다음과 같습니다.



이제 sql 문을 적용한 모습을 보겠습니다.




 삭제 되는 어트리뷰트가 지워진 모습입니다. 모두 NULL 일 필요는 없고 저장되었던 정보는 모두 삭제가 됩니다. 이제 테이블의 구조도 바꿀 수 있게 되었습니다.




 이전 단계에서 테이블에 데이터를 기록하는 ( 레코드를 삽입하는 ) 구문을 배웠습니다. 그러면 테이블에서 데이터를 지우는 ( 레코드를 지우는 ) 구문을 실습해 보겠습니다.

1. delete from 구문

 그러면 예제로 다음과 같은 테이블과 레코드들이 있다고 가정하겠습니다.


 예제를 위해서 여러 레코드들을 삽입했습니다. ( 여러분들도 예제를 위해서 insert into 구문을 이용해서 예제 레코드들을 삽입해 보세요. ) 기본적으로 레코드를 삭제하는 delete from 구문은 다음과 같은 구조를 갖고 있습니다.



 "테이블_이름"부분에 삭제하고 싶은 레코드가 있는 테이블의 이름을 넣어 줍니다. 예를 들면, customer 테이블에 어떤 레코드를 삭제하고 싶을 경우 delete from customer ... 이런 식이 되겠죠. where 뒤의 조건에는 삭제하고 싶은 테이블의 조건을 명시합니다. 즉, customer_num의 값이 2인 레코드를 삭제하고 싶다면, delete from customer where customer_num=2가 되겠죠. 이 때, where 절에 의해서 선택되는 레코드는 유일하지 않습니다. 즉, where 뒤에 customer_name='ais' 라고 하면 customer_name의 값이 'ais'인 모든 레코드가 삭제 됩니다.


그럼 예제를 통해서 알아보도록 하겠습니다. 먼저 다음의 SQL문을 실행해보겠습니다.

delete from customer where customer_name=4;

 의미상으로는 customer_name의 값이 4인 customer_name이 abc인 레코드가 삭제가 될 것입니다. 실행해 보도록 하겠습니다.


 예상대로 customer_num이 4인 레코드가 삭제 되었습니다.

 그럼 다음으로 customer_addr의 값이 seoul인 레코드를 지워보도록 하겠습니다. 다음의 sql 문을 실행하도록 하겠습니다.

delete from customer where customer_addr='seoul';


Mysql의 경우 위 sql문을 실행 시켰을 경우 "2 rows affected" 라는 메시지가 뜹니다. 즉, 2개의 레코드가 영향을 받아서 제거 되었다라는 뜻입니다. 실제로 테이블에서 customer_addr의 값이 'seoul'인 모든 레코드가 제거 되었습니다.

 마지막으로 테이블에 있는 모든 레코드를 지우는 방법입니다. 하나하나 지우다 보면 시간낭비이고 자원낭비가 되는데, sql에서는 테이블의 모든 레코드를 지우는 방법도 제공합니다.


  눈치가 빠르신 분은 아시겠지만 위에서 언급했던 delete from 구문에서 where 절만 뺀 형태입니다. 특별히 '어떤 레코드를 지워라'라고 명시를 하지 않으면 테이블에 있는 모든 레코드를 삭제하게 됩니다. 굉장히 편리하죠.

 그럼 실제로 customer 테이블에 있는 모든 레코드를 지워보도록 하겠습니다. 다음의 sql 문을 실행하도록 하겠습니다.

delete from custmer;


 위와 같이 테이블의 모든 레코드들이 삭제 된 것이 보이며 mysql DBMS로 부터 2 rows affected 라는 메시지가 도착한 것을 볼 수 있습니다.


이제 테이블의 스키마를 설계해서 테이블을 생성하고 테이터( 레코드 )를 삽입, 삭제 하고, 테이블을 삭제 할 수가 있습니다. 이제 우리는 DB로 많은 것들을 할 수 있게 되었습니다.




 
.





1. 릴레이션 스키마

 데이터 베이스에 다음과 같은 테이블이 존재한다고 가정합시다. R-DB에서는 테이블을 릴레이션이라고 합니다. ( 테이블 자체가 관계를 의미하는 릴레이션을 나타내기 때문이죠. )

 번호 이름
주소
나이
 1  김태연 서울시 강동구
 21
 2  김태현 서울시 관악구
 30
 3  김신영 서울시 서초구
 26

여기에서 맨 처음 열의 제목 부분을 보면 "번호", "이름", "주소", "나이" 가 있습니다. 이것들을 릴레이션 스키마라고 합니다. 이 릴레이션 스키마는테이블의 전반적인 디자인을 나타냅니다. 위의 예를 들면 릴레이션 스키마 항목 중에서 "나이"라는 항목은 직관적으로 해당 사람의 나이를 나타내며 숫자로 올 것임을 알 수 있습니다.

 이전 포스트에서 살펴본 create 구문에서 어트리뷰트와 도메인을 같이 쓴 부분이 바로 릴레이션 스키마를 정의한 부분입니다. 위와 같은 테이블에서 같은 열의 도메인은 같음을 알 수 있습니다. ( 예를 들어 나이 부분에 갑자기 글자가 나오지 않고, 번호부분에도 마찬가지 입니다. )


2. 테이블로 데이터 삽입1 - 전체 어트리뷰트를 삽입 (insert into 구문)

 전 포스트에서 만들었던 customer라는 테이블에 데이터를 삽입하는 실습을 해보도록 하겠습니다. 테이블에 데이터를 삽입하는 SQL 문은 다음과 같은 구조를 갖습니다.


 
 table_name 부분에 데이터를 삽입하고 싶은 테이블 이름을 집어 넣으시고, value 이후에 오는 값들은 삽입 될 데이터들이며 오는 순서대로 테이블에 들어가게 됩니다. 다음의 예제를 직접 실행해 보도록 하겠습니다.

insert into customer value( 1, 'KTY', 'seoul');

 위 SQL 문을 직접 실행해보면 다음과 같은 실행 결과가 나오게 됩니다.



 위 SQL 문을 실행한 결과 각각 1, kty, seoul 이라는 값이 테이블에 삽입 된 것을 볼 수 있습니다. 여기서 주의 하셔야 할 것은 value 이후에 오는 값들은 테이블에 순차적으로 삽입 된다는 것입니다. 즉, 앞에서 value( 1, 'kty', 'seoul' ) 이라고 적었으므로 각각 1은 customer_num에 'kty'는 customer_name에 'seoul'은 customer_addr에 들어가게 되었습니다. 만일 순서를 바꿔서 입력을 한다면 어떻게 될까요?? 그건 숙제로 남겨두겠습니다.



3. 테이블로 레코드를 삽입 2 - 일부 어트리뷰트를 삽입 (insert into)

 만일 고객의 이름은 아는데 주소를 모를 경우 난감한 상황이 발생합니다. 왜냐하면 앞에서 배운 구문으로는 레코드를 이루는 값들을 모두 알아야 입력을 할 수 있기 때문입니다. 하지만 insert into 구문에는 필요한 어트리뷰트만 삽입 할 수 있는 방법이 있습니다. 해당 방식은 다음과 같은 형식을 갖습니다.
 

  테이블 이름 뒤에 입력하고 싶은 어트리뷰트를 선택하는 항목이 있습니다. 즉, A1 ~ Ak 까지가 입력하고 싶은 어트리뷰트를 선택하는 부분이고, value1 ~ value k 가 선택 된 어트리뷰트에 집어 넣을 값들을 써 넣는 부분입니다. 이번에도 실습을 통해서 배워 보도록 하겠습니다. 다음 SQL 구문을 실행해 보도록 하겠습니다.

insert into customer ( customer_num, customer_name ) value ( 2,'kth' );


  선택 된 어트리뷰트인 customer_num과 customer_name에 해당 값인 2와 'kth'가 삽입 된 것을 볼 수 있습니다. 그러면 선택이 되지 않은 어트리뷰트에는 어떤 값이 들어갈 까요? 바로 "널"값이 들어가게 됩니다.

 널값이란 1)알 수 없는 값이거나 2)존재하지 않는 값을 의미합니다. 간단히 바람직하지 않은 값이라고 생각하시면 됩니다. 나중에 이 널값에 대해서 다시 자세하게 알아보도록 하겠습니다. 일반적으로 널 값은 바랍직하지 않으며, 여러 경우에서 문제를 일으키게 됩니다.





.




 SQL을 이용해서 간단한 테이블을 만들어 보도록 하겠습니다. 테이블을 생성하는 명령어는 기본적으로 다음과 같은 형식을 갖습니다.


 create table로 시작해서 table_name 에는 만들고자 하는 테이블의 이름이 들어갑니다. 즉, 고객의 명단을 만들고 싶다면 create table customer ( ... ) 같은 SQL 문을 만들면 됩니다. A와 D는 각각 어트리뷰트 이름과 도메인을 정합니다. 예를 들면 name char(30) 은 30바이트의 크기를 갖는 문자열을 도메인으로 하는 name이란 어트리뷰트를 의미합니다. 쉽게 말하면 표에서 열 이름이라 할 수 있습니다.

그럼 이해하기 쉽게 예제를 이용해서 보도록 하겠습니다.
( 예제의 실행 환경은 Mysql 입니다. Access를 이용하실 분들도 문제 없이 실행 하실 수 있습니다. ) 다음 SQL 문을 실행하도록 하겠습니다.




 쿼리가 제대로 입력이 되었다면 "Query OK, 0 rows affected ... "라는 메시지가 뜰겁니다. 그럼 테이블이 제대로 만들어 졌는지 확인을 해보도록 하겠습니다.




 "show tables;"라는 명령어를 입력하면 Mysql DBMS는 여러분에게 현재 데이터베이스에 있는 테이블을 보여줄 것입니다. 이전 쿼리에서 customer 라는 테이블을 생성하였기 때문에 테이블 확인 쿼리에서 위와 같이 확인 하실 수 있습니다.

 테이블 만드는 법을 배웠으니 이제 테이블을 삭제하는 법을 배워 보도록 하겠습니다. 테이블을 지우는 쿼리는 다음과 같은 구조를 갖습니다.



 drop table table_name 의 구조를 갖으며 table_name 부분에 삭제하고 싶은 테이블의 이름을 입력하고 실행하시면 됩니다. 직접 실행을 해보면서 배워 보겠습니다. 다음과 같은 쿼리를 입력합니다.

 

 
 쿼리의 문법적 오류가 없으면 Query OK 이라는 메시지가 뜰 것입니다. 그러면 show tables; 를 입력해서 쿼리가 정상적으로 적용이 되었는지 확인해보도록하겠습니다.




 하나 있었던 테이블이 없어졌기 때문에 Empty set 이라는 결과가 나왔습니다. 이제 데이터베이스를 설계하고 실제로 Mysql에 구현을 할 수 있게 되었습니다. 좀 더 자세한 제약조건들이나 DDL 들을 배우시겠지만 여기까지만 배워도 데이터베이스를 구현하는데에는 큰 문제가 없을 겁니다.




 홈페이지를 만드시는 분들이면 APM을 아실 겁니다. 아파치( Apache )라는 서버 프로그램과 Php라는 웹 프로그래밍 언어, 그리고 MySql이라는 DBMS를 패키지로 설치할 수 있는 것을 말하는데요. 주로 리눅스 환경에서 사용하기 때문에 윈도우즈 계열의 운영체제를 사용하는 유저에겐 사용하기 어려운 패키지입니다. ( 물론 리눅스를 멀티부팅이나 VMWare 등으로 깔 수는 있지만 어째튼 메인이 윈도우즈이기 때문에 접근이 어려운건 마찬가지 입니다. )

 하지만 이런 수요를 만족시키는 프로그램이 있습니다. 윈도우에 APM 패키지를 설치해주는 프로그램입니다. 저도 Windows7에 APM을 설치해 보겠습니다.

 먼저 APMSETUP을 다운로드 받겠습니다.




  "APMSETUP7 DOWNLOAD"를 다운받습니다. 지금은 버전 7이 최신 버전이군요.





 설치 파일을 다운받고 실행을 시킵니다. 보니까 2010년 1월 3일에 배포된 버전인 것 같네요.




 경고창 따위는 가볍게 무시해 줍니다. "실행(R)"을 눌러 다음으로 진행합니다.





English로 하실 분은 하셔도 좋습니다만 책임은 못 집니다. ㅋㅋ 전 영어를 잘 못하므로 Korean을 사용하도록 하겠습니다.




 이제부터 설치가 시작됩니다. 다시보니까 MySQL 뿐만아니라 큐브리드도 설치가 가능하군요. 큐브리드도 한번 써보고 싶었는데 잘 됐네요. 나중에 한번 써보도록 하겠습니다.




 라이센스에 관한 내용입니다. 잘 읽어보시고 동의함 버튼을 누르시면 다음 단계로 이동합니다. 라이센스에 대해서는 한번 잘 읽어 보시는 것이 중요한 것 같습니다. 잘 몰랐던 법적 제한에 대해서도 알 수 있고, 범법을 하지 않게 되니까요.




 APMSETUP 7 설치에 딸려오는 부가적인 구성요소를 선택합니다. 큐브리드를 사용하실 분들은 CUBRID DBMS라는 항목을 체크해주시면 됩니다. 잘 모르겠으시면 그냥 다음 > 을 선택합니다.




 APMSETUP이 설치될 경로를 선택해 줍니다. 기본적으로 C: 드라이브에 깔지만 찾아보기를 이용해서 여러분이 지정한 경로에 저장 할 수 있습니다. ( 저는 파티션을 나눠서 D: 드라이브에 저장하는 편입니다. )




 이제 설치가 진행됩니다. 프로그램이 큰 편은 아니어서 빨리 설치가 되는 편입니다만 심심하신 분들은 자세히 보기를 눌러서 뭐가 설치되고 있는지 보시면 좋습니다. ( 저는 봐도 잘 모르겠습니다만... )




 아무튼 뭐가 이렇게 정신없이 지나갑니다. ㅋㅋ




 설치를 마치니 위와 같은 경고 창이 뜹니다. 따로 프로젝트를 진행하지 않는 한 액세스 허용은 안하셔도 좋습니다.




 설치가 완료되었습니다. 마침 버튼을 누르시면 Readme 파일이 실행 되고, APMSETUP 7 버전이 실행되게 됩니다. ( Readme 안 읽으시는 분은 체크 해제 하시면 되겠구요. )




 위와 같은 Readme 파일이 뜹니다. 뭐 나중에 알아야 할 정보들이 들어있을 수도 있으니 참고만 해두시기 바랍니다. 이제 APMSETUP 7 이 제대로 설치 되었는지 확인 해 보도록 하겠습니다.

http://localhost/index.php

이 링크를 클릭하거나 주소창에 써 넣으셔서 해당 주소로 들어가시기 바랍니다.



 위와 같은 내용이 나온다면 설치가 정상적으로 완료 된 것입니다. 설치된 php의 정보를 알고 싶으시면

http://127.0.0.1/?page=phpinfo

를 클릭하시면 php에 대한 정보를 알 수 있습니다.





 이제 MySQL을 다루는 방법에 대해서 말하겠습니다.

http://127.0.0.1/myadmin/




링크를 들어가셔서 phpMyAdmin 이라는 프로그램을 실행합니다. 아, 참고로 APMSETUP을 처음 설치하셨을 때, 기본 ID와 비밀번호는 root 와 apmsetup 입니다.




 로그인이 정상적으로 완료되면 위와 같은 화면이 뜹니다. 암호 변경을 눌러서 기본 암호에서 여러분의 암호로 바꾸도록 하겠습니다.




 변경하고자 하는 암호를 두번 입력해주시고 우측의 실행버튼을 누르시면 변경된 암호가 적용 됩니다.




 이제 변경 되었습니다. 로그아웃을 하시고 다시 한번 로그인을 하셔서 확인해 주시기바랍니다. 이제 여러분의 컴퓨터에서 홈페이지를 작업하고 확인하실 수가 있습니다.

홈페이지 작업을 할 때, 리눅스 서버의 /var/www/ 의 역할을 하는 폴더가 C:\apmsetup




-- 요약 --
APMSETUP 설치기.
Windows 환경에서 APM 설치해서 홈페이지를 만들어 볼 때 유용한 프로그램입니다.



+ Recent posts