본문 바로가기
코드이그나이터와 php7와 mysql

편집의 왕자 MYSQL

1. 오토셋 APM 인스톨러 ( apache + php7.2 + mariadb ) 설치 | https://itadventure.tistory.com/93

2. 코드이그나이터 4 ( codeigniter 4 ) 설치 | https://itadventure.tistory.com/95

3. 비주얼 스튜디오 코드 에디터 설치 & 한글 설정 | https://itadventure.tistory.com/96

4. 폴더열기 / 웹페이지 편집(1) | https://itadventure.tistory.com/97

5. 웹페이지 편집(2) | https://itadventure.tistory.com/101

6. 코드이그나이터4의 URL 규칙 | https://itadventure.tistory.com/105

7. php, 네임스페이스 [ namespace ] ?! | https://itadventure.tistory.com/118

8. 코드이그나이터의 네임스페이스, 그리고 모델 | https://itadventure.tistory.com/122

9. 코드이그나이터 뷰의 파라미터 전달 | https://itadventure.tistory.com/147

10. 코드이그나이터 뷰를 나눠 볼까요? | https://itadventure.tistory.com/174

11. MYSQL 이 뭐여? [ 마이에스큐엘은 서류철이다! ] | https://itadventure.tistory.com/175

12. MYSQL 콘솔에 접속해보자! | https://itadventure.tistory.com/178

13. MySql에 넣었다가 꺼냈다가, 뭘? | https://itadventure.tistory.com/265

14. 검색진열대 MYSQL | https://itadventure.tistory.com/267

15. 편집의 왕자 MYSQL


종이로 된 장부는 그 내용을 수정하려면 볼펜으로 찍찍 긋고 고친 내용을 다시 쓰기도 하지요?
예쁜 글씨는 그나마 정감이 가기도 하지만, 여러번 계속 수정을 거듭한다면 어떨까요?

아무도 어느 순간에는 장부가 적힌 페이지를 떼어 내고 새로운 페이지로 바꿔서 페이지의 내용을 모두 옮겨 적어야 할 수도 있을 겁니다. 힘들것 같습니다.

하지만 전산장부는 그럴 필요가 없습니다.
수정하면 그냥 그 부분이 변경되고 수정한 흔적은 온데 간데 없으니까요.
그렇기에 수정이력을 별도로 기록하여 남기는 경우도 있습니다. 이 것을 로그라고 하지요.

이번 챕터에서는 로그에 대해서까지는 다루지 않겠지만
MySQL 에서 주요하게 사용되는 수정(Update) 과 삭제(Delete) 에 대해 다루어 보도록 하겠습니다.

테이블 내의 필드값의 수정이 필요할 경우, 
이를 테면 도서 테이블에서 제목이 원래 '오토셋으로 구현하는 코드이그나이터 3'인데
'오토셋으로 구현하는 코드이그나이터 4'로 잘못 입력했다면 수정이 필요할 겁니다.
(현재 강좌는 '코드이그나이터 4'가 맞습니다)

그럴 때 사용하는 SQL 명령어가 UPDATE 명령어입니다.
UPDATE 는 수정하다, 갱신하다는 뜻의 단어인데요.
다음과 같이 사용합니다.

UPDATE 테이블 set 필드='값' 
where 조건;

위 형식에 맞추어 도서 테이블에서 제목을 '오토셋으로 구현하는 코드이그나이터 3' 으로 변경하려면 다음과 같이 명령문을 사용해야 합니다.

UPDATE book set title='오토셋으로 구현하는 코드이그나이터 3'
where title='오토셋으로 구현하는 코드이그나이터 4';

MYSQL 콘솔창에서 실행해볼까요?
mysql 화면은 아래와 같이 보이실 겁니다.

MariaDB [library]> UPDATE book set title='오토셋으로 구현하는 코드이그나이터 3'
    -> where title='오토셋으로 구현하는 코드이그나이터 4';
Query OK, 1 row affected (0.005 sec) => 해석 : 질의 처리, 1행이 영향을 받았습니다. (0.005초)
Rows matched: 1  Changed: 1  Warnings: 0 => 해석 : 매치된 행: 1, 변경: 1, 경고: 0

참고로 INSERT, UPDATE 같은걸 명령문이라고 하는데 명령문의 경우 대소문자 구별없이 모두 사용 가능합니다.

