SQL의 CRUD
- Create, Read, Update, Delete
테이블은 만들어져 있다고 할 때, 아래와 같이 데이터를 추가해보자.
먼저 테이블이 어떤 형식으로 만들어져 있는지 확인한다.
# DESC
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(15) | YES | | NULL | |
| profile | varchar(200) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
describe을 뜻하는 명령어 DESC를 통해 topic 테이블에 대한 정보를 확인한다.
# INSERT
mysql> INSERT INTO topic (title, description, created, author, profile) VALUES('MySQL', 'MySQL is ...', NOW(), 'Kim', 'developer');
MySQL을 title로 하는 데이터 1개를 추가하기 위해 위와 같은 명령어를 실행한다.
id는 auto_increment로 설정되어 있으므로 직접 추가하지 않아도 자동으로 오름차순으로 추가된다.
INSERT INTO 명령어를 통해 topic이라는 테이블의 각 열에 대해 VALUES에 들어가는 데이터들을 추가한다.
이때 NOW()는 datatime 형식인 created 열에 추가되는 데이터를 위한 함수인데, 데이터를 추가하는 시점의 날짜, 시각을 자동으로 입력해주는 기능을 한다.
# SELECT
mysql> SELECT * FROM topic;
+----+------------+-------------------+---------------------+--------+-----------+
| id | title | description | created | author | profile |
+----+------------+-------------------+---------------------+--------+-----------+
| 1 | MySQL | MySQL is ... | 2020-08-07 18:04:06 | Kim | developer |
| 2 | Oracle | Oracle is ... | 2020-08-07 18:06:08 | Kim | developer |
| 3 | SQL Server | SQL Server is ... | 2020-08-07 18:07:39 | Lee | Developer |
| 4 | PostgreSQL | PostgreSQL is ... | 2020-08-07 18:08:36 | Lee | Developer |
| 5 | MongoDB | MongoDB is ... | 2020-08-07 18:09:34 | Park | student |
+----+------------+-------------------+---------------------+--------+-----------+
5 rows in set (0.00 sec)
또한 SELECT * FROM 명령어를 통해 topic 테이블에 있는 데이터들을 모두 확인할 수 있다.
여기서 SELECT *은 모든 데이터를 선택한다는 것을 뜻하고 (*은 주로 모든 것을 포함하는 의미),
FROM topic은 topic 테이블에서 앞 명령어를 수행할 것이라는 의미를 갖는다.
/* SELECT 뒤에 원하는 열들의 이름을 넣는 것으로
열람하고 싶은 열들로 접근해서 해당 열들의 정보만 확인도 가능하다.*/
mysql> SELECT id, title, created, author FROM topic;
+----+------------+---------------------+--------+
| id | title | created | author |
+----+------------+---------------------+--------+
| 1 | MySQL | 2020-08-07 18:04:06 | Kim |
| 2 | Oracle | 2020-08-07 18:06:08 | Kim |
| 3 | SQL Server | 2020-08-07 18:07:39 | Lee |
| 4 | PostgreSQL | 2020-08-07 18:08:36 | Lee |
| 5 | MongoDB | 2020-08-07 18:09:34 | Park |
+----+------------+---------------------+--------+
5 rows in set (0.00 sec)
/* WHERE 명령어를 통해 특정 데이터에 해당하는 데이터들만 확인하는 것도 가능하다.
밑의 예시의 경우, author가 kim인 데이터들만 가져온다. */
mysql> SELECT id, title, created, author FROM topic WHERE author = 'kim';
+----+--------+---------------------+--------+
| id | title | created | author |
+----+--------+---------------------+--------+
| 1 | MySQL | 2020-08-07 18:04:06 | Kim |
| 2 | Oracle | 2020-08-07 18:06:08 | Kim |
+----+--------+---------------------+--------+
2 rows in set (0.00 sec)
/* ORDER BY 명령어를 통해 데이터를 오름차순 또는 내림차순으로도 가져올 수 있다.
DESC는 descend의 약자로 내림차순으로 데이터를 가져온다.
ASC는 ascend의 약자로 오름차순으로 데이터를 가져오며 이가 default이다. */
mysql> SELECT id, title, created, author FROM topic WHERE author = 'kim' ORDER BY id DESC;
+----+--------+---------------------+--------+
| id | title | created | author |
+----+--------+---------------------+--------+
| 2 | Oracle | 2020-08-07 18:06:08 | Kim |
| 1 | MySQL | 2020-08-07 18:04:06 | Kim |
+----+--------+---------------------+--------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM topic ORDER BY id DESC;
+----+------------+-------------------+---------------------+--------+-----------+
| id | title | description | created | author | profile |
+----+------------+-------------------+---------------------+--------+-----------+
| 5 | MongoDB | MongoDB is ... | 2020-08-07 18:09:34 | Park | student |
| 4 | PostgreSQL | PostgreSQL is ... | 2020-08-07 18:08:36 | Lee | Developer |
| 3 | SQL Server | SQL Server is ... | 2020-08-07 18:07:39 | Lee | Developer |
| 2 | Oracle | Oracle is ... | 2020-08-07 18:06:08 | Kim | developer |
| 1 | MySQL | MySQL is ... | 2020-08-07 18:04:06 | Kim | developer |
+----+------------+-------------------+---------------------+--------+-----------+
5 rows in set (0.00 sec)
/* LIMIT 명령어를 통해 해당 조건에 부합하는 데이터를 순서에 맞추어 일부만 가져오는 것도 가능하다.
아래의 예시는 해당 조건에 맞는 데이터를 1개만 가져오는 명령어이다. */
mysql> SELECT id, title, created, author FROM topic WHERE author = 'kim' ORDER BY id DESC LIMIT 1;
+----+--------+---------------------+--------+
| id | title | created | author |
+----+--------+---------------------+--------+
| 2 | Oracle | 2020-08-07 18:06:08 | Kim |
+----+--------+---------------------+--------+
1 row in set (0.00 sec)
# UPDATE
아래 예시는 topic 테이블에서 특정 데이터를 수정하는 예시이다.
이를 위해 UPDATE 명령어가 사용되었다.
mysql> SELECT * FROM topic;
+----+------------+-------------------+---------------------+--------+-----------+
| id | title | description | created | author | profile |
+----+------------+-------------------+---------------------+--------+-----------+
| 1 | MySQL | MySQL is ... | 2020-08-07 18:04:06 | Kim | developer |
| 2 | Oracle | Oracle is ... | 2020-08-07 18:06:08 | Kim | developer |
| 3 | SQL Server | SQL Server is ... | 2020-08-07 18:07:39 | Lee | Developer |
| 4 | PostgreSQL | PostgreSQL is ... | 2020-08-07 18:08:36 | Lee | Developer |
| 5 | MongoDB | MongoDB is ... | 2020-08-07 18:09:34 | Park | student |
+----+------------+-------------------+---------------------+--------+-----------+
5 rows in set (0.00 sec)
위 테이블에서 author가 Park인 데이터를 Kim으로, 그리고 profile 또한 developer로 고쳐주려고 한다.
UPDATE topic SET author = 'Kim', profile = 'developer' WHERE id = 5;
topic 테이블의 데이터를 업데이트 하는데 id가 5인 데이터의 author를 'Kim', profile을 'developer'로 바꾼다는 것이다.
위 명령어에서 주의할 점은 바로 WHERE이다.
WHERE를 빠뜨리고 위 명령어를 실행하면 topic 테이블의 모든 데이터들이 SET으로 설정한 데이터로 모두 수정되기 때문이다.
mysql> UPDATE topic SET author = 'Kim', profile = 'developer' WHERE id = 5;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM topic;
+----+------------+-------------------+---------------------+--------+-----------+
| id | title | description | created | author | profile |
+----+------------+-------------------+---------------------+--------+-----------+
| 1 | MySQL | MySQL is ... | 2020-08-07 18:04:06 | Kim | developer |
| 2 | Oracle | Oracle is ... | 2020-08-07 18:06:08 | Kim | developer |
| 3 | SQL Server | SQL Server is ... | 2020-08-07 18:07:39 | Lee | Developer |
| 4 | PostgreSQL | PostgreSQL is ... | 2020-08-07 18:08:36 | Lee | Developer |
| 5 | MongoDB | MongoDB is ... | 2020-08-07 18:09:34 | Kim | developer |
+----+------------+-------------------+---------------------+--------+-----------+
5 rows in set (0.00 sec)
# DELETE
DELETE 명령어를 통해 테이블에서 특정 데이터를 지울 수 있다.
그러나 데이터를 삭제하는 것인만큼 신중하게 수행해야 한다.
id 6번 데이터로 지우기 위한 더미 데이터를 만들어서 INSERT해주었다.
해당 데이터를 지우는 명령어는
DELETE FROM topic WHERE id = 6;
으로 topic 테이블에서 id가 6인 데이터를 지우는 작업을 수행한다.
mysql> SELECT * FROM topic;
+----+------------+-------------------+---------------------+--------+-----------+
| id | title | description | created | author | profile |
+----+------------+-------------------+---------------------+--------+-----------+
| 1 | MySQL | MySQL is ... | 2020-08-07 18:04:06 | Kim | developer |
| 2 | Oracle | Oracle is ... | 2020-08-07 18:06:08 | Kim | developer |
| 3 | SQL Server | SQL Server is ... | 2020-08-07 18:07:39 | Lee | Developer |
| 4 | PostgreSQL | PostgreSQL is ... | 2020-08-07 18:08:36 | Lee | Developer |
| 5 | MongoDB | MongoDB is ... | 2020-08-07 18:09:34 | Kim | developer |
| 6 | temp | Temp is null... | 2020-08-07 19:07:11 | null | null |
+----+------------+-------------------+---------------------+--------+-----------+
6 rows in set (0.00 sec)
mysql> DELETE FROM topic WHERE id = 6;
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM topic;
+----+------------+-------------------+---------------------+--------+-----------+
| id | title | description | created | author | profile |
+----+------------+-------------------+---------------------+--------+-----------+
| 1 | MySQL | MySQL is ... | 2020-08-07 18:04:06 | Kim | developer |
| 2 | Oracle | Oracle is ... | 2020-08-07 18:06:08 | Kim | developer |
| 3 | SQL Server | SQL Server is ... | 2020-08-07 18:07:39 | Lee | Developer |
| 4 | PostgreSQL | PostgreSQL is ... | 2020-08-07 18:08:36 | Lee | Developer |
| 5 | MongoDB | MongoDB is ... | 2020-08-07 18:09:34 | Kim | developer |
+----+------------+-------------------+---------------------+--------+-----------+
5 rows in set (0.00 sec)
'DB > MySQL' 카테고리의 다른 글
MySQL) 고정소수점(DECIMAL) vs 부동소수점(FLOAT, DOUBLE) (0) | 2020.09.12 |
---|---|
MySQL)테이블 만들기 (0) | 2020.08.07 |
MySQL)SQL의 뜻과 특징 (0) | 2020.08.07 |
MySQL)데이터베이스(스키마) 만들기, 제거하기, 보기, 사용하기 (0) | 2020.08.07 |
MySQL)Bitnami를 통해 MySQL 실행시키기 (cmd 이용) (0) | 2020.08.05 |
DB/MySQL 카테고리의 다른 글
MySQL) 고정소수점(DECIMAL) vs 부동소수점(FLOAT, DOUBLE)
MySQL)테이블 만들기
MySQL)SQL의 뜻과 특징
MySQL)데이터베이스(스키마) 만들기, 제거하기, 보기, 사용하기