'DB/MySQL'에 해당되는 글 22건

  1. 2010.07.02 [MySql] JOIN 문
  2. 2010.06.29 GROUP BY
  3. 2010.06.28 group by, having, inner join
  4. 2010.06.17 에러 코드 모음
  5. 2010.05.31 mysql 접속 여부 확인 및 에러
  6. 2010.05.31 mysql_fetch 계열 함수
  7. 2010.05.10 php mysql 연동 함수
  8. 2010.05.10 mysql_affected_rows, mysql_num_rows 차이
  9. 2010.04.30 MySQL 데이터 타입
  10. 2010.04.30 MySQL 날짜 / 시간 데이터 타입

[MySql] JOIN 문

DB/MySQL 2010. 7. 2. 15:18
[MySql] JOIN 문

【형식】

table_reference, table_reference

table_reference [CROSS] JOIN table_reference

table_reference INNER JOIN table_reference join_condition

table_reference STRAIGHT_JOIN table_reference

table_reference LEFT [OUTER] JOIN table_reference join_condition

table_reference LEFT [OUTER] JOIN table_reference

table_reference NATURAL [LEFT [OUTER]] JOIN table_reference

{ OJ table_reference LEFT OUTER JOIN table_reference ON conditional_expr }

table_reference RIGHT [OUTER] JOIN table_reference join_condition

table_reference RIGHT [OUTER] JOIN table_reference

table_reference NATURAL [RIGHT [OUTER]] JOIN table_reference



여기서

table_reference는 다음과 같이 정의된다.

table_name [[AS] alias] [USE INDEX (key_list)] [IGNORE INDEX (key_list)]

또한 join_condition의 정의는 다음과 같다.

    ON conditional_expr |

    USING (column_list)



 · LEFT OUTER JOIN 문은 ODBC와 호환하기 위해 쓰인다.

 · 테이블 참조는 tbl_name AS  alias_name이나 tbl_name alias_name처럼 사용해서 별명

    을 붙일 수 있다.


mysql> select t1.name, t2.salary from employee AS t1, info AS t2

    -> where t1.name=t2.name;


 · ON 조건은 WHERE 절에서 사용되는 형식과 같은 조건이다.

 · LEFT JOIN에서 ON이나 USING 부분으로  오른쪽 테이블과 일치하는 레코드가 없으면,

    오른쪽 테이블의 모든 컬럼이 담긴 row에 NULL을 넣는다. 그러므로 다른 테이블에서 카

    운터파트가 없는 레코드를 찾는데 쓰인다.


        mysql> SELECT table1.* FROM table1

             ->        LEFT JOIN table2 ON table1.id=table2.id

             ->        WHERE table2.id IS NULL;


 · USING (column_list) 절은 두 테이블에 꼭 존재하는 컬럼 목록의 이름이다.


다음 두 표현은 같다.

        A LEFT JOIN B USING (C1,C2,C3,...)

        A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3,...


 · 두 테이블의 NATURAL  [LEFT] JOIN는 INNER  JOIN 또는 USING  절을 사용한 LEFT

    JOIN과 같은 의미이다.

 · INNER JOIN이나 ,(comma)는 같은 의미이다.

 · RIGHT JOIN는 LEFT JOIN과 유사하다.

 · STRAIGHT_JOIN은 JOIN과 같지만, 왼쪽 테이블을 오른쪽 테이블보다 먼저 읽히는 점

    이 다르다.

 · USE INDEX (key_list)를 사용하면, 여러 인덱스 중에서 오직  하나의 인덱스를 지정하

    는 것이고, IGNORE INDEX (key_list)는 지정한 인덱스를 사용하지 않게 한다. FORCE

    INDEX는 USE INDEX (key_list)와 같지만, 테이블 스캔기능이 더 있다.

     USE/IGNORE KEY와 USE/IGNORE INDEX는 동일한 의미이다.


예를 들어,

        mysql> SELECT * FROM table1,table2 WHERE table1.id=table2.id;

        mysql> SELECT * FROM table1 LEFT JOIN table2

            ->         ON table1.id=table2.id;

        mysql> SELECT * FROM table1 LEFT JOIN table2 USING (id);

        mysql> SELECT * FROM table1 LEFT JOIN table2

            ->         ON table1.id=table2.id LEFT JOIN table3

            ->         ON table2.id=table3.id;

        mysql> SELECT * FROM table1 USE INDEX (key1,key2)

            ->         WHERE key1=1 AND key2=2 AND key3=3;

        mysql> SELECT * FROM table1 IGNORE INDEX (key3)

            ->         WHERE key1=1 AND key2=2 AND key3=3;




JOIN 문


둘 이상의 테이블의 레코드 조합으로 하나의 테이블 레코드인 것처럼  찾는 것을 join이라

한다. 이해를 돕기 위하여 다음 테이블을 가정한다.


mysql> select * from test1;

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

| a      | b    |

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

| 금강   |    1 |

| 한강   |    2 |

| 대동강 |    3 |

| 두만강 |    4 |

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

4 rows in set (0.00 sec)


mysql> select * from test2;

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

| b    | d      |

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

|    1 | 백두산 |

|    2 | 금강산 |

|    5 | 지리산 |

|    6 | 한라산 |

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

4 rows in set (0.00 sec)


mysql>


1) FULL JOIN

FULL JOIN은 각 테이블의 레코드 수를 곱한 만큼의 레코드를 출력하며 이를 Cartesian

product라 한다.

from test1, test2에서 사용한 컴마(,)를 join 연산자로 생각하면 된다.

컴마 대신 join이나 cross join을 사용해도 같은 결과를 보인다.

