2 MySQL 기본
source: categories/study/database/database2.md
2.1 MySQL의 구조
데이터를 기록하는 최종적인 곳은 ‘표'입니다.
MySQL, 더 나아가서 관계형 데이터 베이스는 엑셀과 같은 스프레드시트와 비슷한 구조를 가지고 있습니다.
그럼 표가 많아지겠죠?
예를 들어, 웹 사이트를 운영하는데 사용되는 데이터를 데이터베이스에 저장을한다면, 예를 들면,
- 글을 저장하는 표
- 댓글을 저장하는 표
- 회원정보를 저장하는 표 …
이런식으로 표들이 마구 생성이 될 것입니다.
그런데 이렇게 표가 늘어나면 어떤 문제가 생길까?
이렇게 많아진 표들을 잘 정리정돈할 필요성이 생깁니다.
마치 file에서 directory의 필요성이 대두되는 것과 비슷한 상황입니다.
그래서 이 MySQL
에서는 서로 연관된 표들을 그룹핑해서 연관되어있지 않은 표들과 분리하여 사용하는.. file의 directory와 같은 것이 있는데 그것이 바로 database라는 겁니다.
말이 좀 헷갈리죠?
왜냐면 우리가 지금 배우고 있는 전체가 바로 데이터베이스인데 표들을 그룹핑한 것을 데이터베이스라고하니까 말이 좀 헷갈릴 수밖에 없습니다.
그래서 MySQL
에서는 database라는 표현과 함께 스키마라는 표현을 같이 씁니다.
그래서 수업시간에 데이터베이스라는 표현이 아니라 스키마라는 표현을 쓰게되면 그 표현은 표들을 서로 그룹핑할 때 사용하는 일종의 folder(directory)다.라고 생각하시면 되겠습니다.
스키마는 서로 연관된 표들을 그룹핑해주는 것이다. 라는 것을 기억해주시기 바랍니다.
이렇게 스키마가 많아지면 이것도 또한 어딘가에 저장이 되어야겠죠?
바로 그곳을 database server 라고 합니다.
그래서 여러분이 MySQL을 설치했잖아요?
그 얘기는 여러분이 어떤 행위를 한 것이냐면 database server라는 프로그램을 설치한 것이고 그 프로그램이 갖고있는 기능성을 이용해서 우리는 데이터와 관련된 여러가지 작업을 하는겁니다.
이것이 데이터베이스를 이해하는 가장 기본적인 구성입니다.
2.2 MySQL 서버 접속
데이터베이스를 사용할 때 여러 효용을 얻을 수 있습니다.
여러분이 첫번째로 만날 수 있는 효용은 보안입니다.
file은 운영체제만 뚫리면 보안이 없잖아요? 막 수정할 수 있잖아요.
하지만 데이터베이스는 자체적인 보안 체계를 가지고 있기 때문에 좀 더 안전하게 데이터를 보관할 수 있다라는 장점이 있습니다.
그리고 그거 외에도 권한 기능이있어서, 예를 들면 여러분들이 MySQL에 여러 사람을 등록할 수가 있습니다.
예를 들어, hyungju-lee라는 사람은 위에 있는 모든 표와 스키마에 대해서 쓰기(Create), 읽기(Read), 수정(Update), 삭제(Delete) 권한을 가지고있다 라고 하고,
다른 사용자는 위 테이블, 스키마 중에 일부만 CRUD를 할 수 있다고 한다던가,
또 어떤 사용자는 특정 테이블을 읽기만 가능하다고 한다던가 이런식으로 차등적으로 권한을 줄 수 있는.. 직접 구현하려고하면 힘든 이러한 기능들을 자체적으로 가지고 있습니다.
이러한 기능들이 우리가 데이터베이스를 사용하며 얻을 수 있는 효용 중에 하나라는 것입니다.
2.2.1 명령어
Window 명령어: mysql -uroot
Mac 명령어: ./mysql -uroot
root라는 사용자로 mysql에 접속하겠다 라는 뜻입니다.
Window 명령어: mysql -uhyungju
Mac 명령어: ./mysql -uhyungju
위와 같이 입력하면 hyungju라는 사용자로 mysql에 접속하겠다 라는 뜻입니다.
즉, mysql을 사용하려면 기본적으로 이렇게 user가 있어야합니다.
그 기본 유저가 바로 root
입니다.
일반적으로 root
는 관리자이기 때문에 모든 권한이 열려있습니다.
그래서 root
의 권한으로 모든 권한을 다루는 것은 좀 위험한 일이기 때문에 중요한 시스템이라면 별도의 사용자를 만들어서 평소에는 그 사용자로 작업을하다가 좀 중요한 일이 있을 때만 root
로 들어가는 것이 권장됩니다.
Window 명령어: mysql -uroot
Mac 명령어: ./mysql -uroot
이 상태에서 Enter
키를 누르면 실행이 되시는 분도 있고 안되시는 분도 있을텐데, 실행이 되는 분들은 root
사용자의 비밀번호가 지정이 되어있지 않은 것입니다.
root
사용자의 비밀번호가 지정이 안되어있으면 비밀번호 입력 없이 편리하게 접근하실 수 있습니다. 하지만 보안적으론 취약해지겠죠?
Window 명령어: mysql -uroot -p<비밀번호>
Mac 명령어: ./mysql -uroot -p<비밀번호>
위와 같이 -p
를 붙이고 바로 그 뒤에 비밀번호를 적어도되는데, 이렇게하면 비밀번호가 노출되기 때문에
Window 명령어: mysql -uroot -p
Mac 명령어: ./mysql -uroot -p
---
Enter password:
위와 같이 입력하면 mysql이 우리한테 비밀번호가 뭐냐고 물어봅니다.
그럼 각자 본인들이 설정한 비밀번호를 여기에 입력하면 됩니다.
만약 비밀번호를 까먹었다면, 검색엔진에서 MySQL password forgot
이런식으로 검색하셔서 어떻게하면 되는지에대해 찾아보시고 조치를 취하시면 됩니다.
위와 같이 나오면 일단 mysql에 접속 성공하신겁니다.
위 그림상으로 여러분들은 database server라는 것의 담장을 넘었습니다.
그럼 그 다음으로 우리가 대면하게되는 대상은 데이터베이스, 스키마입니다.
2.3 MySQL 스키마의 사용
이전시간에 database server의 사용방법에 대해 살펴봤었습니다.
그럼 서버에 들어온 다음에는 스키마를 만들어서 표를 만들 준비를 해야됩니다.
지금부터 스키마에 대한 이야기를 시작하도록 하겠습니다.
2.3.1 database(스키마) 생성하기
mysql> CREATE DATABASE menagerie;
CREATE DATABASE
: database를 생성하는 명령어menagerie
: database 이름
2.3.2 database(스키마) 삭제하기
mysql> DROP DATABASE database_name;
여기서 중요한 것은 위 명령어들이 중요한 것이 아닙니다.
위 명령어들을 모두 기억하고 있을 순 없습니다.
중요한 것은 어떤 쿼리를 짜고싶을 때 검색을 해서 알아내야된다는 것입니다.
그럼 데이터베이스가 잘 생성되었는지 확인하기 위해서 (위에서 삭제 후 다시 생성) 확인해봐야겠죠?
2.3.3 database(스키마) 확인하기
SHOW DATABASES;
위와 같이 opentutorials
데이터베이스(스키마)가 생성된 것을 확인할 수 있습니다.
이제부터 opentutorials
이 데이터베이스(스키마) 안에다가 테이블을 생성할건데, 그걸하기 위해서는 이 데이터베이스(스키마)를 사용하겠다라는 것을 mysql에 알려줘야됩니다.
그때 사용하는 명령어가 USE
입니다.
2.3.4 database(스키마) 사용하기 명령어
USE opentutorials;
위와 같이 적어주시게되면 mysql은 지금부터 내가 내리는 명령을 opentutorials
라고하는 이 스키마에 있는 표(테이블)를 대상으로 명령을 실행하게 되는겁니다.
데이터베이스(스키마)까지 생성하는 것 했고, 드디어 표(테이블)를 다룰 준비는 다 끝났습니다.
2.4 SQL과 테이블 구조
저희 지금까지 database server를 넘어서 database(schema)를 넘어서 드디어 표(TABLE)를 다룰 준비가 되었습니다.
데이터베이스는 많은 데이터와 다양한 종류의 데이터를 다루기 때문에 이렇게 단계가 많은겁니다.
이제부터 표(TABLE)를 만들어볼건데요, 그 전에 여러분들이 미리 알아두면 좋을법한 것들에 대해 말씀드리겠습니다.
2.4.1 SQL
이제부터 본격적으로 SQL이라는 컴퓨터 언어를 배우게될건데 SQL은
- Structured
- Query
- Language
의 약자입니다.
-
Structured: 관계형 데이터베이스는 기본적으로 표의 형식으로 데이터들을 정리할 수 있다고 했잖아요?
바로 그 표를 작성하는 것, 정리 정돈을 하는 것, 그것을 좀 유식하게 구조화되었다라고 하고 또 영어로는 Structured라고 하는 것입니다. -
Query: 우리가 데이터베이스에 데이터를 넣어줘, 읽어줘, 수정해줘, 삭제해줘, 스키마를 만들어줘 이런 것들을 포괄적으로 데이터베이스에 요청한다. 질의한다.
라는 뜻에서 Query라는 표현을 쓰는겁니다. -
Language: 그런데 데이터베이스에게 아무렇게나 얘기한다고 데이터베이스가 해주는 것이 아니잖아요?
데이터베이스도 이해할 수 있고 저도 이해할 수 있는 공통의 약속에 따라서 데이터베이스 서버에게 우리가 요청해야지만 알아들을 수 있을거 아니에요?
그때 사용하는 언어가 바로 SQL 이라는 것입니다.
그래서 Language.
그래서 이 SQL이라는 컴퓨터 언어의 2가지 특징을 저는 이렇게 얘기합니다.
-
SQL은 앞으로 여러분이 만날 어떤 컴퓨터 언어보다도 쉽습니다.
제가 그렇게 얘기하는 언어가 딱 두개가 있는데, 하나가 HTML, 웹 페이지를 만들 때 쓰는 언어. 그리고 또 하나가 SQL입니다. -
두번째로 중요한 특징은 중요하다는 것입니다.
SQL이라는 컴퓨터 언어는 관계형 데이터베이스라는 카테고리에 속하는 제품들이 공통적으로 데이터베이스 서버를 제어할 때 사용하는 언어입니다. 표준화까지 되어있는 언어입니다.
그렇기 때문에 압도적으로 많은 다수의 데이터베이스 시스템이 SQL을 통해서 동작하고, 그 얘기는 뭐냐하면 여러분들은 하루에도 여러분들이 모르게 이 SQL이라는 것에 의해서 수많은 정보 서비스들을 접하고있다는 것입니다.
SQL은 쉽고 중요하다.
한마디로 가성비가 아주 뛰어난 컴퓨터 언어라는 것입니다.
그래서 앞으로 이 SQL이란 것을 본격적으로 배울 것이고, 또 하나는 표(TABLE)를 우리가 본격적으로 다뤄볼 것입니다.
2.4.2 용어 정리
표를 영어론 TABLE이라고 하고 저는 지금부터 TABLE이란 표현을 많이 쓸겁니다.
그리고 이 TABLE은 X축과 Y축으로 쪼개서 생각해볼 수 있는데,
수평으로 되어있는 X축을 뭐라 말하냐면, row
, record
, 행
이라고 말합니다.
mysql에선 row
라는 표현을 많이 씁니다.
현재 위 표엔 row
가 2개 있습니다.
수직으로 되어있는 Y축을 뭐라 말하냐면, column
, 열
이라고 말합니다.
위 표엔 column
이 4개 있습니다. (id
, title
, description
, created
)
그래서 보통 데이터베이스에서 column
을 얘기할 때는 데이터의 타입, 데이터의 구조라고 생각하시면 될 거 같습니다.
row
를 얘기하면 데이터 하나하나, 데이터 자체라고 생각하시면 될 거 같습니다.
이렇게해서 SQL이 무엇인지, 그리고 그런 SQL을 통해서 우리가 제어하려고하는 대상인 이 테이블의 구조와 관련된 여러가지 용어들을 살펴봤습니다.
다음시간부턴 테이블을 만들고, 그렇게 만들어진 테이블에 데이터를 추가하고 읽고 수정하고 삭제하고하는 방법들을 쭉 살펴볼텐데 그것이 가장 중요한 얘기가 될겁니다.