이 글은 생활코딩 강의를 통해 본인이 공부한 내용을 정리한 글입니다.
https://www.youtube.com/user/egoing2
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 |