본문 바로가기
코딩과 알고리즘

MYSQL 콘솔에 접속해보자!

1. 오토셋 APM 인스톨러 ( apache + php7.2 + mariadb ) 설치 | https://itadventure.tistory.com/93

2. 코드이그나이터 4 ( codeigniter 4 ) 설치 | https://itadventure.tistory.com/95

3. 비주얼 스튜디오 코드 에디터 설치 & 한글 설정 | https://itadventure.tistory.com/96

4. 폴더열기 / 웹페이지 편집(1) | https://itadventure.tistory.com/97

5. 웹페이지 편집(2) | https://itadventure.tistory.com/101

6. 코드이그나이터4의 URL 규칙 | https://itadventure.tistory.com/105

7. php, 네임스페이스 [ namespace ] ?! | https://itadventure.tistory.com/118

8. 코드이그나이터의 네임스페이스, 그리고 모델 | https://itadventure.tistory.com/122

9. 코드이그나이터 뷰의 파라미터 전달 | https://itadventure.tistory.com/147

10. 코드이그나이터 뷰를 나눠 볼까요? | https://itadventure.tistory.com/174

11. MYSQL 이 뭐여? [ 마이에스큐엘은 서류철이다! ] | https://itadventure.tistory.com/175

♣ 12. MYSQL 콘솔에 접속해보자! ♣


첩보 영화같은데서 보면 노트북으로 상대방의 기지의 전산 시스템에 침입해서 엄청난 키보드 타이핑 속도로
무언가를 찾아내다가 "됐어!"라는 탄성을 외치자 보안 시스템이 해제가 되는 장면을 보실 수 있지요? :)

보통은 리눅스나 유닉스 시스템을 제어하는 것이 일반적이긴 하지만 mysql 도 그 대상일 수도 있습니다.

물론 영화처럼 보안 시스템침입을 하자는건 아니고, 그냥 mysql 사용법을 다루긴 할건데요.
그런 느낌을 받는 기술이어서 그렇습니다 ㅎㅎ

영화에서 나오는 검은화면에 하얀 글자가 보이는 창을 보통 "콘솔창(Console Window)"이라고 하는데요.
재미있는 것은 MYSQL 도 "콘솔창"이란걸 사용합니다.

Console 이란 영어 단어의 뜻이 제어판, 계기판이란 뜻인데요.
자동차에서나 사용될 법한 이 단어가 MYSQL 에서도 무언가를 직접 제어한다는 의미에서 붙인 단어인듯 합니다.

보통은 MySQL 은 리눅스 시스템에서나 접속해서 하는 것이 일반적이나, 연습하시는 단계이므로 그 부분까지 들어가지는 않고 오토셋에서 편하게 마련한 방법으로 진행하려 합니다.
앞 강좌에서 오토셋을 설치한 경우 매우 수월하게 MYSQL 접속을 하실 수 있습니다.

먼저 시작 버튼을 눌러 오토셋 10.7 매니저 프로그램을 실행해 주세요.

그러면 오랜만에 실행되는 오토셋 프로그램을 만나보실 수 있을 겁니다.

그리고 나서 제어 - MySQL 콘솔창 메뉴를 선택하시면 MYSQL 콘솔에 접속하실 수 있습니다.

아래가 처음 MySQL콘솔창에 접속한 화면이지요.

MySQL 에 대해 기본적인 개념을 잠깐 설명드리자면,
MySQL 은 기본적으로 데이터베이스라는게 있고 그 하위에 종속적으로 테이블이란게 있습니다.

지난 번에 MySQL은 장부와 같다고 설명드린바가 있는데요.
여기서 테이블이 바로 장부에 해당합니다.
이 후로부터는 이  MySQL 장부를 테이블이라고 지칭하도록 하겠습니다.

그렇다면 데이터베이스는요?
주제별로 테이블을 "묶은" 겁니다.

회원과 관련된 여러가지 테이블을 묶어서 회원 데이터베이스로 명칭할 수 있고,
도서와 관련된 여러가지 테이블을 묶어서 도서 데이터베이스로 명칭할 수 있지요.

주제를 묶는 것에 대한 절대적인 기준은 없습니다.
다만 용이하도록 묶는 것이 좋지요.

이 데이터베이스를 먼저 설명드리는 이유가 있습니다.
MySQL 에서는 필수적인 사용법 이 있는데
데이터베이스를 먼저 만들어 준 다음에 데이터베이스 내부에
테이블을 넣어두도록 되어 있습니다.
데이터베이스 없이 테이블이 존재할 수는 없는 것이지요.

