본문 바로가기

DB/MySQL

[MySQL] 데이터베이스 기초 - 3

이 글은 생활코딩 강의를 통해 본인이 공부한 내용을 정리한 글입니다.

 

https://www.youtube.com/user/egoing2

 

생활코딩

일반인에게 프로그래밍을 알려주는 온라인/오프라인 활동 입니다.

www.youtube.com

 

 

1. CREATE

 

Table을 만들었으니 이제 데이터를 생성해보자.

 

CREATE는 기본적으로 INSERT를 사용한다.

 


INSERT INTO topic
(title, description, created, author, profile)
VALUES
('MySQL', 'MySQL is ...', NOW(), 'egoing', 'developer');

 

topic이라는 Table에 title, description, created, author, profile이라는 column들에 대해서

 

'MySQL, 'MySQL is ...', NOW(), 'egoing', 'developer' 라는 값을 넣겠다는 뜻이다.

 

VARCHAR나 TEXT로 정의된 column들은 문자열 형태로 넣어주어야 한다.

 

NOW()는 함수인데 현재시간을 '연도-월-일 시:분:초' 형태로 반환해준다.

 

추가적으로 몇 개의 데이터를 더 생성해보았다. (아래 참조)

 

 

2. READ

 

이제 생성한 데이터들을 확인해보자.

 

READ는 SELECT를 사용한다.

 


SELECT * FROM topic;

# result
+----+------------+-------------------+---------------------+--------+---------------------------+
| id | title      | decription       | created             | author | profile                   |
+----+------------+-------------------+---------------------+--------+---------------------------+
|  1 | MySQL      | MySQL is...       | 2020-08-24 16:21:48 | egoing | developer                 |
|  2 | Oracle     | oracle is ...     | 2020-08-24 16:32:13 | egoing | developer                 |
|  3 | SQL Server | SQL Server is ... | 2020-08-24 16:33:17 | duru   | data administrator        |
|  4 | PostgreSQL | PostgreSQL is ... | 2020-08-24 16:34:10 | taeho  | data scientist, developer |
|  5 | MongoDB    | MongoDB is ...    | 2020-08-25 17:02:50 | egoing | developer                 |
+----+------------+-------------------+---------------------+--------+---------------------------+

 

* 는 모든 column들을 가져온다는 것이다.

 

※ column 명을 description으로 해야하는데 s가 빠져서 오타가 났다.

 


ALTER TABLE topic
RENAME decription TO description;

 

이렇게 테이블의 column명을 변경할 수 있다.

 

다시 돌아와서 모든 column이 아닌 우리가 원하는 column만 가져와보자.

 


SELECT id, title, created FROM topic;

# result
+----+------------+---------------------+
| id | title      | created             |
+----+------------+---------------------+
|  1 | MySQL      | 2020-08-24 16:21:48 |
|  2 | Oracle     | 2020-08-24 16:32:13 |
|  3 | SQL Server | 2020-08-24 16:33:17 |
|  4 | PostgreSQL | 2020-08-24 16:34:10 |
|  5 | MongoDB    | 2020-08-25 17:02:50 |
+----+------------+---------------------+

 

이렇게 * 대신에 원하는 column 명을 써주면 해당 값만 READ 할 수 있다.

 

이번에는 원하는 값을 가진 데이터만 읽어보자.

 

예를 들어서 우리가 'egoing'이라는 사람이 쓴 글만 보고 싶다면 WHERE을 이용한다.

 


SELECT * FROM topic WHERE author = 'egoing';

# result
+----+---------+----------------+---------------------+--------+-----------+
| id | title   | description    | created             | author | profile   |
+----+---------+----------------+---------------------+--------+-----------+
|  1 | MySQL   | MySQL is...    | 2020-08-24 16:21:48 | egoing | developer |
|  2 | Oracle  | oracle is ...  | 2020-08-24 16:32:13 | egoing | developer |
|  5 | MongoDB | MongoDB is ... | 2020-08-25 17:02:50 | egoing | developer |
+----+---------+----------------+---------------------+--------+-----------+

 

 

이런식으로 author 중에서 값이 egoing인 데이터만 뽑아올 수도 있다.

 

기본적으로 데이터는 PRIMARY KEY였던 id를 기준으로 오름차순으로 정렬된다.

 

하지만 우리가 특정 column에 대해서 데이터를 정렬하고 싶다면 ORDER BY를 이용하면 된다.

 

title을 기준으로 정렬해서 가져와보자.

 


SELECT * FROM topic ORDER BY title;

# result
+----+------------+-------------------+---------------------+--------+---------------------------+
| id | title      | description       | created             | author | profile                   |
+----+------------+-------------------+---------------------+--------+---------------------------+
|  5 | MongoDB    | MongoDB is ...    | 2020-08-25 17:02:50 | egoing | developer                 |
|  1 | MySQL      | MySQL is...       | 2020-08-24 16:21:48 | egoing | developer                 |
|  2 | Oracle     | oracle is ...     | 2020-08-24 16:32:13 | egoing | developer                 |
|  4 | PostgreSQL | PostgreSQL is ... | 2020-08-24 16:34:10 | taeho  | data scientist, developer |
|  3 | SQL Server | SQL Server is ... | 2020-08-24 16:33:17 | duru   | data administrator        |
+----+------------+-------------------+---------------------+--------+---------------------------+

