MySQL

이건우·2021년 7월 18일
0

TIL 2021 - 07 - 17-18 📖 !

주말에는 MySQL 이라는 데이터베이스 메니먼트 시스템 database management system, DBMS
이란걸 공부해 보았습니다 방대한 양의 데이터를 효율적으로 관리 할 수 있는 것 인데요 우선 Oracle에 가입을 하고 MySQL에 가서 다운을 받은 다음에 사용하시면 됩니다 !

lee-geonwoo@igeon-uui-MacBookPro ~ % cd /usr/local/mysql/bin/

이렇게 입력을 하셔서 Mysql이 있는 폴더로 들어가시고

lee-geonwoo@igeon-uui-MacBookPro bin % ./mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.25 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

명령어를 저렇게 입력을 해주면 비밀번호를 치는곳이 나오는데 처음에 MySQL을 다운로드 받으셨을 때 설정해두었던 비밀번호나 설정해두시지 않은경우에는 비밀번호 설정 하라고 나오니 그때 비밀번호를 잘 설정해 주시고 꼭 기억하고 있으셔야 합니다

다음은 -uroot 라는게 무슨말인가 싶으시겠지만 -u 는 유져 라는 뜻이고 root는 유져의 이름입니다 보통 root는 데이터베이스를 관리하는 최고 관리자라 root로 작업 할 때에는 모든 권한이 있어 작업을 할 때에는 조심 하셔야 합니다 !

자 다음으로는 데이터베이스를 만들어보겠습니다 .

위의 과정을 진행하시거 나면 mysql> 이런식으로 나오면 잘 작동을 하고 있는것 입니다 .

그 상태에서 아래의 명령어를 입혁해줍니다 ; 세미콜론은 이 명령어가 끝났다는 의미고 MySQL 에서는 명령어가 끝이나면 ; 를 꼭 붙혀주셔야합니다

mysql> CREATE DATABASE opentutorials;

이렇게 명령어를 입혁 했을때

Query OK, 1 row affected (0.00 sec)

이런 메세지가 나온다면 데이터베이스를 만드는데 성공 한것 입니다 !

잘 만들었는지 확인하려면

mysql> SHOW DATABASES;

이렇게 입력해보시면

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| opentutorials      |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

이런 메세지를 볼 수 있는데 지금 내가 만든 데이터베이스를 출력해주는 것입니다 !

이제는 테이블을 만들어 줄건데요 ! 테이블을 만들어 주기 위해선 opentutorials 라는 데이터베이스를 사용 해야겠죠 ! 저희가 연습할 데이터베이스라 사용하는 것 입니다 !

mysql> USE opemtutorials;
Database changed

위와같이 입력을 해주시면 아래와 같이 Darabase changed라는 완료 문구가 나옵니다 저 문구가 나온다면 성공적으로 opentutorials 라는 저희가 만들어놓은 데이터베이스를 사용 할 수 있습니다

다음으로는 데이터베이스 안의 테이블을 만들어 놓을 것입니다 !

만드는 방법으로는

CREATE TABLE 만들고싶은 테이블 이름 

이런식으로 만들면 되고 저는 topic 이라는테이블을 만들어 보겠습니다

이렇게 만들어 줄겁니다 .

설명용

mysql> CREATE TABLE topic(
   -> id INT(11) NOT NULL AUTO_INCREMENT, 

   //INT는 숫자 NOT NULL은 NULL을 허용하지 않음 AUTO_INCREMENT는 테이터가 추가 될 때마다 1씩 자동으로 증가 

   -> title VARCHAR(100) NOT NULL,

   //문자열 제한은 100글자로 NOT NULL은 NULL을 허용하지 않음 

   -> description TEXT NULL,

   //TEXT 를 받고 NULL 허용 

   -> created DATETIME NOT NULL,

   //DATE 는 날짜만 TIME 은 시간만  DATETIME 은 시간 + 날짜
    NOT //NULL은 NULL을 허용하지 않음 

   -> author VARCHAR(30) NULL,

   //VARCHAR는 베리어블 캐릭터의 //약자로 문자열을 받겠다는 의미 제한은 30글자 
   //NULL  허용

   -> profile VARCHAR(100) NULL,

   //100글자 받고 NULL 허용 
   -> PRIMARY KEY(id));

   //메인 Key값으로는 AUTO_INCREMENT로 1씩증가하게 해서 곂칠 일이 없는 ID로 설정 