그러니까 제일 먼저 할 일은 바로 "데이터베이스를 만드는 일"입니다.

우리는 이제부터 "도서관"을 구성하려고 합니다.
그러려면 영어로 Library 라는 데이터베이스를 먼저 만들어주는 것입니다.

MySQL 콘솔 창에는 아래와 같은 표시와 함께 밑줄이 깜박일텐데요.

MariaDB [(none)] _

MariaDB [(none)] 라고 표시된 부분을 프롬프트(Prompt) 라고 부릅니다.
그리고 깜박이는 밑줄커서(Cursor)라고 부르지요. 커서는 현재 이 위치에 타이핑하는 문장이 기록됨을 알려줍니다.

콘솔창이 활성화된 상태에서 키보드로 입력하는 모든 문장은 MySQL 콘솔에게 지시하는 명령이 됩니다.

이제 명령을 하나 내려보도록 하지요.
프롬프트 뒷 부분에 다음 문장을 타이핑하고 Enter 키를 입력해보세요.
마지막은 끝났다는 신호로 항상 세미콜론(;) 기호를 넣는 것을 잊지 마세요.

create database Library;

그러면 아래와 같은 문장이 표시됩니다. ( 질의가 완료되었습니다. 1개의 행이 반영되었습니다. 라는 의미입니다.)
그리고 다시 프롬프트와 함께 커서가 깜박입니다.

Query OK. 1 row affected (... sec)

MariaDB [(none)]> _

금방 입력한 문장은 Library 라는 이름의 데이터베이스를 하나 만들어라~ 라는 명령어입니다.
그러니까 MySQL 콘솔이 성공적으로 1개의 데이터베이스를 만들었다고 답변을 해준 것인데요.

한번 더 똑같은 명령어를 입력해볼까요?
다시 타이핑할 수고는 없습니다. 그냥 윗방향 화살표 키를 눌러주면,
금방 입력했던 명령어가 자동으로 나타납니다.

create database Library;

그리고 Enter 키를 다시 쳐보니, 엇! 방금 전과는 답변이 다릅니다.
'Library' 데이터베이스를 만들수 없습니다.; 데이터베이스가 이미 있습니다. 라는 내용입니다.

ERROR 1007 (HY000): Can't create database 'Library'; database exists

이미 데이터베이스가 있으니까 만들 수 없다고 답변을 주네요.
MySQL 콘솔, 생각보다 똑똑한 것 같습니다.

그러면 데이터베이스 이름이 기억이 안 날때 한 눈에 볼 수 있는 방법도 있을까요?
물론, 있지요 :)

다음 명령어를 타이핑해보세요. 데이터베이스들을 보여다오~ 라는 명령입니다.
마지막  Enter 키 입력은 더 이상 말씀드리지 않아도 아시겠지요? :)

show databases;

그러자 뭔가가 주르륵 표시됩니다.
여기 표시된 5줄이 모두 데이터베이스인데요.
엇, 그런데 뭔가 이상하지 않습니까? 금방 만든건 1개인데 왜 데이터베이스는 5개나 될까요?

+--------------------+
| Database           |
+--------------------+
| information_schema |
| library            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.002 sec)  // 해석 : 5개의 행들이 세트 안에 있습니다.

information_schema, mysql, performance_schema 데이터베이스는 MySQL 이 기본적으로 가지고 있는 데이터베이스입니다. MySQL 시스템 유지를 위해 있어야 하는 기본 데이터베이스라서 그런 거니 넓은 아량으로(?) 이해해 주시기 바랍니다 :)

test 데이터베이스는 MySQL 시스템과는 상관은 없으나 처음 데이타베이스를 시작하는 사용자를 위한 일종의 테스트용 배려 데이터베이스입니다. 있어도 그만 없어도 그만이지만 그냥 놔두기로 합시다.

그래서 이 4개를 제외하고 금방 만든 library 데이터베이스가 바로 우리가 사용할 대망의 "도서관" 데이터베이스인 셈이지요.

그러면 이제 두번째 할일은 무엇일까요? 테이블을 만드는 일입니다.
우선 도서목록 테이블을 만들어보도록 하지요.

테이블은 항상 데이터베이스 안에 소속되어야 합니다.
우리는 도서 테이블을 도서관(library) 데이터베이스 안에 넣어주어야 할텐데요.
먼저 Library 데이터베이스를 사용하겠다~ 라고 예약을 해줘야 합니다.

다음 명령어를 쳐보세요

use library;

그러자 답변이 왔습니다. "데이터베이스가 변경되었습니다."라는 뜻이고,

Database changed

