[MySQL & PHP] 4장 데이터베이스 만들기

MySQL & PHP 학습/정리 그리고 체크! 2015. 7. 17. 19:28

728x90
반응형

정리

1. 데이터베이스를 만드는 과정


데이터베이스 이름을 'db1'  로 생성할 시 


MySQL 콘솔창에서! 다음과 같이 입력합니다.

create database 데이터베이스_이름;

제대로 생성이 되었다면! Query OK, row affected <0.00 sec> 라고 표시 됩니다.

여기서 Query OK, row affected <0.00 sec> 는 Query는 OK이며, 1행이 변경되었으며 0.00초 소요되었다. 라는 의미입니다.


데이터베이스를 만들때 한글을 입력해도 되지만 문제가 발생할 우려가 있기 때문에 될 수 있으면 사용하지 않습니다.


오류가 발생했을때

쌍반점(;) 을 잊지 않았는지 확인을 합니다. 쌍반점을 입력하지 않고 Enter 키를 누르게 되면

'->' 라고 표시 됩니다. 이것은 '명령이 완성되지 않았다.' 라는 의미로 쌍반점(;)을 입력하고나서 Enter키를 누르면 명령이 실행됩니다.

만약 'You have an error in your SQL syntax'(SQL 문에 구문 오류가 있습니다)라는 메시지가 표시되면, 명령문의 철자에 오류가 없는지 확인하도록 합니다. 또한 'Can't create database 'db1'; database exists'(db1이 이미 존재하기 때문에 데이터베이스 db1 을 생성할 수 없습니다)라는 메시지가 표시되면 이미 db1 이 존재한다는 뜻입니다. 같은 이름의 데이터베이스는 만들 수 없습니다.



이제 생성된 데이터베이스를 확인해봅시다.



데이터베이스의 목록을 확인하는 명령은

show databases;

입니다. 다음과 같이 출력되며 방금 생성한 db1이 목록에 나타나 있는걸 확인할 수 있습니다.

맨 아랫부분에 '8 rows in set' 이 부분은 출력된 목록의 행수를 표시합니다.

여기서 저희가 만든적도 없는 test 와 mysql 이 있습니다.

test는 MySQL 을 설치할 때 자동적으로 만들어진것 입니다.

mysql은 MySQL의 다양한 정보가 저장된 데이터베이스 입니다. 예를들어, mysql데이터 베이스 에는 사용자를 관리하는 user 테이블도 저장되어 있습니다.


이 외에도 MysSQL의 정보가 저장된 데이터베이스와 샘플 데이터베이스가 존재 합니다.



2. 테이블을 만드는 과정


테이블을 만들기 이전에 만들고자 하는 테이블을 어떤 데이터베이스에 만들건지 알아야 합니다.


MySQL 에서는 MySQL 콘솔창이 실행 되어도 곧바로 데이터베이스를 사용할 수 있는것은 아닙니다. 반드시 '어떤 데이터베이스를 사용할 것인지' 명시적으로 선언해야 합니다.

단, 사용할 데이터베이스를 지정하지 않아도 MySQL 콘솔창은 실행 됩니다.

RDBMS에 따라서는 실행과 동시에 데이터베이스를 지정해야만 하는 것도 있지만, MySQL에서는 아무 때나 선언해도 상관 없습니다.


사용할 데이터베이스 지정하기

use 데이터베이스_이름;



사진과 같이 명령을 실행하면 Database changed 라는 문구가 출력됩니다.

여기서!

그런데 왜? 'use 데이터베이스' 에는 마지막에 쌍반점(;)을 입력하지 않은걸까요?

일반적으로 SQL문에서는 명령문의 마지막에 쌍반점(;)을 입력해야 하지만, use 명령은 SQL문이 아니어서 쌍반점을 입력하지 않아도 됩니다. 그리고 use 명령 대신에 \u 를 사용해서 \u db1을 사용할 수도 있습니다. (아래 이미지 참고)


또한, MySQL에서는 데이터베이스를 선택하지 않은 상태에서 MySQL 콘솔창을 실행할 수 있기 때문에, 현재 어느 데이터베이스를 사용하고 있는지 잊어버리는 일도 있습니다.

따라서 지금 어느 데이터베이스를 사용하고 있는지 항상 의식해야 합니다.


현재 사용하는 데이터베이스 표시하기