【예제】

mysql> select * from test1,test2;

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

| a      | b    | b    | d      |

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

| 금강   |    1 |    1 | 백두산 |

| 한강   |    2 |    1 | 백두산 |

| 대동강 |    3 |    1 | 백두산 |

| 두만강 |    4 |    1 | 백두산 |

| 금강   |    1 |    2 | 금강산 |

| 한강   |    2 |    2 | 금강산 |

| 대동강 |    3 |    2 | 금강산 |

| 두만강 |    4 |    2 | 금강산 |

| 금강   |    1 |    5 | 지리산 |

| 한강   |    2 |    5 | 지리산 |

| 대동강 |    3 |    5 | 지리산 |

| 두만강 |    4 |    5 | 지리산 |

| 금강   |    1 |    6 | 한라산 |

| 한강   |    2 |    6 | 한라산 |

| 대동강 |    3 |    6 | 한라산 |

| 두만강 |    4 |    6 | 한라산 |

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

16 rows in set (0.00 sec)


mysql> select * from test1 join test2;


mysql> select * from test1 cross join test2;


mysql>


2) STRAIGHT_JOIN

 straight_join은 컬럼의 순서를 from 절에 나오는 테이블의 순서대로 출력하는 join이다.

【예제】

mysql> select * from test1,test2;


mysql> select * from test2,test1;


mysql> select * from test1 straight_join test2;


mysql> select * from test2 straight_join test1;

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

| b    | d      | a      | b    |

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

|    1 | 백두산 | 금강   |    1 |

|    2 | 금강산 | 금강   |    1 |

|    5 | 지리산 | 금강   |    1 |

|    6 | 한라산 | 금강   |    1 |

|    1 | 백두산 | 한강   |    2 |

|    2 | 금강산 | 한강   |    2 |

|    5 | 지리산 | 한강   |    2 |

|    6 | 한라산 | 한강   |    2 |

|    1 | 백두산 | 대동강 |    3 |

|    2 | 금강산 | 대동강 |    3 |

|    5 | 지리산 | 대동강 |    3 |

|    6 | 한라산 | 대동강 |    3 |

|    1 | 백두산 | 두만강 |    4 |

|    2 | 금강산 | 두만강 |    4 |

|    5 | 지리산 | 두만강 |    4 |

|    6 | 한라산 | 두만강 |    4 |

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

16 rows in set (0.01 sec)


mysql>


3) Theta JOIN

 full join에 where 절로 조건을 제시할 경우 이를 Theta join이라 한다.

예를 들어, test1과 test2에 b의 값이 동일한 레코드를 선택하는 경우는 다음과 같다.

【예제】

mysql> select * from test1, test2 where test1.b=test2.b;

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

| a    | b    | b    | d      |

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

| 금강 |    1 |    1 | 백두산 |

| 한강 |    2 |    2 | 금강산 |

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

2 rows in set (0.00 sec)


mysql>


4) INNER JOIN

Inner join를 이용하여 앞 예제와 동일한 결과를 얻을 수 있는 예는 다음과 같다. 

이는 select 문에서 join에 사용할 컬럼명을 ON test1.b=test2.b와 같이 직접 지정해도 된다.

【예제】

mysql> select * from test1 inner join test2 using(b);

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

| a    | b    | b    | d      |

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

| 금강 |    1 |    1 | 백두산 |

| 한강 |    2 |    2 | 금강산 |

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

2 rows in set (0.00 sec)


mysql> select * from test1 inner join test2 on test1.b=test2.b;

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

| a    | b    | b    | d      |

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

| 금강 |    1 |    1 | 백두산 |

| 한강 |    2 |    2 | 금강산 |

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

2 rows in set (0.00 sec)


mysql> select * from test1, test2 where test1.b=test2.b;


mysql>


5) NATURAL JOIN

두 테이블에 같은 이름을 가진 컬럼이 있고, 이 컬럼을 기준으로 join을 하려면 natural join

을 사용한다.

【예제】

mysql> select * from test1 natural join test2;

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

| a    | b    | b    | d      |

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

| 금강 |    1 |    1 | 백두산 |

| 한강 |    2 |    2 | 금강산 |

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

2 rows in set (0.00 sec)


mysql>


6) LEFT OUTER JOIN

test1에는 4개의 레코드가 있는데 where test1.b=test2.b라는 조건 때문에 두 개의 레코드 밖

에 선택되지 않았다. 이때 test2의 b에 test1의 b 값이 존재하지  않더라도 test1의 레코드를

모두 가져오려면 left outer join을 사용한다. left outer join에서 outer는 옵션이므로  생략해

도 된다.

【예제】

mysql> select * from test1 left join test2 using(b);

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

| a      | b    | b    | d      |

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

| 금강   |    1 |    1 | 백두산 |

| 한강   |    2 |    2 | 금강산 |

| 대동강 |    3 | NULL | NULL   |

| 두만강 |    4 | NULL | NULL   |

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

4 rows in set (0.00 sec)


mysql> select * from test1 left join test2 on test1.b=test2.b;

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

| a      | b    | b    | d      |

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

| 금강   |    1 |    1 | 백두산 |

| 한강   |    2 |    2 | 금강산 |

| 대동강 |    3 | NULL | NULL   |

| 두만강 |    4 | NULL | NULL   |

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

4 rows in set (0.01 sec)


mysql>


7) RIGHT OUTER JOIN

 test2에는 4개의 레코드가 있는데, where test1.b=test2.b라는 조건 때문에 2개의 레코드 밖

에 선택되지 않는다. 이때 test1의  b에 test2의 b값이 존재하지 않더라도  test2의 레코드를

