• 주요 쿼리문 모음
  • Zappy (IP: *.172.219.238)
    조회 수: 41965, 2006-05-03 01:58:43(2006-05-03)
  • Query

    SELECT 문 : 테이블로부터 행 검색
    INSERT 문 : 테이블에 행 추가
    UPDATE 문 : 테이블 내의 기존 행 변경
    DELETE 문 : 테이블에서 행 제거

    1. 테이블 생성
    ex)create table mail_list (
    id int Not NULL default '0' auto_increment ,
    email varchar(255) not null,
    name tinytext not null,
    primary key(id)
    );

    2. 테이블 삭제(주의: 내용도 모두 삭제됩니다)
    ex)drop table mail_list;

    3. 테이블 Datatype 변경
    ex)alter table mail_list change email email text;
    (mail_list라는 테이블의 email이라는 컬럼 이름을 email, datatype을 text로 변경합니다.)

    4. 테이블 컬럼 추가
    ex)alter table mail_list add address varchar(50);
    (address라는 컬럼을 추가하는거죠~)

    5. 테이블 칼럼 삭제
    ex)alter table mail_list drop address;
    (address라는 컬럼을 삭제합니다)

    6. 레코드 값 변경
    ex)update mail_list set email="theocean@air.knu.ac.kr"
    where name = "theocean";

    7. 레코드 값 입력
    ex)insert into mail_list values("", "theocean@air.knu.ac.kr", "theocean");

    8. 레코드 값 삭제
    ex)delete from mail_list where name="theocean";

    9. 데이터 베이스 생성(관리자 용)
    ex)create database theocean;

    10. SELECT문 사용하기
    ㄱ. 레코드의 갯수(열의 갯수 구하기)
    ex)select count(*) from mail_list;
    ㄴ. 오름차순(order by)으로 정리
    ex)select * from mail_list order by name;
    ㄷ. e를 포함하는 이름 검색
    ex)select * from mail_list where name like "%e%";
    ㄹ. 정확하게 5개의 글자로 이루어진 이름에 대해서 검색
    ex) select * from mail_list where name like "_____";

    [root@suhoi bin]# ./mysqldump -uroot -p -A > all.sql
    Enter password:


    6. sample 데이터베이스 백업하기

    sample 데이터베이스를 백업해 보도록 하겠습니다. 셸 프롬트로에서 다음과 같이 입력합니다.
    $ mysqldump -u root -p sample > sample_backup.sql
    Enter password:
    $


    백업된 파일인 sample_backup.sql 파일을 볼 수 있을 것입니다.


    7. sample 데이터베이스 복구하기

    백업 받은 sample 데이터베이스를 복구해 보도록 하겠습니다. 셸 프롬트로에서 다음과 같이 입력합니다.
    $ mysql -u root -p sample < sample_backup.sql
    Enter password:
    ********

    $


    8. 모든 데이터베이스 백업하기

    mysql의 모든 데이터베이스를 백업할 수 있습니다. 셸 프롬트로에서 다음과 같이 입력합니다.
    $ mysqldump -a -u root -p > db_all_backup.sql
    Enter password:




    1. MySQL 설치 후 반드시 root 패스워드 먼저 설정 ! xxx가 패스워드
    anonymous 사용자는 지우기

    mysql> update user set password=password('xxx') where user='root';

    mysql> delete from user where user='';

    mysql> flush privileges;

    2. mysql 시스템 데이터베이스 보안..
    mysql 왕초 데이터베이스에서 user 테이블

    user 테이블에는 host,user,password 만 설정 되어 있어야 하고, 나머지는 N 이어야 함.


    3. 에러 로그 파일 보기

    hostname.err 파일에 에러 로그 기록 됨.!
    윈도우는 mysql.err 파일

    4. 사용자 ID와 비교시에..
    어플리케이션에서 로그인 시에 사용자 ID와 비교시, PHP에서 addslashes() 사용 !

    또는 mysql에서 quote() 사용...


    $user=addslashes($user);

    select * from users where user='$user';

    C언어 라면 mysql_real_escape_string() 사용...!


    ====================================================


    좋은 예
    include($lib_dir . "functions.inc");

    잘못된 습관
    include($page);


    주의할 함수

    readfile
    fopen
    file
    include
    require


    이유 list.php?page=/etc/passwd

    list.php
    <?
    include($page);
    ?>

    ------------------------------------------
    select 쿼리 시에 addslashes() 반드시 사용 !


    SELECT * FROM users WHERE username='$username' AND password='$password';

    아래 처럼 !!
    $username=addslashes($username);
    $password=addslashes($password);
    SELECT * FROM users WHERE username='$username' AND password='$password';

    ------------------------------------------
    register_globals = off 반드시 off

    제가 또 한번 근 1주간 삽질한 내용입니다.
    아마도 리눅스를 처음까셨거나, mysql을 rpm등으로 처음 설치하셨던 분들중에서
    이런 어려움을 느끼신 분들이 많으실 겁니다.

    리눅스로 텔넷 접속한 콘솔상에서는 mysql -uroot -p mysql 하면
    접속이 잘 되는데, php로
    <?
    $board="board1";

    $host="localhost";
    $user="tood";
    $password="toodnet";
    $dbname="tood";

    $db=mysql_connect($host,$user,$password);
    mysql_select_db($dbname);
    ?>

    이런식으로 접속하면 >/var/lib/mysql/mysql.sock 어쩌구 저쩌구 (111) 어쩌구 저쩌구..
    머 이런 에러 나면서 접속 안되신 분들 많으실 겁니다.

    혹은, 콘솔상에서 접속을 해도 위와같은 에러메시지가 뜨면서 접속이 안되는 경우도 많으셨으리라 봅니다.
    저도 아무문제 없이 리눅스깔면서 풀패키지로 APM을 설치했음에도 불구하고 위와같은 X같은 경우가 발생하
    더군요..

    그래서 역시 이곳(투드넷)에서 답을 찾아 보았습니다.....
    phpschool에서도 찾아 보았습니다.
    피에이치피스쿨 같은 경우에는 게시판 마다 약 300~500여개의 질문과 답변들이 있더군여..
    이 문제로 많은 분들이 어려워하시더군요...

    구런데 거의 대부분이 명확한 해결책을 내려주질 못하더라구염.....

    그 300~500여개의 질답 게시물을 전 다 읽어 봤습니다....-_-;;;

    거의 대부분이 소켓에러에 대한 내용의 답으로 이렇게 답변을 해 놓았더군여..

    "mysql 데몬이 떠 있지 않은듯 합니다...."

    표현은 달라도 거의 위의 대답이었습니다.
    하지만
    ps -ef | grep mysql 하면 생생히 살아있는 데몬들이 주욱 뜹니다..

    환장할 일이져....

    저두 꽁수로 기본 폴더인 /var/lib/mysql 디렉토리 아래에 mysql.sock 파일을 넣지 않고
    safe_mysqld 파일을 편집해서 /tmp폴더에 쇽파일을 억지로 생성시켜 위의 php 환경파일을
    이렇게 설정해서 사용했습니다.

    <?
    $board="board1";

    $host="localhost:/tmp/mysql.sock";
    $user="tood";
    $password="toodnet";
    $dbname="tood";

    $db=mysql_connect($host,$user,$password);
    mysql_select_db($dbname);
    ?>

    이렇게 하면 쇽파일의 위치를 강제로 지정해 줄 수 있거등여...
    결국  php로 디비에 접속은 성공했는데 이제는 콘솔에서 접속이 안되더군여.....-_-;;;;;

    결국 1주일 여간의 삽질끝에 명쾌한 답을 찾았습니다.

    사설이 넘 길었군여.. 제 글을 읽으시고 저와 같은 증상의 여러분들이 보시고 도움이 되시라고.....^^;;

    ######################### 명쾌한 해답 #################################

    killall mysqld

    chmod 755 -R /var/lib/mysql

    chown mysql.mysql -R /var/lib/mysql

    safe_mysqld --language=korean &

    ########################################################################

    이상임다.
    모든 해결책들이 알고보면 너무 간단한 문제에서 출발하죠.....^^;;
    디렉토리 퍼미션 문제임다.....

    mysql을 root 권한으로 돌리는건 보안차원에서 위험하다고들 하더군염.....^^;;
    그래서 기본으로 mysql유저의 권한으로 돌리는데, mysql.sock파일이 있는 디렉토리
    의 권한에 문제가 있는 경우가 예상외로 많더군요.
    물론 저도 그래서 1주일여간 삽질했구염.....-_-;;

    위의 명령들은, 일단 마이에스큐엘 데몬 죽이고,
    쇽파일이 위치한 디렉토리의 퍼미션을 755로 변경하고(쓰기,읽기 머 다 되는 퍼미션인거 아시져? ^^;;)
    그 디렉토리의 소유권또한 유저 mysql로 변경하고(그룹도 같이..^^;;)
    그리고 다시 마이에스큐엘 시작하면 된다는 소립니다...

    정말 힘들게 찾았습니다.....

    이전에 제가 도움을 많이 받은 사이트 투드넷이라 여기 여러분들에게도 작은 도움이나마 될까해서
    허접팁 남겨봅니다..............^^;;

댓글 0

번호 제목 닉네임 조회  등록일 
5 Zappy 47754 2006-05-03
4 Zappy 86208 2006-05-03
3 Zappy 9652 2006-05-03
2 Zappy 8590 2006-05-03
Zappy 41965 2006-05-03
XE Login