웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
4. 쿼리문
2004.12.11 20:34
아 몇달만입니까 -_-;; 다시 돌아왔습니다.
최근 모종의 작업에 빠져 있어서 PHP게시판은 쓸 엄두도 못냈네요.
그런 고로, 오늘은 쿼리문을 하도록 하겠습니다.(어째서?)
쿼리문이 뭐냐 하면...
mysql에 새로 만들거나(CREATE) 고치거나(UPDATE) 불러오거나(SELECT) 삽입하거나(INSERT) 삭제하는(DELETE) 이런 것이 바로 쿼리문이지요.
쉽게 말하자면 mysql_query 같은 주위에서 상당히 흔하게 볼수 있는(-_-) 것이지요
이 쿼리문을 사용하기 위해서는 몇가지 준비운동이 필요합니다.
mysql_connect로 DB에 연결을 하고 나서
2단계 준비운동 동작 mysql_select_db로 DB를 선택하는 겁니다.
<?
$connect=mysql_connect("호스트","아이디","비밀번호");
mysql_select_db("DB명");
?>
이렇게요...
create 쿼리문은 이런 식으로 사용한답니다.
mysql_query("create 테이블 (필드 타입)")
그러면 DB에 tidus라는 테이블을 하나 만들고, 그 속에 1, 2, 3이라는 필드, 그리고 각각 int(10) auto_increment not null, char(20) not null, text not null의 타입을 줘 봅시다.
그리고 no라는 고유의 값을 줍시다.
primary key는고유의 값을 뜻합니다.
mysql_query("create tidus (
1 int(10) auto_increment not null,
2 char(20) not null,
3 text not null,
primary key(no)");
자 그럼 여기서 제 강좌에 내용 때워먹으려고 항상 등장하는거 한번 넣어야죠.
'분석' 크크크...
int(10) auto_increment not null 부분을 한번 보죠.
int(10)은 10자리의 정수형 타입을 뜻합니다.
auto_increment는 별다른 값을 안줘도 자동으로 증가합니다. 1이었다면 2로, 5였다면 6으로...
not null은 비우지 말라는 겁니다. ''를 허용하지 않는단 거죠.
char(20) not null 부분을 한번 봅시다. char(20)은 1~20바이트를 저장할 수 있습니다.
varchar라는것이 있는데요, 이것은 char와 거의 흡사하지만 몇가지 다른 게 있습니다.
char는 1바이트를 저장하든 14바이트를 저장하든 20바이트를 저장하든 무조건 용량은 20바이트입니다.
varchar는 1바이트를 저장하면 1바이트를 차지하고, 20바이트를 저장하면 20바이트를 차지합니다.
그럼 varchar를 쓰는게 용량상 더 좋지......만!! char는 일정한 공간을 차지하고 있기 때문에 검색에 더 좋다고 합니다앗...(이건 주워들은말)
text not null 도 한번 봅시다.
text는 65535개의 문자를 저장할수 있습니다.
65535가 무슨 의미가 있냐..!!
요 숫자 많이 들어봤죠? 전 많이 들어봤는데 -_-;; 2의 16승입니다.
blob나 longtext를 이용해서 65535개 이상의 문자를 저장할 수도 있는데, 65535개 쓰는거 쉬운게 아니죠 -_-;;
primary key(no)는 뭘까요.
앞에서 설명했지만, primary key는 고유값을 뜻합니다.
물론 이거 없다고 동작 안하는건 아닙니다.
하지만 기본키(KEY)는 'no'라는걸 말합니다.
이제 UPDATE부분으로 갑시다. (흑흑 이제 5분의 2 ㅠㅠ)
UPDATE는 고치는걸 말합니다.
그러니까
mysql_query("UPDATE tidus SET 1=1 where 2=0");
하시면
2라는 값의 0의 1을 1로 변경한다는 겁니다.
mysql_query("UPDATE 테이블 SET 수정할거=수정할값 where 조건절");
식으로 쓰이죠.
SELECT는 DB내용을 불러옵니다.
가령
mysql_query("SELECT * from tidus");
를 하면 tidus테이블에 있는 모든 내용을 불러오라는겁니다.
mysql_query("SELECT 필요한값 from 테이블");
이죵.
자 다음으로 갑시다. (CREATE빼고 다 성의없냐 -_-^)
INSERT는 자료를 삽입하는 거죠.
mysql_query("INSERT INTO tidus (1, 2, 3) VALUES (1, 2, 3)";
정도로 대충 해놓읍시다.
tidus테이블안의 1,2,3이란 값에 1,2,3을 넣는다는 거죠.
만약 tidus (1, 2, 3)부분을 tidus (1, 3)으로 바꾸면
2부분의 값은 삽입하지 않습니다.
후후훗...
그리고 tidus (1, 2, 3)부분을 아예 없애버리면 모든 값을 순서대로 써야 됩니다.
DELETE는 자료를 삭제하는거죠.
mysql_query("DELETE from tidus where 1=2");
라고 하시면 tidus테이블의 1의 2라는 값을 지워버린다는 겁니다.
where이 없으면 어떻게 되는지 궁금하신가요?
어떻게 되긴요......................OTL이죠
자 기나긴 쿼리문 강좌가 끝났습니다.
CREATE빼고 다 성의없다고 생각중... OTL
어쨌든 12일 소요된 강좌입니다. 중간에 스타크래프트 하느라요.
최근 모종의 작업에 빠져 있어서 PHP게시판은 쓸 엄두도 못냈네요.
그런 고로, 오늘은 쿼리문을 하도록 하겠습니다.(어째서?)
쿼리문이 뭐냐 하면...
mysql에 새로 만들거나(CREATE) 고치거나(UPDATE) 불러오거나(SELECT) 삽입하거나(INSERT) 삭제하는(DELETE) 이런 것이 바로 쿼리문이지요.
쉽게 말하자면 mysql_query 같은 주위에서 상당히 흔하게 볼수 있는(-_-) 것이지요
이 쿼리문을 사용하기 위해서는 몇가지 준비운동이 필요합니다.
mysql_connect로 DB에 연결을 하고 나서
2단계 준비운동 동작 mysql_select_db로 DB를 선택하는 겁니다.
<?
$connect=mysql_connect("호스트","아이디","비밀번호");
mysql_select_db("DB명");
?>
이렇게요...
create 쿼리문은 이런 식으로 사용한답니다.
mysql_query("create 테이블 (필드 타입)")
그러면 DB에 tidus라는 테이블을 하나 만들고, 그 속에 1, 2, 3이라는 필드, 그리고 각각 int(10) auto_increment not null, char(20) not null, text not null의 타입을 줘 봅시다.
그리고 no라는 고유의 값을 줍시다.
primary key는고유의 값을 뜻합니다.
mysql_query("create tidus (
1 int(10) auto_increment not null,
2 char(20) not null,
3 text not null,
primary key(no)");
자 그럼 여기서 제 강좌에 내용 때워먹으려고 항상 등장하는거 한번 넣어야죠.
'분석' 크크크...
int(10) auto_increment not null 부분을 한번 보죠.
int(10)은 10자리의 정수형 타입을 뜻합니다.
auto_increment는 별다른 값을 안줘도 자동으로 증가합니다. 1이었다면 2로, 5였다면 6으로...
not null은 비우지 말라는 겁니다. ''를 허용하지 않는단 거죠.
char(20) not null 부분을 한번 봅시다. char(20)은 1~20바이트를 저장할 수 있습니다.
varchar라는것이 있는데요, 이것은 char와 거의 흡사하지만 몇가지 다른 게 있습니다.
char는 1바이트를 저장하든 14바이트를 저장하든 20바이트를 저장하든 무조건 용량은 20바이트입니다.
varchar는 1바이트를 저장하면 1바이트를 차지하고, 20바이트를 저장하면 20바이트를 차지합니다.
그럼 varchar를 쓰는게 용량상 더 좋지......만!! char는 일정한 공간을 차지하고 있기 때문에 검색에 더 좋다고 합니다앗...(이건 주워들은말)
text not null 도 한번 봅시다.
text는 65535개의 문자를 저장할수 있습니다.
65535가 무슨 의미가 있냐..!!
요 숫자 많이 들어봤죠? 전 많이 들어봤는데 -_-;; 2의 16승입니다.
blob나 longtext를 이용해서 65535개 이상의 문자를 저장할 수도 있는데, 65535개 쓰는거 쉬운게 아니죠 -_-;;
primary key(no)는 뭘까요.
앞에서 설명했지만, primary key는 고유값을 뜻합니다.
물론 이거 없다고 동작 안하는건 아닙니다.
하지만 기본키(KEY)는 'no'라는걸 말합니다.
이제 UPDATE부분으로 갑시다. (흑흑 이제 5분의 2 ㅠㅠ)
UPDATE는 고치는걸 말합니다.
그러니까
mysql_query("UPDATE tidus SET 1=1 where 2=0");
하시면
2라는 값의 0의 1을 1로 변경한다는 겁니다.
mysql_query("UPDATE 테이블 SET 수정할거=수정할값 where 조건절");
식으로 쓰이죠.
SELECT는 DB내용을 불러옵니다.
가령
mysql_query("SELECT * from tidus");
를 하면 tidus테이블에 있는 모든 내용을 불러오라는겁니다.
mysql_query("SELECT 필요한값 from 테이블");
이죵.
자 다음으로 갑시다. (CREATE빼고 다 성의없냐 -_-^)
INSERT는 자료를 삽입하는 거죠.
mysql_query("INSERT INTO tidus (1, 2, 3) VALUES (1, 2, 3)";
정도로 대충 해놓읍시다.
tidus테이블안의 1,2,3이란 값에 1,2,3을 넣는다는 거죠.
만약 tidus (1, 2, 3)부분을 tidus (1, 3)으로 바꾸면
2부분의 값은 삽입하지 않습니다.
후후훗...
그리고 tidus (1, 2, 3)부분을 아예 없애버리면 모든 값을 순서대로 써야 됩니다.
DELETE는 자료를 삭제하는거죠.
mysql_query("DELETE from tidus where 1=2");
라고 하시면 tidus테이블의 1의 2라는 값을 지워버린다는 겁니다.
where이 없으면 어떻게 되는지 궁금하신가요?
어떻게 되긴요......................OTL이죠
자 기나긴 쿼리문 강좌가 끝났습니다.
CREATE빼고 다 성의없다고 생각중... OTL
어쨌든 12일 소요된 강좌입니다. 중간에 스타크래프트 하느라요.
댓글 6
-
디카프료
2004.12.16 20:25
-
디카프료
2004.12.16 20:31
그리고 한가지 더 참고루요.. 쿼리문을 쓰실때.. 대 소문자 구분하지 않는 경우가 있는데요..
MYSQL 4.0 이후 버전부터는 항상 소문자 or 대문자로 일치 시켜서 쓰시는게 휠씬 속도가 빨라 집니다.
이 캐쉬는 select * from member_table 와 SELECT * from member_table 의 쿼리문을 전혀 다른것으로 인식하기 때문에, 위처럼 2번 쿼리를쓰게 되면, mysql db파일에 2번 엑세스 하여 2배로 시간이 걸리게 된다는 뜻입니다.
MYSQL은 DB에 항상 access 하지 않고, 캐쉬를 항상 하게 됩니다. 이때 대소문자 구분하여 똑같은 쿼리문이 들어올 경우엔, db에 접근 없이 캐쉬에 있는 데이타를 그대로 뿌려줍니다. 억세스 타이핑이 거의 0 에 가까운 놀라운 속도를 냅니다.
이 캐쉬된 자료를 db가 업데이트 되거나 insert 문을 사용하여 그 테이블이 변경되면, 케쉬 내용도 다 삭제되어 다시 db에 억세스하게 됩니다.
쿼리를 한 페이지에서 많이 쓸 일이 있을 경우엔, 가장 많은 값을 가져오는 쿼리문을 한번 쓰고, 그 쿼리를 그 페이지에서 필요할때 계속 사용하는것도, mysql의 캐쉬기능을 잘 사용하는 방법이라고 하겠습니다. -
디카프료
2004.12.16 20:33
제가 말주변이 없어서 제가 쓰고도. 다시 해석해서 읽어야 하는군요.. -_-;; 대충 해석해서 보시길 바랍니다. -
티다
2004.12.17 17:47
오옷 대소문자를 잘 써야되겠네요 ㅎㅎ -
QQQ
2004.12.28 20:59
char형도 사용하지만 varchar를 적극적으로 추천합니다. 개인적이지만 char는 별로에요. -
QQQ
2004.12.28 21:00
그리고 테이블 생성에서 mysql_query("create tidus ...이라고 적으셨는데..잘못적으셨군요.
create table table_name 이렇게 하셔야죠~~
제목 | 글쓴이 | 날짜 |
---|---|---|
나만의 미니홈 만들기 ㅡ 간단한 최근글 불러오기 [6] | 예뜨락 | 2005.05.09 |
나만의 미니홈 만들기 ㅡ password.php [8] | 예뜨락 | 2005.05.07 |
winamp 방송정보 읽어오기 심각한 문제해결 | 이승원 | 2005.05.04 |
[초보]아주쉬운 PHP로 그림에 글자 입히기 [11] | 김규백 | 2005.04.04 |
DB에서 각종 기념일을 내용,순서순으로 뽑아 정렬하기.. | 박순영 | 2005.03.17 |
ASC(순차), DESC(역순) 정렬하기. [4] | Xian | 2005.03.03 |
사용자 등록/DB생성/테이블 생성 [3] | QQQ | 2005.03.03 |
[날짜 구하는함수업]내일 날짜와 1년 후 년도 구하기 [8] | ssukai | 2005.02.24 |
자바스크립트 단축키 지정을 쉽게하자. [1] | 권태수 | 2005.02.14 |
내 컴퓨터가 표현할 수 있는 문자들. [6] | 최호성 | 2005.01.30 |
게시판 테이블 생성을 쉽게하자. [2] | QQQ | 2005.01.29 |
날짜 구하는 함수.. ... [3] | 김명현 | 2005.01.24 |
우리가 사랑한지 몇일째 날짜세주는 PHP 소스 [12] | 레드 | 2005.01.16 |
PHP 왕초보 입문기(총괄) [4] | 하나둘 | 2005.01.15 |
퍼미션을 보기좋게 구하자! [4] | 플로렐라 | 2005.01.03 |
나만의 미니홈 만들기 ㅡ delete.php 파일 [2] | 예뜨락 | 2005.01.03 |
"를 그냥 사용하기 [3] | 추천대화상대 | 2005.01.02 |
IE 에서도 투명 알파값이 적용된 PNG 이미지를 맘껏 활용하자! [8] | THE PAPER™ | 2004.12.27 |
4. 쿼리문 [6] | 티다 | 2004.12.11 |
'참조'에 관한 간단한 예제 | 플로렐라 | 2004.12.09 |
char 는 정확하게 지정한 바이트 만큼 항상 데이타를 사용하게 됩니다.
따라서 일정한 데이타량으로 채워지는 값에 유리하게 되죠. (주민등록번호는 항상 13자리로 일정하므로 char이 제격입니다.
이에 반해 varchar(20) 은 1부터 20까지 유동성있는 데이타를 넣을때 좋습니다. 예를 들어 자기소개는 50글자 이내로 제한 하고 싶을때. varchar(50)으로 하면 1글자가 들어가면 1byte만 데이타를 차지하니까 데이타 저장공간을 더 효율적으로 사용하기에 char보다 훨씬 효율성이 높습니다.
대신 varchar 는 스트링의 길이를 저장하는 값을 내부적으로 하나더 가지고 있기 때문에 같은 50 byte 를 지정해 준다면 varchar 은 문자열의 길이를 저장하는 4byte정도의 저장공간을 더 먹기 때문에 일정값을 쓸때는 char이 효율적이겠죠.. 이 4byte는 데이타 베이스 마다 다 다릅니다.