[MySQL] 데이터베이스 및 테이블 생성하기, CRUD
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)
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 교과서⌟ 책을 공부하며 요약・정리한 내용입니다.