select database();



select database(); 명령을 입력하면 위에 내용중

1 row in set 부분이 눈에 띌 것입니다. 현재 선택되어진 데이터베이스는 1개 라는 의미겠죠?

또한, MySQL 콘솔창을 실행할 때 데이터베이스를 지정할 수 있습니다.



이제 본격적으로 데이터베이스 db1 에 테이블을 만들어 보겠습니다.

데이터 베이스 db1은 아직 비어있는 상태 입니다.

테이블을 만들 때에는 저장할 데이터의 종류와 칼럼 이름 등의 구조를 미리 정해야 합니다.


데이터베이스에서 테이블을 구성하는 항목을 '', 실제로 입력된 레코드를 구성하는 항목을 '칼럼' 이라는 용어로 구별합니다.

칼럼(열) 에 저장하는 데이터의 종류를 자료형 이라고 합니다. int형은 1,2,3... 과 같은 정수를, varchar형은 문자 데이터를 저장할 수 있다는 의미입니다. 그리고 varchar형에는 (10)과 같이 숫자를 함께 표시하는데, 이 (10)이라는 숫자는 '문자를 10개까지 입력할 수 있다.' 라는 의미 입니다.


생성할 테이블의 구조

구체적인 내용 

사원번호 

이름 

나이 

칼럼(열) 이름 

number 

name 

age 

자료형 

VARCHAR(10) 

VARCHAR(10) 

INT 


칼럼 age 에는 정수를, 칼럼 number와 name에는 10개까지 문자를 저장할 수 있는 테이블 tb1을 생성합니다.


테이블 이름이나 칼럼 이름에 한국어를 사용할 수도 있지만, 여기에서는 칼럼 이름에 number나 name, age와 같이 알파벳을 사용했습니다.


테이블 만들기

테이블을만들 때에는 create table이라는 명령을 사용하며, 괄호() 안에 칼럼 이름과 자료형을 입력합니다. 칼럼 이름과 자료형 사이에는 공백을 두어 구분하고, 칼럼과 칼럼 사이에는 반점(,)을 사용해서 구분합니다.

create table tb1 (칼럼이름 자료형, 칼럼이름 자료형, 칼럼이름 자료형...);



여기서 주의해야할건... 명령문의 마지막에 쌍반점(;)을 입력 했는지 입니다.

쌍반점을 입력하지 않으면 명령은 실행되지 않습니다.

또한, 이미 같은 이름의 테이블이 존재할 때도 오류가 발생합니다.

'Query OK' 라고 표시되면 성공 입니다.


이렇게 만들어진 테이블을 확인해 보는 명령어도 있습니다.

show tables;


문자 세트를 지정해서 테이블 만들기

MySQL에서 테이블에 문자를 입력했을 때, 여러가지 원인에 의해 글자가 깨지는 경우가 있습니다.

이럴 때에는 테이블을 생성할 때 문자 코드를 함께 지정하면 문제를 해결할 수 있습니다.


예를 들어, UTF-8을 지정해서 테이블을 만들 경우, create table~ 명령에 charset=utf8을 옵션으로 설정합니다.




3. 칼럼 구조 표시하기


테이블의 구성하느 칼럼의 자료형과 기타 다른 구조를 확인해 보겠습니다.

테이블의 칼럼 구조를 표시하는 명령

desc 테이블_이름;



Null은 아무것도 입력하지 않아도 된다는 의미,

Default는 아무것도 입력하지 않으면 설정되는 기본값을 의미

Field는 칼럼이름,

Type은 자료형

을 나타냅니다.

자세히 보면 int옆에 표시된 숫자는 자릿수를 의미하는데 이는 MySQL에 의해 자동으로 설정됩니다.



4. 레코드 추가하기


테이블 tb1은 만들어 졌지만, 아직 가장 중요한 데이터가 존재하지 않습니다.

테이블에 데이터를 추가하기

insert into 테이블_이름 values(데이터1, 데이터2...);

values의 뒤에 있는 괄호() 안에 칼럼의 순서대로 데이터를 입력하는데, 이때 각각의 데이터는 반점(,)으로 구분합니다.


여기에서는 D주식회사의 사원정보 테이블 tb1에 다음과 같은 데이터를 추가해 보겟습니다.


테이블 tb1에 추가할 데이터

칼럼 number에 추가할 값

