본문 바로가기

Database/SQL - MySQL

MySQL - CRUD 명령어 (CRUD Commands)

CRUD 란 Create, Read, Update, Delete의 약자로써 일반적인 데이터베이스에서 많이 수행하는 네 가지 작업을 뜻한다. CRUD만 익혀도 웬만한 프로그램은 다 만들 수 있다. SQL문 위주로 이를 알아보자.

 

Create (생성)

Create (생성) 는 데이터를 생성하여 데이터베이스에 넣는 작업이다. 저번에 만든 users 테이블에 데이터를 몇 개 넣어보자. 아래와 같은 명령어로 데이터를 넣어주자 (INSERT).

 

mysql> INSERT INTO nodejs.users (name, age, married, comment) VALUES ('beom', 23, 0, '안녕하세용');
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO nodejs.users (name, age, married, comment) VALUES ('seok', 46, 0, 'Hello World~');
Query OK, 1 row affected (0.01 sec)

 

데이터를 넣는 명령어는 보다시피 INSERT INTO [테이블명] ([컬럼1], [컬럼2], ...) VALUES ([값1], [값2], ...) 이다. 첫 번째 명령어를 예로 들자면, 컬럼1인 name에는 값1인 'beom'이, 컬럼2인 age에는 값2인 23이 들어가는 식이다. id는 AUTO_INCREMENT에 의해, 그리고 created_at은 DEFAULT 값에 의해 자동으로 채워져 들어갈 것이다.

 

comments 테이블에도 데이터를 넣어보자.

 

mysql> INSERT INTO nodejs.comments (commenter, comment) VALUES (1, '안녕하세요~ 저는 beom 입니다.');
Query OK, 1 row affected (0.01 sec)

 

그렇다면 잘못된 값을 넣어주면 어떻게 될까?

 

mysql> INSERT INTO nodejs.users (name, age, married, comment) VALUES (123, 'hello', 1, 'nono');
ERROR 1366 (HY000): Incorrect integer value: 'hello' for column 'age' at row 1

 

위와 같이 에러가 발생한다. 각 컬럼에는 맞는 자료형의 값을 넣어주어야 한다.

 

Read (조회)

Read (조회) 는 데이터베이스의 데이터를 조회하는 작업이다.

 

모든 데이터 조회

먼저 users 테이블의 모든 데이터를 조회하려면 SELECT * FROM [테이블명] 과 같이 작성한다.

 

mysql> SELECT * FROM nodejs.users;
+----+------+-----+---------+--------------+---------------------+
| id | name | age | married | comment      | created_at          |
+----+------+-----+---------+--------------+---------------------+
|  1 | beom |  23 |       0 | 안녕하세용   | 2020-08-12 13:01:38 |
|  2 | seok |  46 |       0 | Hello World~ | 2020-08-12 13:02:05 |
+----+------+-----+---------+--------------+---------------------+
2 rows in set (0.00 sec)

 

특정 컬럼만 조회

특정 컬럼만 조회할 수도 있다. 조회를 원하는 컬럼을 SELECT 다음에 * 대신 넣으면 된다.

 

mysql> SELECT name, age FROM nodejs.users;
+------+-----+
| name | age |
+------+-----+
| beom |  23 |
| seok |  46 |
+------+-----+
2 rows in set (0.00 sec)

 

WHERE 절 (조건부 조회)

WHERE 절을 사용하면 특정 조건의 데이터만 조회할 수도 있다. 다음은 결혼을 했고 나이가 30세 이상인 사용자를 조회하는 SQL문이다. AND와 OR로 여러 조건들을 묶어 조회할 수도 있다. 이름 그대로 그리고와 또는의 의미를 갖는다.

 

mysql> SELECT name, age FROM nodejs.users WHERE age > 24 AND married = 0;
+------+-----+
| name | age |
+------+-----+
| seok |  46 |
+------+-----+
1 row in set (0.00 sec)

 

 

ORDER BY (정렬 후 조회)

ORDER BY [컬럼명] [ASC/DESC] 키워드를 사용하여 정렬도 가능하다. 나이가 많은 순서대로 정렬해보자. DESC는 내림차순, ASC는 오름차순이다.

 

mysql> SELECT name, age FROM nodejs.users ORDER BY age DESC;
+------+-----+
| name | age |
+------+-----+
| seok |  46 |
| beom |  23 |
+------+-----+
2 rows in set (0.00 sec)

 

 

LIMIT (조회할 로우 개수 설정)

LIMIT [숫자] 키워드로 조회할 로우 개수를 설정할 수 있다. 즉, 하나만 조회하려면 LIMIT 1을 SQL문 끝에 붙인다.

 

mysql> SELECT name, age FROM nodejs.users ORDER BY age DESC LIMIT 1;
+------+-----+
| name | age |
+------+-----+
| seok |  46 |
+------+-----+
1 row in set (0.00 sec)

 

OFFSET (건너 뛰기)

로우 개수를 설정할 때 몇 개를 건너뛸지 설정할 수도 있다. 이는 게시판 등의 페이지네이션 기능을 구현할 때 유용한데, 예를 들어 페이지마다 10개의 게시물을 조회했다면, 두 번째 페이지에서는 11~20번 게시물을 조회해야 한다. 이 때, 처음 10개를 건너뛰고 다음 10개를 조회하라는 식의 명령으로 원하는 게시물만 가져올 수 있다. OFFSET [숫자] 키워드로 사용한다.

 

mysql> SELECT name, age FROM nodejs.users LIMIT 1 OFFSET 1;
+------+-----+
| name | age |
+------+-----+
| seok |  46 |
+------+-----+
1 row in set (0.00 sec)

 

Update (수정)

Update (수정) 는 데이터베이스의 데이터를 수정하는 작업이다. 일부 데이터를 수정할 수 있다. 수정하는 명령어는 UPDATE [테이블명] SET [컬럼명=바꿀 값] WHERE [조건] 이다. 아래와 같이 입력하여 정보를 바꿔주자.

 

mysql> UPDATE nodejs.users SET age = 30 WHERE id = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT name, age FROM nodejs.users WHERE id = 2;
+------+-----+
| name | age |
+------+-----+
| seok |  30 |
+------+-----+
1 row in set (0.00 sec)

 

여러 정보를 한꺼번에 바꿔주고 싶다면 쉼표로 구분하면 되며, 조건들에 AND 또는 OR로 여러 개를 동시에 사용할 수도 있다.

 

mysql> UPDATE nodejs.users SET age = 31, name = 'seeok' WHERE id = 2 AND age = 30;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT name, age FROM nodejs.users WHERE id = 2;
+-------+-----+
| name  | age |
+-------+-----+
| seeok |  31 |
+-------+-----+
1 row in set (0.00 sec)

 

Delete (삭제)

Delete (삭제) 는 데이터베이스의 데이터를 삭제하는 작업이다. 로우를 하나 제거해보자. SQL 문 삭제 명령어는
DELETE FROM [테이블명] WHERE [조건] 이다.

 

mysql> DELETE FROM nodejs.users WHERE id = 2;
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM nodejs.users;
+----+------+-----+---------+------------+---------------------+
| id | name | age | married | comment    | created_at          |
+----+------+-----+---------+------------+---------------------+
|  1 | beom |  23 |       0 | 안녕하세용 | 2020-08-12 13:01:38 |
+----+------+-----+---------+------------+---------------------+
1 row in set (0.00 sec)

 

삭제 조건 역시 AND나 OR로 여러 개를 동시에 사용할 수 있다.

 

출처

Node.js 교과서 개정 2판 - 길벗, 조현영