생활코딩/DataBase

[MySQL] CRUD - INSERT, SELECT, UPDATE, DELETE

hayjo 2020. 9. 24. 17:25

[강의 출처] opentutorials.org/course/3161/19538

 

MySQL의 CRUD - 생활코딩

MySQL의 CRUD 2018-02-12 01:23:10

opentutorials.org


CRUD

  • 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리기능 Create, Read, Update, Delete 연산을 묶어서 일컫는 말 [출처-위키]
  • 데이터베이스라면 Create, Read 기능은 필수. (Update, Delete 기능은 역사, 회계 등 특정 분야에 따라 배제될 수도 있다.)

 

테이블 구조 확인

mysql> USE dbname;          -- 해당 테이블이 들어있는 DB 지정
mysql> DESC table_name;     -- Description

+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| Column1 | varchar(100) | NO   |     | NULL    |                |
| Column2 | text         | YES  |     | NULL    |                |
| Date    | datetime     | NO   |     | NULL    |                |
| String  | varchar(30)  | YES  |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+

 

데이터 INSERT

mysql> INSERT INTO example (Column1, Column2, Date, String)
                     VALUES('Column1Data', 'Column2Data', NOW(), 'StringData');
/*
example이라는 테이블의
Column1, Column2, Date, String 행에 각각
'Column1Data', 'Column2Data', 현재 시간, 'StringData' 라는 데이터를 입력한다
*** id행은 auto_increment 옵션이 있어서 생략시 자동으로 추가됨 *** 
*/

Query OK, 1 row affected (0.01 sec)

 

데이터 SELECT

모든 데이터 출력(*)

mysql> SELECT * FROM example;
+----+--------------+--------------+---------------------+-------------+
| id | Column1      | Column2      | Date                | String      |
+----+--------------+--------------+---------------------+-------------+
|  1 | Column1Data  | Column2Data  | 2020-09-24 07:23:17 | StringData  |
|  2 | Column1Data2 | Column2Data2 | 2020-09-24 07:32:06 | StringData2 |
|  3 | Column1Data3 | Column2Data3 | 2020-09-24 07:32:16 | StringData3 |
|  4 | Column1Data4 | Column2Data4 | 2020-09-24 07:32:25 | StringData4 |
|  5 | Column1Data5 | Column2Data5 | 2020-09-24 07:32:34 | StringData5 |
+----+--------------+--------------+---------------------+-------------+
5 rows in set (0.00 sec)

 

특정 컬럼만 출력

mysql> SELECT id,Column1,Date FROM example;
+----+--------------+---------------------+
| id | Column1      | Date                |
+----+--------------+---------------------+
|  1 | Column1Data  | 2020-09-24 07:23:17 |
|  2 | Column1Data2 | 2020-09-24 07:32:06 |
|  3 | Column1Data3 | 2020-09-24 07:32:16 |
|  4 | Column1Data4 | 2020-09-24 07:32:25 |
|  5 | Column1Data5 | 2020-09-24 07:32:34 |
+----+--------------+---------------------+
5 rows in set (0.00 sec)

 

특정 로우만 출력

mysql> SELECT id, Column1, Date FROM example WHERE String='StringData4';
+----+--------------+---------------------+
| id | Column1      | Date                |
+----+--------------+---------------------+
|  4 | Column1Data4 | 2020-09-24 07:32:25 |
+----+--------------+---------------------+
1 row in set (0.00 sec)
--example 테이블에서 String 컬럼의 값이 StringData4인 열을 출력하되 id, Column1, Data 행만 출력

 

특정 정렬로 출력

mysql> SELECT id, Column1, Date FROM example ORDER BY id DESC;
+----+--------------+---------------------+
| id | Column1      | Date                |
+----+--------------+---------------------+
|  5 | Column1Data5 | 2020-09-24 07:32:34 |
|  4 | Column1Data4 | 2020-09-24 07:32:25 |
|  3 | Column1Data3 | 2020-09-24 07:32:16 |
|  2 | Column1Data2 | 2020-09-24 07:32:06 |
|  1 | Column1Data  | 2020-09-24 07:23:17 |
+----+--------------+---------------------+
5 rows in set (0.00 sec)
--example 테이블에서 id, Column1, Date 행의 데이터를 id 기준으로 역순으로 출력

 

특정 개수까지만 출력

(SQL에는 10억 건 이상의 데이터도 저장 가능하지만, 그 데이터를 화면에 다 출력하면 컴퓨터가 멈춰버린다.)

mysql> SELECT id, Column1, Date FROM example ORDER BY id DESC LIMIT 2;
+----+--------------+---------------------+
| id | Column1      | Date                |
+----+--------------+---------------------+
|  5 | Column1Data5 | 2020-09-24 07:32:34 |
|  4 | Column1Data4 | 2020-09-24 07:32:25 |
+----+--------------+---------------------+
2 rows in set (0.00 sec)
-- 2건까지만 출력

이외 상세한 문법은 MySQL 공식문서에서 확인할 수 있다.

 

 

데이터 UPDATE

*WHERE문 생략하지 않도록 주의. 생략시 전체 데이터가 SET문 값으로 변경됨*

mysql> UPDATE example SET Column1='Column1Data1', Column2='Column2Data2' WHERE id=1;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0
-- example 테이블에서 id가 1인 로우의 Column1 값을 Column1Data1, Column2 값을 Column2Data2로 변경

mysql> SELECT * FROM example;
+----+--------------+--------------+---------------------+-------------+
| id | Column1      | Column2      | Date                | String      |
+----+--------------+--------------+---------------------+-------------+
|  1 | Column1Data1 | Column2Data2 | 2020-09-24 07:23:17 | StringData  |
|  2 | Column1Data2 | Column2Data2 | 2020-09-24 07:32:06 | StringData2 |
|  3 | Column1Data3 | Column2Data3 | 2020-09-24 07:32:16 | StringData3 |
|  4 | Column1Data4 | Column2Data4 | 2020-09-24 07:32:25 | StringData4 |
|  5 | Column1Data5 | Column2Data5 | 2020-09-24 07:32:34 | StringData5 |
+----+--------------+--------------+---------------------+-------------+
5 rows in set (0.00 sec)

 

데이터 DELETE

*WHERE문 생략하지 않도록 주의. 생략시 전체 데이터가 삭제됨*

mysql> DELETE FROM example WHERE id = 5;
Query OK, 1 row affected (0.02 sec)

mysql> SELECT * FROM example;
+----+--------------+--------------+---------------------+-------------+
| id | Column1      | Column2      | Date                | String      |
+----+--------------+--------------+---------------------+-------------+
|  1 | Column1Data1 | Column2Data2 | 2020-09-24 07:23:17 | StringData  |
|  2 | Column1Data2 | Column2Data2 | 2020-09-24 07:32:06 | StringData2 |
|  3 | Column1Data3 | Column2Data3 | 2020-09-24 07:32:16 | StringData3 |
|  4 | Column1Data4 | Column2Data4 | 2020-09-24 07:32:25 | StringData4 |
+----+--------------+--------------+---------------------+-------------+
4 rows in set (0.00 sec)
-- example 테이블에서 id가 5인 로우를 삭제

 

 

테이블 이름 변경

mysql> RENAME TABLE old TO new;

 

 

id 재설정 [참조]

ALTER TABLE tablename DROP id

ALTER TABLE tablename ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id), AUTO_INCREMENT=1