중고차 매입 이야기

MySQL 데이터 update 및 칼럼추가!


크리스마스가 드디어 지나가 버렸습니다.

이제는 신정이 기다리고 있네요.

31일 휴가를 내신분들은 이제 3일만 일하면 4일을 쉴 수가 있습니다.


오늘은 MySQL 테이터 update 및 칼럼추가하는 방법에 대하여 간단하게 설명해 보도록 하겠습니다.

아주 간단하게 말이죠.



오늘도 APMSetup에서 제공하는 MySQL 콘솔로 접속을 하였습니다.

접속후에 test 라는 데이터베이스로 이동 후 instest 라는 테이블에 어떤 내용들이 있는지 확인을 해 보았습니다.

지난 크리스마스 이브날 넣어 놓은 데이터들이 잘 들어 있네요.

우선 1번 레코드에 있는 값이 맘에 안 드네요.

그냥 "가나다" 보다는 테스트 하는 내용으로 수정을 해 보아야 겠습니다.

이렇게 특정한 레코드에 있는 값을 수정하고자 할때는 update 라는 명령어를 사용합니다.

사용법은 아주 간단합니다.


"update 테이블명 set 칼럼이름='업데이트하고자 하는 값' where 해당 조건절 " 


어려운거 없죠.

여기서 가장 어렵게 느끼고 중요하게 생각하셔야 하는 것은 해당 조건절이랍니다.

해당 조건절을 잘못 입력하거나 빠트리면 식겁을 하게 되는 수가 있어요.


우선 상단의 테이블에서 "가나다"라는 값을 "update test" 라는 값으로 변경을 해 보도록 하겠습니다.


mysql> update intest set data='update test' where no = 1;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0


쉽죠잉~~.


해당 조건절에 " where no=1" 을 줌으로써

no는 primary key 로 이 테이블에서는 고유한 값이므로 1번 레코드의 data 값 하나만 변경되었습니다.

하단에 select 한 값에서 1번 레코드의 data 값이 변경 된 것을 확인 할 수가 있습니다.



이번에 할 작업은 칼럼추가입니다.  

바로 add column 인데요.

테이블을 한번 만들어 사용하다 보면 추가로 담고 싶은 내용이 생깁니다.

또는 필요없어진 칼럼을 지우고 싶은 경우도 생기고 말이죠.

우선 칼럼을 추가하고자 하는 경우는 "Alter Table " 이라는 명령어를 사용한답니다.

형식은 아래와 같습니다.

" alter table `테이블 이름` ADD `추가하고자 하는 칼럼명` 칼럼형태 기본값 "


이것은 쬐금 어렵죠.

phpMyAdmin 이라는 프로그램으로 하면 간단한데 말이죠.

그래도 기본은 알아 두시는 것이 좋으니까 한번 보시는게 좋겠어요.

alter table은 말 그대로 테이블의 속성이 달라지는 것입니다.

칼럼을 추가하고 삭제하고 할 때 사용을 할 수가 있어요.


위 테이블에서 데이터를 입력한 날짜를 알고 싶은데 날짜를 입력하는 칼럼이 없네요.

그래서 날짜를 입력하고자 하는 regdate라는 칼럼을 추가하였습니다.

mysql> ALTER TABLE `intest` ADD `regdate` DATETIME NOT NULL ;


regdate 의 칼럼형태는 datetime 이며 null 값이 안 되도록 설정하였습니다.

그리고는 칼럼이 추가가 잘 되었는지 확인을 해 봐야겠죠.

select 를 하여도 어떤 칼럼이 있는지 확인이 가능하지만 칼럼특성까지 확인을 해 보기 위하여 

mysql> SHOW COLUMNS FROM `intest` ;

명령어를 사용하였습니다.


show 명령어는 어디에서 보셨죠?

넵 맞습니다. 

바로 현재 사용하고 있는 디비안에 어떤 테이블들이 있는지 확인할때 

"show tables;"

를 사용하였습니다.

테이블 안에 어떤 칼럼으로 이루어져 있는지 확인을 할 때도 똑같은 형태로 사용을 하네요.

단지 column 은 테이블안에서 존재하는 것이므로 어떤 테이블에 있는 칼럼을 볼 것인지만 추가 되었답니다.

바로 " from `intest' " 이 부분이죠.


이제 날짜를 입력하는 칼럼을 만들었으니 날짜를 입력 해보도록 하겠습니다.


mysql> insert into intest (data, regdate ) values ('25일 입력',now());

Query OK, 1 row affected (0.00 sec)


intest 테이블 안에 data 칼럼에는 "25일 입력" 이란 값은 넣고 regdate 라는 곳에는 현재값을 넣어라는 것입니다.

값을 넣었으니 select 로 확인을 해 보도록 하겠습니다.



2018년 12월 26일 10시 14분 18초에 입력을 하였네요.

지금 테스트하면서 바로 포스팅을 하고 있답니다.

따끈따끈한 포스팅이네요.^^



날짜에는 꼭 now() 만 사용을 할 수가 있는 것은 아니랍니다.

특정한 날짜도 입력을 할 수가 있어요.

mysql> insert into intest (data, regdate ) values ('24일 입력','2018-12-24');

Query OK, 1 row affected (0.01 sec)

형태로 특정한 날짜를 지정하거나 시간까지 설정하여 입력을 할 수가 있답니다.


또는 curdate() 등의 함수도 있답니다.

now()와  curdate() 는 동일하게 보이나 엄청난 결과 차이가 있답니다.

바로 시간까지 입력하는지의 여부인데요.

현재의 now() = '2018-12-26 10:14:18' 이지만 curdate() = '2018-12-26 00:00:00' 이랍니다.


그리고 마지막으로 초보자일때 했던 실수인데요.

프로그램을 한지 몇년이 지났지만 바쁠때 할 수도 있는 실수랍니다.

바로 업데이트를 하면서 조건을 안 주는 경우인데요.

특정한 조건을 주지 않으면 그 테이블의 모든 지정 칼럼의 값들이 해당 데이터로 변경되어 버린답니다.


mysql> update intest set data = '24일 12시 입력',regdate='2018-12-24 12:00:00'

    -> ;

Query OK, 11 rows affected (0.01 sec)

Rows matched: 11  Changed: 11  Warnings: 0


처음에 세미콜론 입력하는 것도 깜빡하여 그 다음줄에서 입력을 하였네요.

위 명령어에는 조건절이 없다 보니 instest 안에 있는 모든 data 와 regdate 값이 변경 되어 버렸습니다.

이렇게 되어 버리면 실전이라면 백업한 자료가 없다면 정말 식겁한답니다.

더군다나 롤백 기능이 없는 경우라면 완전 좌절 모드를 경험하셔야 하니

update와 delete 는 항상 신중하셔야 한답니다.



'APM' 카테고리의 다른 글

MySQL 기본 insert, auto_increment, select !  (0) 2018.12.24
mysql 기본 데이타베이스 생성  (0) 2018.12.21