📘 DATABASE/MySQL

[MySQL] 데이터베이스 및 테이블 생성하기, CRUD

개발진스 2023. 5. 12. 14:44
728x90

1. 데이터베이스 생성하기 

 

CREATE SCHEMA [데이터베이스명] 

mysql> create schema nodejs default character set utf8mb4 default collate utf8mb4_general_ci;

 

DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci를 붙여 한글과 이모티콘을 사용할 수 있게 만든다

 

2. 테이블 생성하기 

 

사용자 정보를 저장하는 테이블

mysql> CREATE TABLE nodejs.users (
    -> id INT NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(20) NOT NULL,
    -> age INT UNSIGNED NOT NULL,
    -> married TINYINT NOT NULL,
    -> comment TEXT NULL,
    -> created_at DATETIME NOT NULL DEFAULT now(),
    -> PRIMARY KEY(id),
    -> UNIQUE INDEX name_UNIQUE (name ASC))
    -> COMMENT = '사용자 정보'
    -> ENGINE = InnoDB;
Query OK, 0 rows affected (0.11 sec)

생성된 nodejs.user 테이블 정보

 

 

3. CRUD 작업하기

 

 

CRUD는 Create, Read, Update, Delete의 첫 글자를 모은 두문자어로, 데이터베이스에서 많이 수행하는 네가지 작업을 일컫는다.

 

1) Create (생성)

 

user테이블에 데이터를 삽입

mysql> INSERT INTO nodejs.users (name, age, married, comment) VALUES ('zero', 24, 0, '자기소개1');
Query OK, 1 row affected (0.03 sec)

mysql> INSERT INTO nodejs.users (name, age, married, comment) VALUES ('nero', 32, 1, '자기소개2');
Query OK, 1 row affected (0.02 sec)

 

INSERT INTO [테이블명] ([컬럼1], [컬럼2], ...) VALUES ([값1], [값2], ...)

 

 

2) Read (조회)

 

1. user테이블에 데이터를 조회

mysql> SELECT * FROM nodejs.users;
+----+------+-----+---------+-----------+---------------------+
| id | name | age | married | comment   | created_at          |
+----+------+-----+---------+-----------+---------------------+
|  1 | zero |  24 |       0 | 자기소개1 | 2023-05-12 14:25:42 |
|  2 | nero |  32 |       1 | 자기소개2 | 2023-05-12 14:26:06 |
+----+------+-----+---------+-----------+---------------------+
2 rows in set (0.00 sec)

 

 

2. 특정 컬럼만 조회

mysql> SELECT name, married FROM nodejs.users;
+------+---------+
| name | married |
+------+---------+
| zero |       0 |
| nero |       1 |
+------+---------+
2 rows in set (0.00 sec)

 

3. WHERE절을 사용해서 특정 조건만 가진 데이터 조회 

Q1) married가 1이고, 나이가 30세 이상인 사용자를 조회하는 SQL문 (AND 조건)

mysql> SELECT name, age FROM nodejs.users WHERE married = 1 AND age > 30;
+------+-----+
| name | age |
+------+-----+
| nero |  32 |
+------+-----+
1 row in set (0.00 sec)


Q2) married가 0이고, 나이가 30세 이상인 사용자를 조회하는 SQL문 (OR 조건)

mysql> SELECT name, age FROM nodejs.users WHERE married = 0 OR age > 30;
+------+-----+
| name | age |
+------+-----+
| zero |  24 |
| nero |  32 |
+------+-----+
2 rows in set (0.00 sec)

AND : 조건을 만족하는 모든 데이터를 찾음

OR : 조건들 중 어느하나라도 만족하는 데이터를 찾음

 

4. ORDER BY 절을 이용해서 정렬 조회

SELECT name, age FROM nodejs.users ORDER BY age DESC;
+------+-----+
| name | age |
+------+-----+
| nero |  32 |
| zero |  24 |
+------+-----+
2 rows in set (0.00 sec)

DESC는 내림차순, ASC 오름차순, 기본 값은 ASC

 

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

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

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

 

6. OFFSET (건너 뛰기)

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

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

 

 

3) Update (수정)

 

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)

UPDATE [테이블명] SET [컬럼명=바꿀 값] WHERE [조건]

 

여러 정보를 한꺼번에 바꿔주고 싶다면 쉼표로 구분하면 되며, 조건들에 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)

 

 

4) Delete (삭제)

 

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

DELETE FROM [테이블명] WHERE [조건]

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

 

 

 


참고 :  ⌜node.js 교과서⌟ 책을 공부하며 요약・정리한 내용입니다.


 

 

 

 

 

 

 

 

 

728x90