프롬프트가 아래와 같이 바뀌었습니다.
대괄호 안 쪽이 원래 (none) 였었는데 library 로 바뀌었네요.
이는 현재 사용중인 데이터베이스가 library 라는 것을 의미합니다.

MariaDB [library]>

이제 library 데이터베이스도 사용중으로 선택했겠다~
도서(book) 테이블을 생성해봅시다.
MySQL 콘솔창에 다음 내용을 직접 타이핑하시거나, 또는 복붙(복사해서 붙여넣기)해서 명령을 내려 주세요.
비록 명령행이 여러줄이긴 하지만, 실제 이 명령이 실행되는 순간은 마지막에 세미콜론(;) 기호가 입력된 후
Enter 키를 칠 때입니다.

CREATE TABLE book (
	number int(11) NOT NULL AUTO_INCREMENT,
	title varchar(128) NOT NULL,
	body text NOT NULL,
	totalpage int NOT NULL,
	author varchar(128) NOT NULL,
	PRIMARY KEY (number)
) ENGINE=InnoDB CHARACTER SET=utf8;

그러자 답변을 주는 군요, 질의가 수행되었습니다. 0개의 행들이 영향을 받았습니다.

Query OK, 0 rows affected ( ... sec )

자, 이제 테이블이 생성이 되었습니다.

테이블을 확인하는 명령어는 아래와 같은데요. 한번 입력해볼까요?

show tables;

그러자 아래와 같은 답변을 내어 놓습니다.

+-------------------+
| Tables_in_library |  -> library 안에 있는 테이블들
+-------------------+
| book              |  -> book 테이블
+-------------------+
1 row in set (0.002 sec)      -> 1개의 행이 세트 안에 있습니다.

 

드디어 도서를 보관할 테이블이 하나 생성되었군요.

마지막에 지시했던 명령어를 잠깐 분석해볼까요?

CREATE TABLE book (
	number int(11) NOT NULL AUTO_INCREMENT,
	title varchar(128) NOT NULL,
	body text NOT NULL,
	totalpage int NOT NULL,
	author varchar(128) NOT NULL,
	PRIMARY KEY (number)
) ENGINE=InnoDB CHARACTER SET=utf8;

CREATE TABLE book ( 은 book 이라는 이름의 테이블을 만들어라~ 라는 의미인데요,
그 뒤에 꽤 많은 내용이 따라 붙지요?

테이블을 만들 때는 기본적으로 구조가 있어야 합니다. 그 구조를 정의한 것인데요.
도서 장부를 만든다고 생각해보면, 도서 장부 안에는 책 제목과 페이지 작성자 등등의 필드(항목)가 들어갈 겁니다.
( ) 괄호 안에 그 들어갈 부분을 차례대로 적어넣는 것이지요. 우선 크레이가 정한 필드들을 살펴볼까요?

첫번째 필드은 순번 ( number ) 입니다. 

number int(11) NOT NULL AUTO_INCREMENT

보통 장부에는 유일한 번호가 있어야 찾아보기가 쉽습니다.
MySQL은 친절하게도 그 번호를 알아서 붙여주는 기술이 있는데요. 보통 아래와 같이 기술합니다.
다양한 방법이 있게 마련인데 보통은 이러한 방법으로 순번을 자동으로 번호매겨줄 수 있다는 점 알아 두세요 :)

두번째 필드부터는 실제적인 도서 정보의 의미가 있는 필드입니다.

title varchar(128) NOT NULL

책 제목이라는 의미로 title 이라는 명칭을 사용하였는데요.
바로 뒤의 varchar(128)은 무엇일까요? 그 것은 제목이 최대 128개의 문자를 사용할 수 있다는 걸 의미합니다.
글자갯수가 왜 필요할까요? 그 것은 바로 속도 때문입니다. 글자수가 적으면 적을 수록 더욱 빠른 검색속도가 좌우되기 때문인데, 실제 활용은 이 후에 다뤄보도록 하지요.

바로 뒤에 나오는 NOT NULL 은 "NULL을 사용하지 못한다"라는 의미인데요.
NULL은 '아무것도 없는' 상태를 의미합니다. 그런데 NOT NULL 이라고 명시한 것은 "아무것도 없는 상태를 허용하지 않는다"라고 해석해주시면 됩니다. MySQL은 내용이 비어있는 공백문자열과 아무것도 없다는 NULL 이라는 상태를 다르게 취급하기 때문인데 아직 다룰 단계는 아니기 때문에 보통 기본적으로 NOT NULL 을 대부분 사용한다고 생각해주시면 되겠습니다.

