DB_MySQL

Daye Kang·2020년 6월 7일
0

Database

정보량의 폭발적 증가는 'file'만으로 커버하는 데 한계가 발생했고, 1960년부터 데이터 정리, 정돈을 할 수 있는 전문적 소프트웨어를 만들기 시작했다. 이런 맥락에서 만들어진 소프트웨어들을 'database'라고 부르기 시작했다.

Relational database(관계형 데이터베이스)는 데이터베이스 분야에서 절대적인 위치로 군림하였고 MySQL, Oracle, SQL Server, PostgreSQL, DB2, Access 등이 출현하였다.

1994년에 만들어진 MySQL은 준수한 데이터베이스 시스템으로 웹과 함께 폭발적인 동반 성장을 하였다.

SQL

Structured Query Language

  • Structured: 표를 작성하는 것, 관계를 정리 정돈하는 것
  • Query: 데이터베이스에게 CRUD 요청, 질의하는 것
  • Language: 데이터베이스와 클라이언트가 상호 이해할 수 있도록 사용하는 언어

MySQL 시작하기

MySQL 구조

  • 표(table): 엑셀고 같은 스프레드 시트
  • database: schema라고도 표현, 연관된 표들을 그룹핑하는 것
  • database server: schema들을 다 묶는 것
// MySQL 이동경로
cd /usr/local/mysql/bin/

// MySQL 시작하기
./mysql -uroot -p

'schema'에서 'table'만들기

// 'opentutorials' schema로 이동
mysql> USE opentutorials;

// 'id', 'title', 'description', 'created', 'author', 'profile' 이라는 column을 'topic' 명의 테이블 생성
mysql> CREATE TABLE topic(
    -> id INT(11) NOT NULL AUTO_INCREMENT,
    -> title VARCHAR(100) NOT NULL,
    -> description TEXT NULL,
    -> created DATETIME NOT NULL,
    -> author VARCHAR(30) NULL,
    -> profile VARCHAR(100) NULL,
    -> PRIMARY KEY(id)
    -> );
Query OK, 0 rows affected, 1 warning (0.02 sec)

// 테이블 리스트 확인
mysql> SHOW TABLES;
+-------------------------+
| Tables_in_opentutorials |
+-------------------------+
| topic                   |
+-------------------------+
1 row in set (0.00 sec)

// topic 테이블의 상세 확인
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(30)  | YES  |     | NULL    |                |
| profile     | varchar(100) | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

테이블에 row 만들기

// 'topic' 테이블에 각각의 column에 해당하는 값을 넣어 row 만들기
mysql> INSERT INTO topic (title, description, created, author, profile) VALUES('MySQL', 'MySQL is...', NOW(), 'daye', 'developer');
Query OK, 1 row affected (0.00 sec)

// 'topic'테이블 확인
mysql> SELECT * FROM topic;
+----+-------+-------------+---------------------+--------+-----------+
| id | title | description | created             | author | profile   |
+----+-------+-------------+---------------------+--------+-----------+
|  1 | MySQL | MySQL is... | 2020-06-07 17:57:32 | daye   | developer |
+----+-------+-------------+---------------------+--------+-----------+
1 row in set (0.00 sec)

// table row 생성하기
mysql> INSERT INTO topic (title, description, created, author, profile) VALUES('ORACLE', 'ORALE is...', NOW(), 'Lewis', 'developer');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO topic (title, description, created, author, profile) VALUES('PolstgreSQL', 'PostgreSQL is...', NOW(), 'taeho', 'student');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO topic (title, description, created, author, profile) VALUES('MongoDB', 'MongoDB is...', NOW(), 'daye', 'frontend developer');
Query OK, 1 row affected (0.00 sec)

// table 확인
mysql> SELECT * FROM topic;
+----+-------------+------------------+---------------------+--------+--------------------+
| id | title       | description      | created             | author | profile            |
+----+-------------+------------------+---------------------+--------+--------------------+
|  1 | MySQL       | MySQL is...      | 2020-06-07 17:57:32 | daye   | developer          |
|  2 | ORACLE      | ORALE is...      | 2020-06-07 17:59:14 | Lewis   | developer          |
|  3 | PolstgreSQL | PostgreSQL is... | 2020-06-07 17:59:56 | taeho  | student            |
|  4 | MongoDB     | MongoDB is...    | 2020-06-07 18:00:41 | daye  | frontend developer |
+----+-------------+------------------+---------------------+--------+--------------------+
4 rows in set (0.00 sec)

