MySQL 기본 insert, auto_increment, select !
MySQL 기본 insert, auto_increment, select !
지난시간대에는 MySQL에 대한 아주 기본에 대하여 이야기를 해 보았습니다.
MySQL에 접속하고 디비를 선택하고 입력하고 보는 방법 말이죠.
그것도 아주 기본에 기본만 훓어 보았습니다.
오늘도 아주 쉬운 insert 및 select 에 대하여 이야기 할 예정입니다.
오늘이 바로 크리스마스 이브이거던요.
머리아픈 이야기는 별로 하고 싶지 않은 날입니다.
산타가 되어 어떤 선물을 해야 할지 고민하는 것만으로 머리가 아프거던요.
작년에는 고민만 하다가 패스하였는데 올해는 뭔가를 해 줘야 할 것 같아서요.
아이가 크기 시작하면서 이런 기념일들도 챙겨야 하더라구요.
insert 는 테이블에 데이타를 집어 넣는 명령입니다.
select 명령어는 테이블 안에 있는 데이타를 보는 명령입니다.
어떤 데이타들이 있는지 insert를 한 데이터들 확인을 하는 거죠.
우선 MySQL 서버에 접속을 해 봅니다.
오늘은 CMD 창을 통하지 않고 그냥 콘솔을 통해서 접속을 하였습니다.
명령어 치는 것도 귀잖은 날입니다.
명령어 한줄 안 치는 것만으로도 콘솔이 무쟈게 편하게 느껴진답니다.
바탕 화면에 꺼집에 내어 놓으면 실행시키기도 편하고 말이죠.
앞으로 어디까지 할지 모르지만 console를 사용하도록 하겠습니다.
우선 MySQL 서버에 접속을 한 수 test db 로 갈아탔습니다.
이곳에 제가 테스트를 했던 intest 라는 테이블이 있거던요.
저번 시간에는 "가나다" 한개의 값을 넣고 마무리 했습니다.
2번 레코드에 있는 "abcd efege" 와 3번 레코드의 "크리스마스 이스입니다." 는 포스팅 하기 전에 집어 넣어 봤습니다.
phpMyAdmin 프로그램만 사용하다가 컨솔에서 직접 입력을 하려 하니 오타들이 많이 나서 말이죠.
그럼 몇개의 값들을 입력해 보도록 하겠습니다.
우선 첫번째는 줄바꿈의 예를 보여 주려고 한 것인데 에러가 나 버렸네요.
에러 내용을 보니
" ERROR 1054 (42S22): Unknown column 'date' in 'field list' "
필드 리스트에 알수 없는 date 라는 칼럼이 있다고 합니다.
data 인데 제가 date라고 입력을 했네요.
해당 하는 칼럼이 없으니 값을 입력하지 못한 것입니다.
테이블에 대하여 한가지 더 설명을 드려야 할 것이 있네요.
바로 칼럼과 레코드입니다.
칼럼은 테이블에 어떤 것들이 들어갈지를 정해 놓은 것이고 레코드는 입력된 값들이라고 보면 된답니다.
위에서는 no라는 칼럼과 data라는 칼럼이 intest 라는 테이블을 이루고 있습니다.
그리고 바로 아래와 같이 5개의 레코드가 삽입되어 있어요.
| 1 | 가나다 | <-- 한개의 레코드
| 2 | abcd efege | <-- 한개의 레코드
| 3 | 크리스마스 이스입니다. | <-- 한개의 레코드
| 4 | null input data | <-- 한개의 레코드
| 5 | no 없이 인풋 | <-- 한개의 레코드
총 5개의 레코드가 입력되어 있네요.
insert into 에서 테이블 옆에 특정 칼럼(no)을 지정한 경우도 있고 그렇지 않은 경우도 있습니다.
그런데 select 를 해 보면 모든 레코드에 no 값이 들어가 있습니다.
이는 table을 만들때 no 값을 자동 증가값 ( auto_increment ) 으로 설정을 해 놓았기 때문입니다.
이런 칼럼을 하나 지정해 놓으면 이는 대체로 primary 키로 사용을 하기가 좋답니다.
지정을 안 해도 1씩 계속 증가가 되고 같은 값이 입력이 되려고 하면 에러를 뱉어 버리거던요.
그럼 좀 더 많은 값들을 입력 해 보도록 하겠습니다.
auto_increment 칼럼인 no값에 5다음에 6이 아닌 7을 강제 입력 해 보았습니다.
당연히 들어갔네요.
그럼 6이 비어 있는 상태에서 7이 입력되고 나면 그 다음 값은 뭔지 확인하기 위아혀 또한번 no값을 지정하지 않고 입력을 해 보았습니다.
그랬더니 8이 입력이 되었네요.
6이 비어 있지만 7다음은 8이기에 8이 자동 증가된 값으로 auto_increment 값으로 들어가는 것입니다.
프로그램을 하다 보면 NULL과 ''은 비슷해 보이지만 다르게 반응하는 경우가 많답니다.
왜냐면 확실히 다른 것이거던요.
느낌 그대로 NULL은 아무값도 정해지지 않았다는 뜻입니다.
하지만 '' 은 값이 없다는 것입니다.
PHP 프로그램을 하다보면 if( !$no ) 와 if ( $no != '' ) 비슷한 결과를 나타내지만 구분하여 사용하지 않으면 낭패를 보는 순간이 온답니다.
특히 숫자 0을 다룰때는 더욱 조심해야 해요.
no에 9번 레코드가 들어가 있지만 6번을 가진 레코드가 없기에 강제 6번을 집어 넣어 봅니다.
당연히 9번뒤에 6번이 들어가 있네요.
아무조건없이 select 를 하니까 6번이 가장 뒤쪽에 나오네요.
기본값이 테이터를 입력한 순서대로 나오기 때문입니다.
no 값을 순서대로 보려면 order by 라는 것을 사용합니다.
order by no, 또는 order by no asc 라고 하면 낮은 순서에서 높은 순서로 정렬이 됩니다.
반대로 높은 순서에서 낮은 순서로 정렬을 하고자 하면 order by no desc 라고 하면 되요.
이번에는 select 중에 where 절을 보도록 하겠습니다.
where 처음부터 잘못 입력하여 에러를 뱉었네요.
어디에서 자료를 가져올지 테이블명을 안 적었다는 것입니다.
where 절은 특정한 조건에 맞는 data를 뽑을때 사용을 한답니다.
자료들을 모아 놓은 테이블 안에는 현재 필요한 자료도 있고 지금 바로 내가 요구하는데 필요하지 않는 데이터들도 있거던요.
예를 들어 data 에 no로 시작하는 값들이 있는 것만 뽑아 오고자 할때는 위와 같이 해 주면 된답니다.
mysql> select * from intest where data like 'no%';
요렇게 말이죠.
그럼 data 칼럼에서 no로 시작하는 모든 레코드들을 불러 온답니다.
mysql> select * from intest where data like '%no%';
라고 하면 data 칼럼안에 no 라는 값이 있는 모든 데이터들은 다 불러 온답니다.
그리고 특정한 값이 일치하는 것을 뽑아 오고자 할때는 =를 사용한답니다.
mysql> select * from intest where no = '7';
이렇게 하면 no 값이 7번인 레코드값들을 다 불러 온다고 해요.
mysql> select data from intest where no = '7';
요렇게 하면 no 값이 7인 레코드의 data 값만 불러온답니다.
아래와 같이 말이죠.
+------------------+
| data |
+------------------+
| no 7 지정 인풋 |
+------------------+
1 row in set (0.00 sec)
select 를 하다 보면 재미 있는 결과들이 많답니다.
요즘은 MySQL에서도 SUB Query 를 지원을 해 주기 때문에 더욱 다양한 Query 문을 만들 수 있어요.
크리스마스 이브에 산타할아버지께 좋은 선물 많이 받으시고
멋지고 즐거운 크리스마스 되세요~
'APM' 카테고리의 다른 글
MySQL 데이터 update 및 칼럼추가! (0) | 2018.12.26 |
---|---|
mysql 기본 데이타베이스 생성 (0) | 2018.12.21 |