모두 가져오려면 right outer join을 사용한다. right outer join에서 outer는 옵션이므로 생략

할 수 있다.

【예제】

mysql> select * from test1 right join test2 on test1.b=test2.b;

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

| a    | b    | b    | d      |

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

| 금강 |    1 |    1 | 백두산 |

| 한강 |    2 |    2 | 금강산 |

| NULL | NULL |    5 | 지리산 |

| NULL | NULL |    6 | 한라산 |

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

4 rows in set (0.00 sec)


mysql>


출처 - http://blog.naver.com/tyboss?Redirect=Log&logNo=70008713640

'DB > MySQL' 카테고리의 다른 글

MySQL 날짜 관련 함수  (0) 2010.09.06
LIKE, BETWEEN, IN  (0) 2010.07.08
GROUP BY  (0) 2010.06.29
group by, having, inner join  (0) 2010.06.28
에러 코드 모음  (0) 2010.06.17
:

GROUP BY

DB/MySQL 2010. 6. 29. 13:37

GROUP BY 절은 내가 하고 있는 업무에서 자주 쓰게 되는
문법이다.
제대로 쓰려면, 조금씩 연구를 해야하는 법!

지금부터 GROUP BY에 대해 알아보자.

그리고,
GROUP BY 와 함께 사용하는
HAVING은 무엇이고, 어떠한 시점으로 작동하는 지 살펴보도록 하자.


**** [ SAMPLE CODE ] *****************************************

mysql> select * from A
+------+--------+--------+
| id   | value1 | value2 |
+------+--------+--------+
|    1 |     10 | kkk    |
|    2 |     30 | mmm    |
|    3 |     20 | hhh    |
|    4 |     10 | jjj    |
|    5 |     30 | kkk    |
|    6 |     10 | kkk    |
+------+--------+--------+
6 rows in set (0.00 sec)

설명을 위해 임시로 테이블 a를 생성하여,
GROUP BY 값을 볼 수 있도록,
중복된 값을 넣어보았다.

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

mysql> SELECT *
    -> FROM A a
    -> GROUP BY a.value1, a.value2;
+------+--------+--------+
| id   | value1 | value2 |
+------+--------+--------+
|    4 |     10 | jjj    |
|    1 |     10 | kkk    |
|    3 |     20 | hhh    |
|    5 |     30 | kkk    |
|    2 |     30 | mmm    |
+------+--------+--------+
5 rows in set (0.00 sec)

단순히 HAVING절의 삽입없이,
GROUP BY를 사용한 경우이다.
이 예에서 볼 수 있듯이,
GROUP BY는 내부적인 정렬(sorting)이 이루어지며,
중복된 값을 배제한다.

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


mysql> SELECT *
    -> FROM A a
    -> GROUP BY a.value1, a.value2
    -> HAVING count(*) > 1
    -> ;
+------+--------+--------+
| id   | value1 | value2 |
+------+--------+--------+
|    1 |     10 | kkk    |
+------+--------+--------+
1 row in set (0.01 sec)

HAVING은 GROUP BY에 부여하는 조건을 명시한다.


위의 예는 HAVING을 사용하여 중복된 ROW를 찾는 예이다.

그런데 여기서 의문점이 제기된다. 
'도대체 HAVING이 적용되는 시점은 언제일까?'

테이블 A에서 count(*)>1 인 녀석을 먼저 찾고 GROUP BY가 적용될까?
아니면, GROUP BY를 먼저 적용하고 난 결과물 중 count(*)>1 인 녀석을 찾는 것일까?

단순히 위의 결과로만 본다면, 어느 것이 먼저 적용되는 지 알기 힘들다.

****************************************************************

골머리 싸잡고 혼자 고민하다,
결국 내가 아는 고수분의 도움을 얻어,
내부적으로 발생하는 순서를 알아내었다.

**** [ HAVING의 타이밍 ] *****************************************

+------+--------+--------+
value1           | value2    |  row_number 
━┳━ 
10  ━┳━ jjj ━┳━━ 4     
   ┃            ┃
   ┃            ┗━ 
kkk  ┳━━ 
1
   ┃                         ┃
   ┃                         ┗━━ 
6
   ┃
   ┣━ 
20  ━━━ hhh ━━━ 
3
   ┃
   ┃
   ┗━ 
30  ━┳━ kkk   ━━━ 
5
                  ┃
                  ┗━ 
mmm ━━━ 2

(젠장 그리기 빡세네 --;;)
GROUP BY 가 value1, value2  순서로 수행되면,
위와 같은 트리가 만들어진다.

그렇다면? 
눈치 빠른 사람은 이미 알아챘겠지만,
HAVING의 타이밍이 이것에 달려 있다는 것이다.

즉,
트리의 LEAF(위 그림중 row_number라고 되어 있는 영역) 영역이
HAVING이 계산되는 시점이다.
각각의 분류가 완료되고 난 후,
각 카테고리 별로 HAVING의 조건이 검색된다.


자, 그럼 이제부터는 어느 시점에서 조건이 발효되는 지 
알테니,
잘 써먹도록 하자. (^0^)/
******************************

출처 -  http://blog.naver.com/nadarim?Redirect=Log&logNo=70047337113

'DB > MySQL' 카테고리의 다른 글

LIKE, BETWEEN, IN  (0) 2010.07.08
[MySql] JOIN 문  (0) 2010.07.02
group by, having, inner join  (0) 2010.06.28
에러 코드 모음  (0) 2010.06.17
mysql 접속 여부 확인 및 에러  (0) 2010.05.31
:

group by, having, inner join

DB/MySQL 2010. 6. 28. 15:06

* group by..

 

group by절은 그룹별로 검색을 하게 해 준다. 특정 필드에 대해 중복이 되지 않도록

그루핑이 가능하다.

 

id 1111 school 백수초딩학교

id 1111 school 백마고등학교

id 2222 school 응가초딩학교

id 2222 school 응가대학교

 

이럴때 id로만 그루핑해서 몇명이 있는지 보고 싶을 때 group by id 를 사용한다.

group by 절을 사용할 때는 그룹 함수를 같이 사용해야 하는데, 대표적인 그룹함수에는

COUNT(), AVG(), MIN(), MAX(), SUM()이 있다.

 

* having

 

having 구문은 group by를 사용할때 연이어서 조건문 사용을 가능하게 해준다.

 

예)

 

SELECT id, COUNT(*) FROM member WHERE cc='Y' GROUP BY id HAVING COUNT(cc)=2;

 

설명:

member table에서 id가 중복되지 않게 group 으로 묶은 후에,

cc 필드의 갯수가 2인 것만 으로 조건 제약.

 

 

 

* inner join..

 

inner join에서의 조건문은 where이 아닌 on을 사용해서 쓴다.

 

예)

SELECT p.id, p.name, p.commnet FROM member AS p
LEFT INNER JOIN member_crazy AS r
ON p.id=r.id
LEFT INNER JOIN member_babo AS c
ON p.id=c.id

'DB > MySQL' 카테고리의 다른 글

[MySql] JOIN 문  (0) 2010.07.02
GROUP BY  (0) 2010.06.29
에러 코드 모음  (0) 2010.06.17
mysql 접속 여부 확인 및 에러  (0) 2010.05.31
mysql_fetch 계열 함수  (0) 2010.05.31
:

에러 코드 모음

DB/MySQL 2010. 6. 17. 18:13

1062 : Duplicate entry '0' for key 1

동일한 값이 들어갈 수 없는 컬럼에 같은 데이터가 들어갈 경우  

idx 컬럼의 auto_increment 속성 확인해 볼것




 

'DB > MySQL' 카테고리의 다른 글

GROUP BY  (0) 2010.06.29
group by, having, inner join  (0) 2010.06.28
mysql 접속 여부 확인 및 에러  (0) 2010.05.31
mysql_fetch 계열 함수  (0) 2010.05.31
php mysql 연동 함수  (0) 2010.05.10
:

mysql 접속 여부 확인 및 에러

DB/MySQL 2010. 5. 31. 13:18

<?php

$conn 
mysql_connect("localhost", "mysql_user", "mysql_password");

if (!
$conn) {
    echo 
"Unable to connect to DB: " mysql_error();
    exit;
}
  
if (!
mysql_select_db("mydbname")) {
    echo 
"Unable to select mydbname: " mysql_error();
    exit;
}

$sql "SELECT id as userid, fullname, userstatus 
        FROM   sometable
        WHERE  userstatus = 1"
;

$result mysql_query($sql);

if (!
$result) {
    echo 
"Could not successfully run query ($sql) from DB: " mysql_error();
    exit;
}

if (
mysql_num_rows($result) == 0) {
    echo 
"No rows found, nothing to print so am exiting";
    exit;
}

// While a row of data exists, put that row in $row as an associative array
// Note: If you're expecting just one row, no need to use a loop
// Note: If you put extract($row); inside the following loop, you'll
//       then create $userid, $fullname, and $userstatus
while ($row mysql_fetch_assoc($result)) {
    echo 
$row["userid"];
    echo 
$row["fullname"];
    echo 
$row["userstatus"];
}

mysql_free_result($result);

?>

[출처] php 함수 - mysql_fetch_assoc|작성자 개발자

추가 - $conn = mysql_connect("localhost""mysql_user""mysql_password") or die ("접속 할 수 없습니다.");

'DB > MySQL' 카테고리의 다른 글

group by, having, inner join  (0) 2010.06.28
에러 코드 모음  (0) 2010.06.17
mysql_fetch 계열 함수  (0) 2010.05.31
php mysql 연동 함수  (0) 2010.05.10
mysql_affected_rows, mysql_num_rows 차이  (0) 2010.05.10
:

mysql_fetch 계열 함수

DB/MySQL 2010. 5. 31. 13:03

php에서 mysql 테이블에 저장되어 있는 값을 query를 통해 불어온 후 그 값을 바로 사용 가능한가?

 

대답은 No..

 

사용 할 수 있는 형태로 변환을 해줘야겠죠..

 

여기서 사용하는 것이 mysql_fetch_어쩌구() 함수들입니다..

 

아래와 같은 테이블이 있다고 합니다..

 

 

1. mysql_fetch_array() - 이 함수는 결과를 배열로 뽑아내는데, 번호호 된 배열과 테이블 필드 이름으로 된 배열, 두 가지를 동시에

                                            생성합니다.

 

$query = "SELECT * FROM comment ORDER BY id DESC";

$resultID = mysql_query($query, $linkID) or die("Data not fouond");

$row = mysql_fetch_array($resultID);

 

이렇게 php코드들을 작성하시겠죠?

그럼 $row['ID']  에도 1,2,3,4,5, $row[1]에도 1,2,3,4,5가 저장이 되겠죠..

 

2. mysql_fetch_assoc() - 이 함수는 필드 이름으로 된 배열만 생성합니다..

$row = mysql_fetch_assoc($resultID);

 

이렇게 하면 $row['ID'] 에 1,2,3,4,5가 저장이 됩니다.. $row[1] 하면 안되겠죠?