테이블에서 row 읽기

// 원하는 column만 읽기
mysql> SELECT id, title, description FROM topic;
+----+-------------+------------------+
| id | title       | description      |
+----+-------------+------------------+
|  1 | MySQL       | MySQL is...      |
|  2 | ORACLE      | ORALE is...      |
|  3 | PolstgreSQL | PostgreSQL is... |
|  4 | MongoDB     | MongoDB is...    |
+----+-------------+------------------+
4 rows in set (0.00 sec)

// 원하는 조건에 맞춰서 불러 읽기
// 1. author = 'daye'일 경우
mysql> SELECT id, title, created, author  FROM topic WHERE author= "daye";
+----+--------------+---------------------+--------+
| id | title        | created             | author |
+----+--------------+---------------------+--------+
|  1 | MySQL        | 2020-06-07 17:57:32 | daye   |
|  4 | MongoDB      | 2020-06-07 18:00:41 | daye   |
+----+--------------+---------------------+--------+
2 rows in set (0.00 sec)

// 2. 1의 조건에서 id를 내림차순일 경우
mysql> SELECT id, title, created, author FROM topic WHERE author="daye" ORDER BY id DESC;
+----+--------------+---------------------+--------+
| id | title        | created             | author |
+----+--------------+---------------------+--------+
|  5 | MySQL server | 2020-06-07 18:09:36 | daye   |
|  1 | MySQL        | 2020-06-07 17:57:32 | daye   |
+----+--------------+---------------------+--------+
2 rows in set (0.00 sec)

테이블에서 row 수정하기

// 테이블 확인
mysql> SELECT * FROM topic;
+----+--------------+--------------------+---------------------+--------+--------------------+
| id | title        | description        | created             | author | profile            |
+----+--------------+--------------------+---------------------+--------+--------------------+
|  1 | MySQL        | MySQL is...        | 2020-06-07 17:57:32 | daye   | developer          |
|  2 | ORACLE       | ORALE is...        | 2020-06-07 17:59:14 | Lewis   | developer          |
|  3 | PolstgreSQL  | PostgreSQL is...   | 2020-06-07 17:59:56 | taeho  | student            |
|  4 | MongoDB      | MongoDB is...      | 2020-06-07 18:00:41 | daye  | frontend developer |
+----+--------------+--------------------+---------------------+--------+--------------------+
4 rows in set (0.00 sec)

// 원하는 row에서 값 수정하기
// id=2인 row에서 description에 해당하는 값과 title에 해당하는 값 수정하기
mysql> UPDATE topic SET description='Oracle is...', title='Oracle' WHERE id=2;
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-06-07 17:57:32 | daye   | developer          |
|  2 | Oracle       | Oracle is...       | 2020-06-07 17:59:14 | Lewis   | developer          |
|  3 | PolstgreSQL  | PostgreSQL is...   | 2020-06-07 17:59:56 | taeho  | student            |
|  4 | MongoDB      | MongoDB is...      | 2020-06-07 18:00:41 | daye  | frontend developer |
+----+--------------+--------------------+---------------------+--------+--------------------+
4 rows in set (0.00 sec)

테이블에서 row 삭제하기

// 원하는 row 삭제하기
// id=4인 row를 topic 테이블에서삭제
mysql> DELETE FROM topic WHERE id=4;
Query OK, 1 row affected (0.01 sec)

// topic table 확인
mysql> SELECT * FROM topic;
+----+-------------+------------------+---------------------+----------+-----------+
| id | title       | description      | created             | author   | profile   |
+----+-------------+------------------+---------------------+----------+-----------+
|  1 | MySQL       | MySQL is...      | 2020-06-07 17:57:32 | daye     | developer |
|  2 | Oracle      | Oracle is...     | 2020-06-07 17:59:14 | Lewis | developer |
|  3 | PolstgreSQL | PostgreSQL is... | 2020-06-07 17:59:56 | taeho    | student   |
+----+-------------+------------------+---------------------+----------+-----------+
3 rows in set (0.00 sec)
profile
뭐든 하자

0개의 댓글