본 게시글은 유튜브 생활코딩 온라인강의를 시청한 후 학습한 정보를 기록하는 목적의 게시글입니다.
생각의 흐름에 따라 작성된 게시글입니다. 가독성이 떨어질 수 있습니다.
생활코딩 WEP3 PHP & MySQL을 수강하기 위한 선수과목인
WEB2 - PHP와 DATABASE2 - MySQL에 대한 수강 기록입니다.
수강 일정은 야학의 수강계획표에 따릅니다.
#0.
MySQL에서 Create, Read, Update, Delete를 알아보자.
#1.
w3schools에서 MySQL의 Create를 다음과 같이 소개하고 있다.
mysql> USE opentutorials
Database changed
mysql> SHOW TABLES;
+-------------------------+
| Tables_in_opentutorials |
+-------------------------+
| topic |
+-------------------------+
1 row in set (0.00 sec)
mysql> DESC topic;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| title | varchar(100) | NO | | NULL | |
| description | text | NO | | NULL | |
| created | datetime | NO | | NULL | |
| author | varchar(30) | YES | | NULL | |
| profile | varchar(100) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)
저번 시간에 우리가 만든 topic 테이블의 구조는 다음과 같다.
INSERT를 이용하여 새로운 row를 추가해보자.
mysql> INSERT INTO topic
-> (title, description, created, author, profile)
-> VALUES('MySQL', 'MySQL is...', NOW(), 'Ethan', 'Developer');
Query OK, 1 row affected (0.03 sec)
우리가 추가한 데이터를 보는 방법은 어떻게 하면 될까?
마찬가지로 검색을 통해 알아보자.
mysql> SELECT * FROM topic;
+----+-------+-------------+---------------------+--------+-----------+
| id | title | description | created | author | profile |
+----+-------+-------------+---------------------+--------+-----------+
| 1 | MySQL | MySQL is... | 2020-11-12 19:11:35 | Ethan | Developer |
+----+-------+-------------+---------------------+--------+-----------+
1 row in set (0.00 sec)
다음과 같이 데이터를 추가하였다.
mysql> SELECT * FROM topic;
+----+------------+------------------+---------------------+--------+---------------------------+
| id | title | description | created | author | profile |
+----+------------+------------------+---------------------+--------+---------------------------+
| 1 | MySQL | MySQL is... | 2020-11-12 19:11:35 | Ethan | Developer |
| 2 | ORACLE | ORACLE is... | 2020-11-12 19:16:06 | Ethan | Developer |
| 3 | SQL Server | SQL Server is... | 2020-11-12 19:16:50 | duru | Data administrator |
| 4 | PostgreSQL | PostgreSQL is... | 2020-11-12 19:17:40 | taeho | Data scientist, Developer |
| 5 | MongoDB | MongoDB is... | 2020-11-12 19:18:12 | Ethan | Developer |
+----+------------+------------------+---------------------+--------+---------------------------+
5 rows in set (0.00 sec)
#2.
'*' 을 이용하여 모든 데이터를 출력하는 방법을 실습해보았다.
그렇다면 특정 column만 출력하고 싶으면 어떻게 할 수 있을까?
mysql> SELECT id, title, created FROM topic;
+----+------------+---------------------+
| id | title | created |
+----+------------+---------------------+
| 1 | MySQL | 2020-11-12 19:11:35 |
| 2 | ORACLE | 2020-11-12 19:16:06 |
| 3 | SQL Server | 2020-11-12 19:16:50 |
| 4 | PostgreSQL | 2020-11-12 19:17:40 |
| 5 | MongoDB | 2020-11-12 19:18:12 |
+----+------------+---------------------+
5 rows in set (0.00 sec)
모든 것을 의미하는 '*'대신 column의 타입 이름을 적는 것으로 그 기능을 찾아볼 수 있다.
MySQL의 SELECT 문법에 대하여 공식 메뉴얼을 살펴보자.
mysql> SELECT * FROM topic WHERE author="Ethan";
+----+---------+---------------+---------------------+--------+-----------+
| id | title | description | created | author | profile |
+----+---------+---------------+---------------------+--------+-----------+
| 1 | MySQL | MySQL is... | 2020-11-12 19:11:35 | Ethan | Developer |
| 2 | ORACLE | ORACLE is... | 2020-11-12 19:16:06 | Ethan | Developer |
| 5 | MongoDB | MongoDB is... | 2020-11-12 19:18:12 | Ethan | Developer |
+----+---------+---------------+---------------------+--------+-----------+
3 rows in set (0.00 sec)
WHERE을 통해서 author column에 Ethan의 값만 가진 row를 출력할 수 있다.
mysql> SELECT * FROM topic ORDER BY id DESC;
+----+------------+------------------+---------------------+--------+---------------------------+
| id | title | description | created | author | profile |
+----+------------+------------------+---------------------+--------+---------------------------+
| 5 | MongoDB | MongoDB is... | 2020-11-12 19:18:12 | Ethan | Developer |
| 4 | PostgreSQL | PostgreSQL is... | 2020-11-12 19:17:40 | taeho | Data scientist, Developer |
| 3 | SQL Server | SQL Server is... | 2020-11-12 19:16:50 | duru | Data administrator |
| 2 | ORACLE | ORACLE is... | 2020-11-12 19:16:06 | Ethan | Developer |
| 1 | MySQL | MySQL is... | 2020-11-12 19:11:35 | Ethan | Developer |
+----+------------+------------------+---------------------+--------+---------------------------+
5 rows in set (0.00 sec)
ORDER BY를 이용하여 id값이 큰 순서대로 출력할 수도 있다.
여기서 가장 중요한 것은, WHERE 혹은 ORDER BY를 사용하고자 할 때의 그 위치이다.
ORDER BY 같은 경우는 WHERE보다 뒤에서 사용하여야 한다.
그 순서는 아래 코드를 따르며 자세한 설명은 위에 링크된 공식문서를 확인하도록 하자.
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr] ...
[into_option]
[FROM table_references
[PARTITION partition_list]]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]
[HAVING where_condition]
[WINDOW window_name AS (window_spec)
[, window_name AS (window_spec)] ...]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[into_option]
[FOR {UPDATE | SHARE}
[OF tbl_name [, tbl_name] ...]
[NOWAIT | SKIP LOCKED]
| LOCK IN SHARE MODE]
[into_option]
into_option: {
INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name] ...
}
#3.
이미 추가된 데이터를 수정하는 방법은 어떻게 할 수 있을까?
마찬가지로 공식문서에 잘 나와있다. 혹시 공식문서가 어렵다면 이 곳을 참조하자.
mysql> UPDATE topic SET author="Ethan", profile="Developer" WHERE id="4";
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> SELECT * FROM topic;
+----+------------+------------------+---------------------+--------+--------------------+
| id | title | description | created | author | profile |
+----+------------+------------------+---------------------+--------+--------------------+
| 1 | MySQL | MySQL is... | 2020-11-12 19:11:35 | Ethan | Developer |
| 2 | ORACLE | ORACLE is... | 2020-11-12 19:16:06 | Ethan | Developer |
| 3 | SQL Server | SQL Server is... | 2020-11-12 19:16:50 | duru | Data administrator |
| 4 | PostgreSQL | PostgreSQL is... | 2020-11-12 19:17:40 | Ethan | Developer |
| 5 | MongoDB | MongoDB is... | 2020-11-12 19:18:12 | Ethan | Developer |
+----+------------+------------------+---------------------+--------+--------------------+
5 rows in set (0.00 sec)
UPDATE, table이름, SET, 컬럼="수정 할 내용" WHERE "수정할 곳"
위와 같은 문법으로 MySQL에서 Table row의 내용을 update할 수 있다.
강의에선 나오지 않았지만 혹시 column의 이름 혹은 Table으 이름을 바꾸고자 한다면 어떻게 바꿀 수 있을까?
역시 공식문서들에 잘 나와 있다.
mysql> ALTER TABLE topic CHANGE profile job VARCHAR(30);
Query OK, 5 rows affected (0.14 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM topic;
+----+------------+------------------+---------------------+--------+--------------------+
| id | title | description | created | author | job |
+----+------------+------------------+---------------------+--------+--------------------+
| 1 | MySQL | MySQL is... | 2020-11-12 19:11:35 | Ethan | Developer |
| 2 | ORACLE | ORACLE is... | 2020-11-12 19:16:06 | Ethan | Developer |
| 3 | SQL Server | SQL Server is... | 2020-11-12 19:16:50 | duru | Data administrator |
| 4 | PostgreSQL | PostgreSQL is... | 2020-11-12 19:17:40 | Ethan | Developer |
| 5 | MongoDB | MongoDB is... | 2020-11-12 19:18:12 | Ethan | Developer |
+----+------------+------------------+---------------------+--------+--------------------+
5 rows in set (0.00 sec)
#4.
드디어 마지막 DELETE이다. 역시 공식문서를 확인해보자.
mysql> DELETE FROM topic WHERE id="3";
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM topic;
+----+------------+------------------+---------------------+--------+-----------+
| id | title | description | created | author | job |
+----+------------+------------------+---------------------+--------+-----------+
| 1 | MySQL | MySQL is... | 2020-11-12 19:11:35 | Ethan | Developer |
| 2 | ORACLE | ORACLE is... | 2020-11-12 19:16:06 | Ethan | Developer |
| 4 | PostgreSQL | PostgreSQL is... | 2020-11-12 19:17:40 | Ethan | Developer |
| 5 | MongoDB | MongoDB is... | 2020-11-12 19:18:12 | Ethan | Developer |
+----+------------+------------------+---------------------+--------+-----------+
4 rows in set (0.00 sec)
언제나 WHERE에 유의하자. 만약 WHERE 옵션을 명시해주지 않는다면, 모든 row가 사라질 것이다.
#5.
본인의 상황에 따라 이후 학습을 진행할지, 다른 곳에 시간을 투자할지 결정하자.
물론 나는 목표가 WEB3 이기에.. 마저 시청할 예정이다.
'오픈튜토리얼스 > 생활코딩 : Web3 - PHP&MySQL' 카테고리의 다른 글
[생활코딩|PHP Day6] PHP의 반복문 예고 / PHP의 반복문 형식 / PHP 배열의 형식 / PHP의 반복문과 배열의 활용 (0) | 2020.11.16 |
---|---|
[생활코딩|PHP Day5] PHP Boolean과 비교연산자 / PHP의 조건문의 형식 / PHP의 조건문 활용 (0) | 2020.11.12 |
[생활코딩|PHP Day4] PHP 함수의 사용 / PHP 제어문 예고 (0) | 2020.11.12 |
[생활코딩|MySQL Day3] SQL과 테이블 구조 / MySQL 테이블의 생성 (0) | 2020.11.12 |
[생활코딩|PHP Day3] PHP의 변수, PHP의 URL 파라미터 (0) | 2020.11.12 |
최근댓글