php가 서버에서 사용하는 함수니까 db양이 많다면 assoc를 써주면 서버가 좀 덜 힘들어하겠네요..^^

3. mysql_fetch_row() - 이 함수는 숫자로 된 배열로만 생성합니다..

$row = mysql_fetch_row($resultID);

 

$row[1]에 1,2,3,4,5가 저장이 됩니다..

 

※ 참고로 속도는 3 > 2 > 1 입니다..당연히...근데 별 차이 없죠..

[출처] mysql_fetch 관련 함수|작성자 Elisa

'DB > MySQL' 카테고리의 다른 글

에러 코드 모음  (0) 2010.06.17
mysql 접속 여부 확인 및 에러  (0) 2010.05.31
php mysql 연동 함수  (0) 2010.05.10
mysql_affected_rows, mysql_num_rows 차이  (0) 2010.05.10
MySQL 데이터 타입  (0) 2010.04.30
:

php mysql 연동 함수

DB/MySQL 2010. 5. 10. 14:01

mysql의 연결 및 종류


mysql을 연결하는 함수로는 mysql_connect()함수, 연결을 종류하는 함수는 mysql_close()함수

int mysql_connect("localhost","root","apmsetup")

                             ↳유저이름  ↳페스워드

데이터베이스 연결함수

mysql 내부에 존재하는 데이터베이스와 연결하는 함수가 mysql_select_db()함수

mysql_select_db(디비명,$connect)


mysql의 데이터 조작 함수들

-데이터베이스에서 데이터들을 여러 가지 조건에 맞게 검색해서 php 프로그램 내부로 가져오고, 그 결과를 프로그래밍에 맞게 가공하는 작업


mysql_affected_rows() 함수

테이블 내부의 레코드가 변경되었을 경우 변경된 레코드의 개수를 리턴하는 함수

int mysql_affected_rows($connect)


mysql_change_user() 함수

현재 연결된 데이터베이스의 사용자를 변경하는 함수

inr mysql_change_usr(유저이름, 페스워드, string database, $connect)

                                (string=일련의 문자들이 모여서 하나의 데이터로 취급되는 것)

mysql_create_db() 함수                                       

php 내부에서 새로운 데이터베이스를 생성하는 명령어이다.

int mysql_create_db(디비명, $connect)


mysql_data_seek() 함수

sql 문이 수행된 결과를 일종의 포인터로 접근하기 위한함수

int mysql_data_seek(int result_identifier, int row_number)

                                         (int= $)

mysql_db_name() 함수

현재 연결된 데이터베이스 이름의 리스트를 출력하는 함수

int mysql_db_name(int result, int row, mixed field)


mysql_db_query() 함수

데이터베이스 연결과 sql 문의 query 실행을 하나의 함수로 합쳐 놓은 기능제공

int mysql_db_query(string database, string query, $connect)


mysql_errno() 함수

mysql을 실행하다가 오류가 발생하는 것을 처리하기 위해 사용하는 함수. 처리중에 오류가 발생하면 이미 정의되어 있는 에러 메시지에 대한 에러 코드를 리턴한다. 만약 에러가 없으면 0을 리턴한다.

int mysql_errno($connect)


mysql_error() 함수

mysql_errno() 함수와 동일한 기능을 제공하지만 리턴값이 숫자가 아닌 문자열이다.

string mysql_error($connect)


mysql_fetch_array() 함수

sql 문의 수행 결과를 참조 배열로 리턴하는 기능

array mysql_fetch_array(int resylt)

                         ↳$result

mysql_fetch_field() 함수

sql 문의 결과에 대한 필드 정보를 출력하는 함수

object mysql_fetch_field(int result)

리턴값은 object이며, 그에대한 속성값은 ->

 name : 필드의 이름

 table : 필드가 속해있는 테이블의 이름

 max_length : 필드의 최대 길이

 not_null : 필드가 null 이 아니면 1 , null 이면 0

 primary_key : 필드가 primary key 이면 1, 아니면 0

 unique_key : 필드가 unique key 이 아니면 1 , 아니면 0

 multiple_key : 필드가unique key 이 아니면 1 , unique key 이면 0

 numeric : 필드가 numeric이면 1, 아니면 0

 blob : 필드가 blob이면 1, 아니면 0

 type : 필드의 데이터형

 unsigned : 필드가 unsigned이면 1, 아니면 0

 zerofill : 필드가 zero-fill 이면 1, 아니면 0


mysql_fetch_lengths() 함수

sql 문의 결과에 대해 각각의 필드의 길이를 배열 형태로 리턴하는 함수

array mysql_fetch_lengths(int result)


mysql_fetch_object() 함수

sql 문의 결과를 object 형태로 리턴하는 함수

object mysql_fetch_object(int result)


mysql_fetch_row() 함수

리턴된배열을 참조 배열 형태로는 사용할 수가 없다는 점이다.

array mysql_fetch_row(int result)



mysql_field_flags() 함수

필드들의 속성들을 하나의 문자열로 리턴하는 기능

단, 필드의 속성이 하나의 문자열로 출력되기 때문에 explode()함수를 사용하여 각각의 속성들을 분리하여 처리해야 한다.

string mysql_field_flage(int result, int field_offset)

                         ex)$result, $1

mysql_field_name() 함수

sql 문의 실행 결과에서 피라미터로 넘겨받은 필드의 위치에 대한 필드 이름을 리턴하는 기능

string mysql_field_name(int result, int field_index)

                                   ex)$result, $1

mysql_field_len() 함수

특정한 필드의 길이를 리턴하는 기능

int mysql_field_len(int result, int field_offset)