그런데 뒤에 따라 붙는 where title='오토셋으로 구현하는 코드이그나이터 4' 는 무슨 의미일까요?
UPDATE 문은 기본적으로 테이블의 모든 컬럼값을 변경하도록 되어 있습니다.

그러니까 다음과 같은 명령을 내리면 큰일납니다.
book 테이블 안에 있는 모든 책의 제목이 바뀌어 버리는 문제가 생깁니다.

※ 실행하지 마세요!
UPDATE book set title='오토셋으로 구현하는 코드이그나이터 3';

그렇기 때문에 바꾸어야 할 책의 제목이 일치하는 책만 바꾸어야 합니다.
그 검색조건이 바로 아래에 해당하는 조건절인 것입니다.

where title='오토셋으로 구현하는 코드이그나이터 4'

이 경우 제목이 현재 '오토셋으로 구현하는 코드이그나이터 4' 인 책만 바뀝니다.

앞에서 실행한대로 책 제목이 바뀌었나 확인해볼까요?
select 명령문으로 number, title 필드만 나열하여 봅시다.

select number, title from book;

mysql 화면

MariaDB [library]> select number, title from book;

+--------+--------------------------------------+

| number | title                                |

+--------+--------------------------------------+

|      1 | 3D 모델링 블렌더 2.8                 |

|      2 | 오토셋으로 구현하는 코드이그나이터 3 |

+--------+--------------------------------------+

2 rows in set (0.000 sec)

오, 2권의 책 중에서 1권의 책 제목이 제대로 바뀌었습니다!
그렇다면 이번에는 다시 책 제목을 '오토셋으로 구현하는 코드이그나이터 4'로 바꿔볼텐데요.
다른 방법으로 해보겠습니다.

'오토셋으로 구현하는 코드이그나이터 3' 왼쪽에 숫자 '2'가 보이실텐데요.
mysql 이 자동으로 붙인 일련번호입니다.
혹시라도 독자분의 화면에서는 번호가 다를 수 있으니 이 번호를 기억해주세요.

그리고 다음과 같이 입력해 주세요.
숫자가 2가 아닌 경우 'number=' 우측의 숫자는 2 대신 기억했던 숫자를 기록합니다.

update book set title='오토셋으로 구현하는 코드이그나이터 4'
where number=2;

mysql 화면

MariaDB [library]> update book set title='오토셋으로 구현하는 코드이그나이터 4'
    -> where number=2;
Query OK, 0 rows affected (0.000 sec)
Rows matched: 1  Changed: 0  Warnings: 0

그리고 다시 한번 select 문으로 결과를 확인해봅니다.

select number, title from book;

mysql 화면

MariaDB [library]> select number, title from book;
+--------+--------------------------------------+
| number | title                                |
+--------+--------------------------------------+
|      1 | 3D 모델링 블렌더 2.8                 |
|      2 | 오토셋으로 구현하는 코드이그나이터 4 |
+--------+--------------------------------------+
2 rows in set (0.000 sec)

조건을 number 로 준 경우 2번에 해당하는 책의 제목만 바뀐 것을  확인하실 수가 있지요?

한단계 더 나아가서 테이블에서 책을 지우고 싶으실 경우도 있을 겁니다.
지우는건 UPDATE  명령문보다 더 수월합니다.
명령어가 다음과 같거든요. 매우 간결하지요.

DELETE from 테이블 where 조건절;

만일 앞에서 number 가 2번인 책을 지우고 싶으시다면 다음과 같이 입력하면 됩니다.

delete from book where number=2;

mysql 화면

MariaDB [library]> delete from book where number=2;
Query OK, 1 row affected (0.087 sec)

select 명령문으로 모든 책을 나열하면,

select number, title from book;

mysql 화면

MariaDB [library]> select number, title from book;
+--------+----------------------+
| number | title                |
+--------+----------------------+
|      1 | 3D 모델링 블렌더 2.8 |
+--------+----------------------+
1 row in set (0.006 sec)

책이 1권만 남아있는 것을 보실 수 있습니다.

mysql 의 기본중의 기본이자 가장 핵심이 되는 기능들을 그동안 살펴봤는데요.

create table, select, insert, update, delete

그 밖에도 mysql 에는 유용한 기능들이 많이 있습니다.

그 과정은 차차 알아보기로 하고 다음 챕터에서는 코드이그나이터에서
이 mysql 명령어들을 사용하는 법을 살펴보겠습니다.

오늘도 여기까지 읽어주셔서 감사합니다~