한가지 주의하실 부분은 VARCHAR(128)에서 영어나 띄어쓰기, 단순기호의 경우는 넣을 수 있는 글자갯수가 128글자이지만 한글의 경우 한글 한글자당 3글자로 세기 때문에 한글만 넣는다고 치면 128/3 = 약 42글자가 제한입니다.

body text NOT NULL,

이어서 나오는 본문은 varchar 대신 text 가 사용되었는데요.
text의 경우 무려 65,535 글자를 기록할 수 있습니다.

더욱 많은 글자를 넣으려고 한다면 mediumtext 를 사용할 수도 있는데요.
mediumtext 에는 16,777,215개의 글자를 기록할 수 있고,
최상급의 longtext에는 4,294,967,295개의 글자를 기록할 수 있습니다.

이 정도면 웬만한 소설 1권은 통채로 longtext 1개에 담을 수도 있겠지요 ? :)

totalpage int NOT NULL,

다음으로는 totalpage, 즉 책이 몇페이지로 구성되었는지를 담습니다.
int 는 정수(Integer)라는 의미로, 페이지수는 당연히 숫자로만 구성되었기 때문에
정수로 그 정보를 보관하는 겁니다.

author varchar(128) NOT NULL,

author 는 저자라는 뜻으로, 책의 저자가 누구인지를 보관할 목적의 필드입니다.
책 제목과 똑같이 varchar(128), 최대 128개의 문자로 구성된다고 정의하였습니다.

PRIMARY KEY (number)

다음으로는 PRIMARY KEY, 기본 키가 무엇이다~라고 정의를 해주는데 number 필드값을 기본 키로 정의해주었습니다.
사실 안 해주어도 상관은 없지만 보통은 속도 관계상, 그리고 의도하지 못한 중복 자료의 입력을 막기 위해 정의해주는 것이 일반적입니다. 

) ENGINE=InnoDB CHARACTER SET=utf8;

마지막으로 괄호를 닫아 테이블의 구조를 마무리하면서,
데이터베이스 엔진과 문자 세트를 정의하는 부분입니다.

엔진의 경우 자료 갱신이 많을 수록 InnDB 엔진이 좋고, 추가와 조회를 많이 하는 경우는 MyISAM 엔진이 좋다고 합니다. 보통은 자료 갱신이 잦기 때문에 InnoDB를 많이 사용합니다.

문자 세트의 경우 국제코드 체계 UTF8( Universal Coded Character Set + Transformation Format – 8-bit ) 을 많이 사용하는데요, 이 글자 코드를 사용할 경우 모든 한글 11,172글자를 다 사용할 수 있습니다.

이 2가지 정의를 함으로써 테이블 생성이 끝나게 됩니다.

처음 접하시는 분에게는 엄청나게 복잡한 내용을 다루어보신듯하겠지만, 
사실 익숙해지면 2~3분안에 테이블 생성이 가능해지실 겁니다. 도리어 복잡한 것은 논리적인 구성이지요 :)

사실 이러한 명령어 사용 방법은 원초적인 MySQL 콘솔의 기능입니다.
다시한번 명령어를 정리해볼까요?

데이터베이스 생성
create database 데이터베이스이름;

데이터베이스 목록 조회
show databases;

데이터베이스 사용 선언
use 데이터베이스이름;

테이블 생성
create table 테이블명 (
  필드이름 필드유형 NOT NULL,
  필드이름 필드유형 NOT NULL,
  primary key(기본필드)
) ENGINE=InnoDB CHARACTER SET=utf8;

테이블 목록 조회
show tables;

하나 더 보충하자면 다음과 같은 명령어도 있는데요.
내용은 직접 살펴보시는 편이 어떠실까요? :)

desc 테이블명;

만일 처음으로 해보시는 것이라면 도통 뭐가 뭔지 모르실 수도 있을 겁니다.

만일 도전해보고 싶으신 분은 이해가 어려우신다 하더라도
이런 류의 기술들은 몇번이고 반복해야 익숙해지는게 당연한 것이므로
결코 실망하거나 좌절하실(?) 필요는 전혀 없다는 점 명심해 두세요 :)

이 부분은 전문가의 영역이고, 이 기술 또한 전문가로서의 진입 문턱에 있는 것이니까요.
궁금하신 부분 댓글로 질문 주시면 힘 닿는데로 도움드리겠습니다.

도움이 되셨거나 앞으로도 소식알림 받고 싶으시면 좋아요와 구독! 잊지 말아 주세요!
여러분의 좋아요와 구독은 큰 힘이 됩니다.
감사합니다 !