mysql_field_seek() 함수

sql 문의 결과에 대해 주어진 field_offset 만큼 포인터를 이동시키는 명령어

int mysql_field_seek(int result, int field_offset)


mysql_field_table() 함수

특정 필드의 테이블 이름을 리턴하는 함수

string mysql_field_table(int result, int field_offset)


mysql_field_type() 함수

sql 문의 결과에 대해 특정 필드의 타입을 리턴한다.

string mysql_field_type(int result, int field_offset)


mysql_free_result() 함수

sql 문의 결과로 할당되어 있는 메모리를 해제하는 기능을 한다. 하지만, 실제 사용할 때는 php의 코드 수행이 종료되면 자동적으로 할당된 메모리가 해제되므로 굳이 사용할 필요는 없다.

int mysql_free_result(int result)


mysql_list_dbs() 함수

현재 연결되어 있는 mysql server에서 사용 가능한 데이터베이스의 이름을 리스트 형태로 리턴하는 기능

int mysql_list_dbs($connect)


mysql_list_fields() 함수

sql 문을 사용하여 테이블안의 필드들에 대한 데이터와 필드정보들을 fetch 한 것과는 달리 단지 연결만으로도 해당 데이터베이스안의 필드들에 대한 정보를 얻을수 있다.

mysql_list_fields(디비명, 테이블명, $connect)


mysql_list_tables() 함수

연결된 데이터베이스에서 사용가능한 테이블의 리스트를 출력하는 기능을 한다.

mysql_list_tables(디비명, $connect)


mysql_num_fields() 함수

sql 문의 수행 결과에 추출한 필드의 개수를 린턴하는 기능을 한다.

mysql_num_fields(int result)


mysql_num_rows() 함수

sql 문의 수행결과에 추출한 레코드의 개수를 리턴하는 기능을 한다.


mysql_pconnect() 함수

mysql server와 php 를 연결하는데 사용하는 함수.

int mysql_pconnect("localhost","root","apmsetup")

mtsql_connect() 함수와 차이점이 있다.

1. 같은 호스트에서 하나이상의 연결을 시도하는 경우에 mysql_pconnect()함수를 사용한다면 이함수는 가장 먼저 연결된 연결 식별자(link identifier)를 리턴한다.

다시말해서, mysql_connect() 함수가 호스트와는 상관없이 연결될 때마다 서로 다른 연결 식별자를 리턴하는 데 반해 mysql_pconnect()는 같은 호스트에서 연결을 시도했다면 동일한 연결 식별자를 리턴한다.

2. mysql_connect()로 연결된 연결 상태는 스크립트가 종료하면 mysql_close() 함수를 사용하지 않아도 자동적으로 종료가 된다. 그러나 mysql_pconnect() 함수로 연결한 경우에는 스크립트가 종료되었다고 하더라도 자동 종료하지 않고 연결 상태가 졔속 유지된다.


mysql_query() 함수

sql 문을 mysql server로 전송하는 함수

int mysql_query(string query, $connect)


mysql_tablename() 함수

연결된 데이터베이스에서 사용 가능한 테이블의 이름을 문자열 형태로 리턴하는 함수

string mysql_tablename(int result, int i)

'DB > MySQL' 카테고리의 다른 글

mysql 접속 여부 확인 및 에러  (0) 2010.05.31
mysql_fetch 계열 함수  (0) 2010.05.31
mysql_affected_rows, mysql_num_rows 차이  (0) 2010.05.10
MySQL 데이터 타입  (0) 2010.04.30
MySQL 날짜 / 시간 데이터 타입  (0) 2010.04.30
:

mysql_affected_rows, mysql_num_rows 차이

DB/MySQL 2010. 5. 10. 10:06

mysql_affected_rows

mysql_affected_rows -- 최근 MySQL 작업으로 처리된 행(row) 개수를 얻음

설명

int mysql_affected_rows ( [int link_identifier])

mysql_affected_rows()는 link identifier로 접속되어 있는 서버에서

최근 실행된 INSERT, UPDATE, DELETE 질의로 처리된 행의 개수를 돌려준다.

만약 link identifier 인자를 생략하면, 최근 열려진 link를 사용한다.

마지막 질의가 WHERE 절이 없는 DELETE 질의라면, 테이블의 모든 레코드가 삭제되더라도 이 함수는 0값을 돌려준다.

이 함수는 SELECT 문에는 동작하지 않으며, 레코드가 수정되는 경우에만 동작한다.

SELECT 구문으로부터 돌려받은 줄의 개수를 얻으려면, mysql_num_rows()를 쓰면 된다.

 

 

mysql_num_rows

mysql_num_rows -- 결과로부터 열 개수를 반환

설명

int mysql_num_rows ( int result)

mysql_num_rows() 함수는 결과셋으로부터 열의 개수를 반환한다.

이 함수는 SELECT절에서 반환된 결과셋만 사용이 가능하다.

INSERT, UPDATE, DELETE로부터 열의 개수를 얻으려면 mysql_affected_rows()를 사용하면 된다.

예 1. mysql_num_rows 예제 (crubel@trilizio.org 제공) ()

<?php
$conn
= mysql_connect("hostaddress", "username", "password");
mysql_select_db("database",$conn); // needed if you have m,ultiple db's
$Resultfornummembers = mysql_query("SELECT * FROM Accounts",$conn);
$NumMembers = mysql_num_rows($Resultfornummembers);
echo
"$NumMembers Members";
?>

'DB > MySQL' 카테고리의 다른 글

