본문 바로가기

개발/웹

MySQL

1. 세미콜론


MySQL에서 세미콜론은 명령어를 분리하거나 끝날 때 사용한다.

만약 명령구문이 제대로 끝나지 않을 경우 다음과 같은 프롬프트를 볼 수 있다.


MySQL 프롬프트 

의미 

mysql> 

MySQL이 준비되고 명령어를 기다린다. 

-> 

명령어의 다음 줄을 기다린다. 

'> 

작은 따옴표로 시작하는 다음 문자열을 기다린다. 

"> 

큰 따옴표로 시작하는 다음 문자열을 기다린다. 

`> 

역따옴표로 시작하는 다음 문자열을 기다린다. 

/*> 

/*로 시작하는 다음 주석을 기다린다. 



2. 명령어 취소


명령어를 취소하고 싶으면 CTRL+C는 절대 입력하면 안된다.

\c와 리턴을 입력하면 명령어가 취소 된다.



3. MySQL 명령어


명령어

매개 변수 

의미 

ALTER 

database, table 

데이터베이스나 테이블을 변경 

BACKUP 

table 

테이블 백업 

\c 

 

입력 취소 

CREATE 

database, table 

데이터베이스나 테이블 생성 

DELETE 

(table과 row의 표현식) 

테이블에서 행 지움 

DESCRIBE 

table 

테이블 열에 대한 설명 

DROP 

database, table

데이터 베이스나 테이블을 지움 

EXIT (CTRL+C) 

 

종료 

GRANT 

(사용자 정보) 

사용자 권한 변경 

HELP (\h, \?) 

item 

아이템에 대한 도움말 출력 

INSERT 

데이터의 표현식 

데이터 삽임 

LOCK

table(s) 

테이블 잠금 

QUIT(\q)

 

EXIT와 같음 

RENAME

table

테이블 이름 바꿈

SHOW

(해당되는 아이템이 너무 많음) 

아이템의 상세내용 출력 

SOURCE

filename 

파일 이름으로부터 명령어 실행 

STATUS(\s)

 

현재 상태 출력 

TRUNCATE 

table 

테이블 비움 

UNLOCK 

table(s) 

테이블의 잠금 해제 

UPDATE

(데이터의 표현식) 

기존의 기록을 갱신 

USE 

database 

데이터베이스 사용 



4. 데이터베이스 생성


publications 라는 이름의 데이터베이스를 생성하기 위해선


CREATE DATABASE publications


위와 같은 명령어를 입력하면 된다. 이후엔


USE publications 


라는 명령어를 입력해 Datbases changed라는 메세지를 확인하면 다음 내용을 진행할 수 있다.



5. 유저 생성


패스 (필요하면 적겠다)



6. 테이블 생성



새로운 테이블이 생성되었는지 확인하기 위해선


DESCRIBE classics;


위 명령 사용시 테이블의 정보를 보여주는데 각 필드의 값은 다음과 같다.


 - Field

테이블 내의 각 필드와 열의 이름


 - Type 

필드에 저장된 데이터의 타임


 - Null

필드가 NULL 값을 가질 있는지 없는지 확인


 - Key

MySQL은 데이터를 빨리 검색하고 찾을 수 있도록 키와 인덱스를 지원한다.


  - Default 

새로운 행이 추가될 때 값이 없으면 필드에 기본으로 설정하는 값


 - Extra

필드가 자동 증가로 설정되어 있는지 동의 부가 필요 



7. 데이터 타입


CHAR vs VARCHAR


 - 공통점 : 


텍스트 문자열을 허용하고, 필드의 크기를 제한한다.


 - 차이점 : 


CHAR 필드의 모든 문자열은 크기가 정해진다. 더 작은 문자열 입력 시 공백으로 채워진다.


VARCHAR 필드는 텍스트를 채우지 않으며, 입력한 텍스트에 맞게 가변 필드 크기를 가지게 한다. 

(단 조금의 오버헤드 필요)


1) CHAR 데이터 타입


최대 n 까지의 문자열의 길이만큼 입력받을 수 있다. 

VARCHAR의 경우 보이진 않지만 항상 1바이트의 오버헤드가 추가적으로 존재한다. 


- CHAR (n)  :  최대 255

- VARCHAR(n)  : 최대 65535



2) BINARY 데이터 타입


BINARY 데이터 타입은 관련된 문자 세트가 없는 문자의 전체 바이트를 저장하는데 사용된다. ex) GIF


 - BINARY(n) 또는 BYTE(n) : 최대 255

 - VARBINARY(n) : 최대 65535



3) TEXT 데이터 타입


TEXT는 VARCHAR와 다르게 기본 값을 가질 수 없다.

TEXT는 처음 n개의 문자만 인덱스할 수 있으므로 전체 내용 검색에선 VARCHAR더 효율성이 좋다.


- TINYTEXT(n) : 최대 255

- TEXT(n) : 최대 65535

- MEDIUMTEXT(n) : 최대 16777215

- LONGTEXT(n) : 최대 4294967295



4) BLOB 데이터 타입


65535바이트를 넘는 바이너리 데이터에 가장 유용하다.

하지만 BINARY와 다르게 기본 값을 가질 수 없다.


- TINYBLOB(n) : 최대255

- BLOB(n) : 최대 65535

- MEDIUMBLOB(n) : 최대 16777215

- LONGBLOB(n) : 최대 4294967295



5) 숫자형 데이터 타입


UNSIGNED 수식어를 사용하면 양수를 표현할 수 있다.

ex) CREATE TABLE tablename (fieldname INT UNSIGNED)


- TINYINT : 최대 127

- SMALLINT : 최대 32767

- MEDIUMINT : 최대 8388607

- INT 또는 INTEGER : 2147483647

- BIGINT : 겁나크다(8바이트사용)

- FLOAT : 3.40..E+38

- DOUBLE : 1.79...E+308



6) 날짜와 시간


행을 추가할 때 값을 명시하지 않으면 현재 시간이 자동으로 들어가다.


- DATETIME : 0000-00-00 00:00:00

- DATE : 0000-00-00

- TIMESTAMP : 0000-00-00 00:00:00 (1970-2037년만 포함)

- TIME : 00:00:00

- YEAR : 0000 (1901-2155년만 포함)



7) AUTO_INCREMENT


테이블 생성시 자동으로 고유키가 증가하도록 함



위 그림에서 언더바가 잘 안보일 수 있으나 AUTO와 INCREMENT사이에는 언더바가 존재한다.



8) 테이블에 대이터 추가




9) 기타


- 테이블 이름 바꾸기 : ex) ALTER TABLE classics RENAME pre1900;

- 테이블 지우기 : ex) DROP TABLE classics;

- 열의 데이터 타입 바꾸기 : ex) ALTER TABLE classics MODIFY year SMALLINT;

- 새로운 열 추가 : ex) ALTER TABLE classics ADD pages SAMLLINT UNSIGNED;

- 열 이름 바꾸기 : ex) ALTER TABLE classics CHANGE type category VARCHAR(16);

- 열 지우기 : ex) ALTER TABLE classics DROP pages;



8. 윈도우 환경에서 MySQL 처음 사용하기


1) mysql 접속


APMSetup 을 사용해 웹 환경을 구축하였다. 

콘솔창에서 다음과 같이 입력한다.


 mysql -u root -p


디폴드 암호는 : apmsetup 이다.




2) 데이터베이스 생성


명령을 사용해 데이터베이스를 생성한다. 


 CREATE DATABASE 디비이름




3) 유저 생성



 GRANT ALL ON 디비이름.* TO '유저이름'@'localhost' IDENTIFIED BY '패스워드'




4) 재로그인


quit 명령어를 사용해 종료한후 다시 접속한다.


 mysql -u 유저이름 -p


3)에서 생성했던 패스워드를 입력하면 된다.



만약 root로 로그인할 경우 다음 명령어를 사용하면 된다.


 USE 디비이름



9. 파이썬을 사용해 MySQL 코드 작성


https://pypi.python.org/pypi/MySQL-python


위의 url에 접속해 파이썬 모듈을 다운받고 설치한다.



americanoJH_mysql_example.py


상위의 코드로 사용하면 된다.


파이썬을 이용할 경우 한글 인코딩 문제가 발생할 것이다.


코드 최상단에 다음의 코드를 작성해준다.


 # -*- coding: utf-8 -*-

 import sys

 reload(sys)

 sys.setdefaultencoding('utf-8')


한글 인코딩 문제의 경우 쿼리를 날리기 전에 꼭 


 cur.execute("set names utf8")


명령을 사용해 mysql에게 알려주어야 한다. 아무리 설정을 해주어도 이것을 안해주면 말짱도루묵이다.

그리고 mysql 폴더 내에 있는 my.ini 또는 my-default.ini 파일 내에

다음과 같이 내용을 수정해주어야 한다.


[mysql]   

default-character-set=utf8


[mysqld]   


character-set-client-handshake = FALSE  


init_connect = "SET collation_connection = utf8_general_ci"  


init_connect = "SET NAMES utf8"  


default-character-set = utf84


character-set-server = utf8  


collation-server = utf8_general_ci  


[client]    

default-character-set = utf8  


[mysqldump]    

default-character-set = utf8



다음과 같은 설정을 완료한 후 디비서버를 다시 실행시킨 뒤 

다음의 명령어를 통해 정상적으로 설정되었는지 확인한다.


 show variables like 'c%';



10. 참고(파이썬에서 문자열의 인코딩 상태를 확인하는 법)


 import chardet

 print chardet.detect(변수명)['encoding']



'개발 > ' 카테고리의 다른 글

Nessus 를 활용한 웹서버 취약점 확인  (0) 2015.03.19
LAMP 설치 (Linux, apache, MySQL, PHP)  (0) 2015.03.19
Ajax  (0) 2015.03.09
PHP 문법  (0) 2015.02.18
웹 개발 환경 설정  (0) 2015.02.18