Query OK, 0 rows affected, 1 warning (0.01 sec)

설명 없는 버전

mysql> CREATE TABLE topic(
    -> id INT(11) NOT NULL AUTO_INCREMENT,
    -> title VARCHAR(100) NOT NULL,
    -> description TEXT NULL,
    -> created DATETIME NOT NULL,
    -> author VARCHAR(30) NULL,
    -> profile VARCHAR(100) NULL,
    -> PRIMARY KEY(id));
Query OK, 0 rows affected, 1 warning (0.01 sec)

이렇게 행과 열을 만들어 줄 수 있고
이렇게만 만들어주면 아무런 데이터가 없으니

mysql> SHOW TABLES;
+-------------------------+
| Tables_in_opemtutorials |
+-------------------------+
| topic                   |
+-------------------------+
1 row in set (0.01 sec)
SHOW TABLES;

를 입력 하더라도 이렇게만 나옵니다
더 명확하게 보고싶다면

DESC topic;

을 입력하면

mysql> DESC topic
    -> ;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int          | NO   | PRI | NULL    | auto_increment |
| title       | varchar(100) | NO   |     | NULL    |                |
| description | text         | YES  |     | NULL    |                |
| created     | datetime     | NO   |     | NULL    |                |
| author      | varchar(30)  | YES  |     | NULL    |                |
| profile     | varchar(100) | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

이렇게 되어있는 저의 테이블을 볼 수 있습니다 .

이제 데이터를 넣어 줄 건데요

INSERT INTO 테이블 이름

을 해줌으로써 테이블에 데이터를 넣어줄 수 있습니다

mysql> INSERT INTO topic (
title, description, created, author, profile) 
VALUES('MySQL', 'MySQL is ...', NOW(),' egoing','developer');
Query OK, 1 row affected (0.01 sec)

이렇게 넣어주었고 id를 넣지 않은건 어짜피 저희가 AUTO_INCRESE를 해주었기 떄문에 자동적으로 생깁니다

앞에 괄호에는 데이터 넣을 곳을 넣어주고 저 순서에 맞게 맞는 데이터를 넣어 주면 됩니다

다른예시

mysql> INSERT INTO topic (title, description, created, author, profile) VALUES('ORACLE', 'ORACLE is ...', NOW(),' egoing','developer');
Query OK, 1 row affected (0.00 sec)

이렇게 만들어 준뒤에 저희가 만들어놓은 테이븛을 보는 방법은

SELECT 범위 FROM 테이블 이름

으로 볼 수 있습니다

mysql> SELECT * FROM topic;

제가 이렇게 입력을 해주면

+----+--------+---------------+---------------------+---------+-----------+
| id | title  | description   | created             | author  | profile   |
+----+--------+---------------+---------------------+---------+-----------+
|  1 | MySQL  | MySQL is ...  | 2021-07-18 17:59:06 |  egoing | developer |
|  2 | ORACLE | ORACLE is ... | 2021-07-18 18:01:14 |  egoing | developer |
+----+--------+---------------+---------------------+---------+-----------+

방금 제가 넣어준 데이터 들이 잘 들어가 있는것을 확인 할 수 있고 나머지 데이터를 넣어 주어서

mysql> SELECT * FROM topic;
+----+------------+-------------------+---------------------+---------+---------------------------+
| id | title      | description       | created             | author  | profile                   |
+----+------------+-------------------+---------------------+---------+---------------------------+
|  1 | MySQL      | MySQL is ...      | 2021-07-18 17:59:06 |  egoing | developer                 |
|  2 | ORACLE     | ORACLE is ...     | 2021-07-18 18:01:14 |  egoing | developer                 |
|  3 | SQL Server | SQL server is ... | 2021-07-18 18:02:50 |  duru   | data administrator        |
|  4 | PostgreSQL | PostgreSQL is ... | 2021-07-18 18:04:10 | taeho   | data scientist, developer |
|  5 | MongoDB    | MongoDB is ...    | 2021-07-18 18:05:07 | egoing  |  developer                |
+----+------------+-------------------+---------------------+---------+---------------------------+
5 rows in set (0.00 sec)

이렇게 만들어 주었습니다

  • 표시는 전체 라는 뜻 입니다 all

또한 내가 보고싶은 녀석들만 지정해서 SELECT 해올 수 도 있는데요 그럴 경우에는 저 * 표시 대신에 내가 보고 싶은 정보의 값만 넣어서 실행하시면

mysql> SELECT id, title, created, author FROM topic;
+----+------------+---------------------+---------+
| id | title      | created             | author  |
+----+------------+---------------------+---------+
|  1 | MySQL      | 2021-07-18 17:59:06 |  egoing |
|  2 | ORACLE     | 2021-07-18 18:01:14 |  egoing |
|  3 | SQL Server | 2021-07-18 18:02:50 |  duru   |
|  4 | PostgreSQL | 2021-07-18 18:04:10 | taeho   |
|  5 | MongoDB    | 2021-07-18 18:05:07 | egoing  |
+----+------------+---------------------+---------+
5 rows in set (0.00 sec)

이렇게 id, title, created, author 의 데이터만 가져오는것을 볼 수 있습니다

다음은 저 상태에서 author의 값이 egoing 인것 만 보고싶다고 하면

WHERE 조건

WHERE문을 사용하면 됩니다

mysql>  SELECT id, title, created, author FROM topic WHERE author='egoing';
+----+---------+---------------------+--------+
| id | title   | created             | author |
+----+---------+---------------------+--------+
|  5 | MongoDB | 2021-07-18 18:05:07 | egoing |
+----+---------+---------------------+--------+
1 row in set (0.00 sec)

저는 이렇게 author가 egoing인것만 찾아내었고 띄어쓰기 마저 판별하기 때문에 유의 해야합니다 그래서 제가 앞에 띄어쓰기를 넣은 녀석들은 또 다시 찾아보면

mysql>  SELECT id, title, created, author FROM topic WHERE author=' egoing';
+----+--------+---------------------+---------+
| id | title  | created             | author  |
+----+--------+---------------------+---------+
|  1 | MySQL  | 2021-07-18 17:59:06 |  egoing |
|  2 | ORACLE | 2021-07-18 18:01:14 |  egoing |
+----+--------+---------------------+---------+

이렇게 찾아내었습니다 띄어쓰기에 주의 하셔야 저같은 일이 없습니다 ㅠ_ㅠ

다음으로는 id값에 따른 정렬입니다

방금 뽑아온 저 데이터에서

mysql>  SELECT id, title, created, author FROM topic WHERE author=' egoing' ORDER BY id DESC;
+----+--------+---------------------+---------+
| id | title  | created             | author  |
+----+--------+---------------------+---------+
|  2 | ORACLE | 2021-07-18 18:01:14 |  egoing |
|  1 | MySQL  | 2021-07-18 17:59:06 |  egoing |
+----+--------+---------------------+---------+
2 rows in set (0.00 sec)

이렇게 값을 입력을 해주면 id값이 큰것부터 위로 올라가있는것을 볼 수 있습니다

ORDER BY

라는 걸 사용하고 그 뒤에 내가 넣고 싶은 조건을 넣어주면 됩니다 DESC는 큰것 부터 라는 뜻입니다

또한 뒤에 LIMIT을 붙히면 내가 원하는 만큼만의 데이터를 가져옵니다
너무나 많은 데이터를 한번에 가져 오면 컴퓨터가 멈추거나 시간이 정말 오래 걸릴 수 도 있으니 해주는 것 입니다

mysql>  SELECT id, title, created, author FROM topic WHERE author=' egoing' ORDER BY id DESC LIMIT 1;
+----+--------+---------------------+---------+
| id | title  | created             | author  |
+----+--------+---------------------+---------+
|  2 | ORACLE | 2021-07-18 18:01:14 |  egoing |
+----+--------+---------------------+---------+
1 row in set (0.00 sec)

이렇게 입력을 해주면 LIMIT을 1로 해놓았기때문에 한개만 출력되는걸 보실 수 있습니다.

profile
주니어 개발자 이건우 입니다 .

0개의 댓글