mysql_fetch 계열 함수  (0) 2010.05.31
php mysql 연동 함수  (0) 2010.05.10
MySQL 데이터 타입  (0) 2010.04.30
MySQL 날짜 / 시간 데이터 타입  (0) 2010.04.30
mysql_query  (0) 2010.04.27
:

MySQL 데이터 타입

DB/MySQL 2010. 4. 30. 13:00

MySQL 데이터베이스에는 크게 다음과 같은 세 가지 데이터 타입이 있다.
===========================================================
데이터타입 내용                  예제
-----------------------------------------------------------
숫자형     숫자를 저장하는 필드  TINYINT, INT, FLOAT
-----------------------------------------------------------
문자형     문자를 저장하는 필드  CHAR, VARCHAR, TEXT, ENUM
-----------------------------------------------------------
날짜형     날짜를 저장하는 필드  DATE, DATETIME, TIMESTAMP
===========================================================


MySQL 데이터 타입의 모든 종류를 외울 필요는 없다.
그러나, 다음의 네 가지 데이터 타입은 상당히 많이 사용되므로 꼭 익혀둘것

INT : 4bytes 정수를 저장할때 사용
CHAR(n) : 문자의 수가 n 개인 문자열을 저장할때 사용
VARCHAR(n) 문자의 수가 최대 n 개인 문자열을 저장할때 사용
TEXT : 문자의 수가 최대 65535 개인 문자열을 저장할때 사용

주의: char 타입은 무조건 n 길이만큼을 차지하고, 출력시에도 n 길이로 체크되지만, varchar 은 실제로 들어있는 문자길이만큼 인식된다.
또한, int 형의 경우, 앞에 0 을 붙여 저장해도 0 이 없어지고, 첫자리는 0 이 아닌 숫자가 나올때까지 0 이 없어진다.

다음은 숫자형, 날짜형, 그리고 문자형의 데이터 타입을 정리해둔 표이다.

숫자형 데이터 타입

=====================================================================================
데이터타입   설명
-------------------------------------------------------------------------------------
TINYINT   가장 작은 숫자형으로 부호가 있는 경우에는 -128 ~ 127,
          부호가 없는 경우에는 0 ~ 255 까지 데이터를 다룰 수 있다.
          저장할때 필요한 용량은 1바이트이다.
-------------------------------------------------------------------------------------
SMALLINT  부호가 있는 경우에는 -32768 ~ 32767,
          부호가 없는 경우에는 0 ~ 65535 까지 다룰 수 있으며,
          저장할때 필요한 용량은 2바이트이다.
-------------------------------------------------------------------------------------
MEDIUMINT 부호가 있는 경우에는 -8388608 ~ 8388607,
          부호가 없는 경우에는 0 ~ 16777215 까지 데이터를 다룰 수 있으며,
          저장할때 필요한 용량은 3바이트이다.
-------------------------------------------------------------------------------------
INT       일반적으로 사용하는 숫자형으로
          부호가 있는 경우에는 -2147483648 ~ 2144483647,
          부호가 없는 경우에는 0 ~ 4294967295 까지 데이터를 다룰 수 있으며,
          저장할때 필요한 용량은 4바이트이다.
-------------------------------------------------------------------------------------
INTEGER   int 와 같이 사용한다.
          (int 와 같은 뜻인듯하며, 이름만 달리 사용)
-------------------------------------------------------------------------------------
BIGINT    부호가 있는 경우에는 -922337036854775808 ~ 922337036854775807,
          부호가 없는 경우에는 0 ~ 18446744073709551615 까지 데이터를 다룰 수 있으며,
          저장할때 필요한 용량은 8바이트이다.
-------------------------------------------------------------------------------------
FLOAT     최소값 +_1.175494351E-38 ~ 최대값 +_3.402823466E_38 까지 지원,
          4바이트의 크기를 가진다.
-------------------------------------------------------------------------------------
DOUBLE    최소 ±1.7976931348623157E-308, 최대 ±2.2250738585072014E+308 이며,
          저장할때 필요한 용량은 8바이트이다.
-------------------------------------------------------------------------------------
DECIMAL   소수를 저장하지만 내부적으로는 문자 형태로 저장되는 타입이다.
          예를들어 3.141592 의 경우, 3 이 char 하나의 공간에 저장된다.
=====================================================================================

 


문자형 데이터 타입
=====================================================================================
데이터타입  설명
-------------------------------------------------------------------------------------
CHAR       char(0) 도 지원하며,
           실제값이 M보다 작을 때 남는 자릿수만큼 공백을 붙여서 저장한다.
           1부터 최대 255 의 자릿수를 지원하며, 지정한 용량만큼 바이트를 사용.
-------------------------------------------------------------------------------------
VARCHAR    지정할 수 있는 길이는 1부터 255까지이며,
           지정한 길이보다 작은 데이터를 저장할때 필요한 길이만큼 저장된다.
           char 형보다 기억장치를 효율적으로 사용할 수 있다. 지정한용량+1바이트 사용.