# id 기준으로 역순으로 정렬.
SELECT * FROM topic ORDER BY id DESC;

# result
+----+------------+-------------------+---------------------+--------+---------------------------+
| id | title      | description       | created             | author | profile                   |
+----+------------+-------------------+---------------------+--------+---------------------------+
|  5 | MongoDB    | MongoDB is ...    | 2020-08-25 17:02:50 | egoing | developer                 |
|  4 | PostgreSQL | PostgreSQL is ... | 2020-08-24 16:34:10 | taeho  | data scientist, developer |
|  3 | SQL Server | SQL Server is ... | 2020-08-24 16:33:17 | duru   | data administrator        |
|  2 | Oracle     | oracle is ...     | 2020-08-24 16:32:13 | egoing | developer                 |
|  1 | MySQL      | MySQL is...       | 2020-08-24 16:21:48 | egoing | developer                 |
+----+------------+-------------------+---------------------+--------+---------------------------+

 

DESC를 이용해서 내림차순 정렬도 가능하다.

 

DESC는 테이블의 column을 확인할 때도 사용했었는데 그 때는 'describe'의 의미였고 이번에는 'descending'의 의미인 듯 하다.

 

마지막으로 읽어올 데이터의 개수를 제한해보자.

 

지금이야 5개의 데이터로 하고 있지만 겁나게 많은 데이터들에 대해서 전체를 읽어오면 문제가 생길 것이 뻔하다.

 


SELECT * FROM topic LIMIT 2;

# result
+----+--------+---------------+---------------------+-----------+
| id | title  | description   | created             | author_id |
+----+--------+---------------+---------------------+-----------+
|  1 | MySQL  | MySQL is ...  | 2020-08-24 17:44:12 |         1 |
|  2 | Oracle | oracle is ... | 2020-08-24 17:44:35 |         1 |
+----+--------+---------------+---------------------+-----------+

 

LIMIT를 이용해서 개수의 제한을 둘 수가 있다.

 

SELECT를 이용할 때, SELECT *보다는 SELECT id, title 처럼 column을 직접 입력하는게 성능이 좋다고 한다.

 

 

3. UPDATE

 

이제 수정을 해보자. 수정은 UPDATE를 이용한다.

 

위의 데이터들을 읽어온 것을 보면, Oracle에 대한 description이 'oracle is ...'로 시작이 소문자인게 아주 불편하다.

 

이걸 똑바로 고쳐보도록 한다.

 


UPDATE topic SET description = 'Oracle is ...' WHERE id = 2;

# 확인
SELECT description FROM topic WHERE id = 2;

# result
+---------------+
| description   |
+---------------+
| Oracle is ... |
+---------------+

 

아주 잘 수정되었다.

 

중요한 부분이 WHERE을 사용하지않으면 모든 description에 대해서 'Oracle is ...'으로 바뀌게 된다.

 

따라서 어디를 수정할지를 명확하게 해야한다.

 

SET뒤에 지금은 description만 변경했지만 이어서 다른 column들을 설정해주면 동시에 다른 값도 바뀔 수 있다.

 


UPDATE topic SET title = 'oracle', description = 'oracle is ...' WHERE id = 2;

# 확인
SELECT title, description FROM topic WHERE id = 2;

# result
+--------+---------------+
| title  | description   |
+--------+---------------+
| oracle | oracle is ... |
+--------+---------------+

 

 

4. DELETE

 

마지막으로 삭제를 해보자. 삭제는 DELETE를 사용한다.

 


DELETE FROM topic WHERE id = 5;

# 확인

SELECT * FROM topic;

# result

+----+------------+-------------------+---------------------+--------+---------------------------+
| id | title      | description       | created             | author | profile                   |
+----+------------+-------------------+---------------------+--------+---------------------------+
|  1 | MySQL      | MySQL is...       | 2020-08-24 16:21:48 | egoing | developer                 |
|  2 | oracle     | oracle is ...     | 2020-08-24 16:32:13 | egoing | developer                 |
|  3 | SQL Server | SQL Server is ... | 2020-08-24 16:33:17 | duru   | data administrator        |
|  4 | PostgreSQL | PostgreSQL is ... | 2020-08-24 16:34:10 | taeho  | data scientist, developer |
+----+------------+-------------------+---------------------+--------+---------------------------+

 

마찬가지로 WHERE로 어떤 데이터를 삭제해줄지 정해주지 않으면 참사가 일어날 수 있으므로 꼭 유의하자.

'DB > MySQL' 카테고리의 다른 글

[MySQL] 데이터베이스 기초 - 2  (0) 2020.08.26
[MySQL] 데이터베이스 기초 - 1  (0) 2020.08.26