칼럼 name에 추가할 값 

칼럼 age에 추가할 값 

A101 

강신우 

40 

A102 

김기덕 

28 

A103 

김민호 

20 

A104 

문소리 

23 

A105 

박문수 

35 


예를 들어, 1번째 행은 사원번호가 'A101', 이름은 '강신우', 나이는 '40' 이라는 의미 입니다.

이렇게 해서, 5건의 데이터를 만드는데 이때 1건의 데이터레코드 라고 합니다.


명령을 실행하여 tb1 에 1건의 데이터(레코드)만 넣어보도록 합시다.

insert into tb1 values ('A101','강신우',40);

명령을 실행해 보면



응?????????


한글이 출력이 안된다??

왜 이런걸까...

그 이유는

이런 MySQL윈도우커맨드라인은.. 기본적으로 euckr 이라고 하더라...

..

몇시간을 삽질했다.

cmd에서 디비를 만들어 본 적이 없어서..

일단 mysql 콘솔창에 다음과 같이 입력해 봅시다.

show variables like 'c%';




바로 요 부분이 utf8 로 되어있을 것입니다.

지금 블로그 운영자는 euckr로 바꿔놔서 mysql컨멘드라인에서 한글데이터 입력시 문제가 되지 않지만, 문제가 일어난다면 mysql콘솔창에서 다음과 같이 해결하도록 합시다.


set character set euckr;


이렇게 클라이언트의 언어를 euckr로 바꿔주면 한글 입력 문제가 해결이 됩니다.


출처 : http://batmask.net/myhome2012/?p=4465


자 그러면 다시 한번 레코드를 넣어보도록 합시다.



아까완 달리 1 warning 이 안뜨고 있습니다.

그리고



깔끔하게 한글이 들어간 것도 확인할 수 있습니다.

그럼 이제 두번째 데이터를 추가해 봅시다.

전시간에 방향키 위(↑), 아래(↓) 로 전의 명령 이력을 확인할 수 있다는걸 기억하면 쉽게 할 수 있습니다.



칼럼 이름을 지정해서 데이터를 추가하기

다음 레코드는 조금 다른 방법으로 추가해 보겠습니다. 앞서 설명한 방법에서는 칼럼의 순서대로 데이터를 작성했지만, 이번 방법에서는 칼럼의 순서와 상관없이 칼럼 이름을 지정해서 데이터를 추가합니다.

insert into 테이블_이름 (칼럼_이름1, 칼럼_이름2...) values (데이터1, 데이터2...);


일부러 순서를 바꿔서 입력해 보도록 합니다.



그래도 Query OK 가 잘 뜨네요 ㅎㅎ


그럼 이렇게 하나의 레코드를 하나씩 입력해야 하느냐?

이번에는 레코드를 한 번에 입력하는 방식 을 보도록 합시다.

데이터를 한 번에 입력하기

insert into tb1 (칼럼_이름1, 칼럼_이름2...) values (데이터1, 데이터2...), (데이터1, 데이터2...)...;



역시 이렇게 만든 데이터 값을 한번 확인해 봐야겠죠?


칼럼의 데이터를 표시하려면 select 명령을 사용합니다. select 명령은 SQL문 중에서 가장 많이 사용하는 명령입니다.


칼럼별 데이터 표시하기

select 칼럼_이름1, 칼럼_이름2... from 테이블_이름;







5. 모든 레코드 표시하기


4번 까지의 내용은 테이블을 만들고 이 테이블에 레코드가 어떻게 담겨있나

'칼럼별'로 확인하는 거라면 모든 레코드를 표시하는 방법도 있습니다.

모든 레코드 표시

select * from 테이블_이름;



체크!

★ create database ... 명령의 사용 방법을 이해하고 있는지.

- 데이터베이스를 만드는 명령문 입니다.

★ create table ... 명령의 사용 방법을 이해하고 있는지.

- 테이블을 만드는 명령문 입니다.

★ desc ... 명령의 사용 방법을 이해하고 있는지.

- 테이블의 칼럼의 구조를 파악하기 위한 명령입니다.

★ insert into ... 명령의 사용 방법을 이해하고 있는지.

- 레코드를 삽입하는 명령문 입니다.

★ select * form ... 명령의 사용 방법을 이해하고 있는지.

- 선택된 테이블의 모든 정보를 보여줍니다.


반응형