-------------------------------------------------------------------------------------
TINYBLOB   최대 255개의 문자를 저장. 지정한 용량+1바이트(L < 2^8 -1) 를 사용.
-------------------------------------------------------------------------------------
TINYTEXT   tinyblob 와 같이 사용(이름만 다른듯)
-------------------------------------------------------------------------------------
BLOB       최대 65535 개의 문자를 저장. 지정한 용량+2바이트(L < 2^16 -1)의 용량 사용.
-------------------------------------------------------------------------------------
TEXT       blob 와 같이 사용(이름만 다른듯)
-------------------------------------------------------------------------------------
MEDIUMBLOB 최대 16777215 개의 문자를 저장. 지정한 용량+3바이트(L < 2^24 -1) 를 사용.
-------------------------------------------------------------------------------------
MEDIUMTEXT mediumblob 와 같이 사용(이름만 다른듯)
-------------------------------------------------------------------------------------
LONGBLOB   최대 429496729 개의 문자를 저장. 지정한 용량+4바이트(L < 2^32 -1) 를 사용.
-------------------------------------------------------------------------------------
LONGTEXT   longbolb 와 같이 사용(이름만 다른듯)
-------------------------------------------------------------------------------------
ENUM       문자 형태인 value 를 숫자로 저장.
           value 중에 하나만 저장하며, value 가 255 이하인 경우에는 1바이트,
           65535 이하인 경우에는 2바이트를 사용.
=====================================================================================

 


날짜형 데이터 타입
PHP 의 날짜 및 시간 관련 함수와 비슷하다.
=====================================================================================
DATE      '1001-01-01' 부터 '9999-12-31' 까지의 값이 들어갈 수 있으며,
          저장할때 3바이트가 필요. 'YYYY-MM-DD' 와 같은 형식.
-------------------------------------------------------------------------------------
DATETIME  날자와 시간을 같이 저장하며,
          '1001-01-01 00:00:00' 부터 '9999-12-31 23:59:59' 까지의 값을 다루고,
          8바이트가 필요.
          'YYYY-MM-DD HH:MM:SS' 와 같은 형식.
-------------------------------------------------------------------------------------
TIMESTAMP '1970-01-01 00:00:00' 이후부터 초를 숫자로 저장하는 자료형으로,
          4바이트가 필요.
          약 40억초를 저장할 수 있으므로 2037년까지의 값을 다룰 수 있다.
-------------------------------------------------------------------------------------
TIME      '-838:59:59' 에서 '838:59:59' 의 값을 다루며,
          3바이트를 사용.
          HH:MM:SS 와 같은 형식
-------------------------------------------------------------------------------------
YEAR      연도만 저장하는 자료형이다.
          year(n)? 와 같은 형식.
          n 은 2와 4를 지정할 수 있으며, 2인 경우에 값의 범위는 70 에서 69,
          4인 경우에는 1970 에서 2069 이다.
          1바이트를 사용.
=====================================================================================

'DB > MySQL' 카테고리의 다른 글

php mysql 연동 함수  (0) 2010.05.10
mysql_affected_rows, mysql_num_rows 차이  (0) 2010.05.10
MySQL 날짜 / 시간 데이터 타입  (0) 2010.04.30
mysql_query  (0) 2010.04.27
mysql_result, mysql_fetch_row, _array  (0) 2010.04.27
:

MySQL 날짜 / 시간 데이터 타입

DB/MySQL 2010. 4. 30. 11:55

MySQL 의 날짜 / 시간 데이터 타입에는 다음의 다섯 종류가 있다. (5.1X 베이스로 설명)
  • DATE
  • DATETIME
  • TIMESTAMP
  • TIME
  • YEAR

  1. DATE
    날짜정보를 가짐.
    범위는 "1000-01-01" ~ "9999-12-31"
    표시 형식(포맷)은 "YYYY-MM-DD"
    필요 기억용량: 3바이트
  2. DATETIME
    날짜와 시간 정보를 가짐.
    범위는 "1000-01-01 00:00:00" ~ "9999-12-31 23:59:59"
    표시 형식(포맷)은 "YYYY-MM-DD HH:MM:SS"
    필요 기억용량: 8바이트
  3. TIMESTAMP
    MySQL 버젼과 서버의 SQL 실행모드에 따라 동작이 다름.
    범위는 "1970-01-01 00:00:01" UTC ~ 2037 년 도중까지.
    타임스탬프 값은 "1970-01-01 00:00:00" UTC 부터 시작하는 초수를 나타냄.
    0 값은 "0000-00-00 00:00:00" 값을 나타냄.
    따라서 "1970-01-01 00:00:00" 부터 0 초 라는 의미를 나타내기는 하지만 "1970-01-01 00:00:00" 를 표현 할 수 없음.
    TIMESTAMP 컬럼의 자동업데이트 조건
    • INSERT 또는  LOAD DATA INFILE 스테이트먼트에서 컬럼을 지정하지 않는 경우
    • UPDATE 스테이트먼트 같은 컬럼의 변경에서 명시적으로 컬럼이 지정되지 않는 경우
    • TIMESTAMP 컬럼에 NULL 값을 지정한 경우
    필요 기억용량: 4바이트
  4. TIME
    시각정보
    범위는 "-838:59:59" ~ "838:59:59"
    표시 형식(포맷)은 "HH:MM:SS"
    필요 기억용량: 3바이트
  5. YEAR
    2자리 , 혹은 4자리포맷으로 표시.
    디폴트로 4자리 포맷을 사용함.
    4자리 포맷일 경우 범위는 1901 ~2155 , 0000 값을 가짐.
    2자리 포맷일 경우 범위는 70 ~69 의 값을 가짐. 70~ 00 까지는 1970 년부터 2000년 까지의 값 , 그리고 01 ~ 69 까지는 2001 년 부터 2069년까지의 값.
    필요 기억용량: 1바이트

출처 - http://breakpoint.tistory.com/86

'DB > MySQL' 카테고리의 다른 글

php mysql 연동 함수  (0) 2010.05.10
mysql_affected_rows, mysql_num_rows 차이  (0) 2010.05.10
MySQL 데이터 타입  (0) 2010.04.30
mysql_query  (0) 2010.04.27
mysql_result, mysql_fetch_row, _array  (0) 2010.04.27
: