'Database/Mysql'에 해당하는 글 27건

AUTO_INCREMENT

Database/Mysql 2007. 2. 7. 21:58
AUTO_INCREMENT 사용하기

새로운 레코드에 대해 유일한(unique) 값을 생성시킬 때 사용된다.
mysql> CREATE TABLE animals (
  -> id MEDIUMINT NOT NULL AUTO_INCREMENT,
  -> name CHAR(30) NOT NULL,
  -> PRIMARY KEY (id) );
Query OK, 0 rows affected (0.00 sec)
.
mysql> INSERT INTO animals (name) VALUES
  -> ('dog'),('cat'),('penguin'),('lax'),('whale'),('ostrich');
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0
.
mysql> SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | lax     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+
6 rows in set (0.00 sec)

  • LAST_INSERT_ID() SQL 함수 또는 mysql_insert_id() C API 함수를 사용해서 가장 최근의 AUTO_INCREMENT 값을 불러올 수가 있다.
  • 다중 줄 삽입에 대해서는 LAST_INSERT_ID() 와 mysql_insert_id()는 실제로 삽입된 맨 처음 줄로부터 AUTO_INCREMENT 를 돌려 준다.
AUTO_INCREMENT의 값이 1인 아닌 것으로 시작으로 하기 위해, 그 값을 CREATE TABLE 또는 ALTER TABLE을 가지고 설정한다:
mysql> ALTER TABLE tbl AUTO_INCREMENT = 100;


명령어 라인에서 옵션 사용

shell> mysql -u root -p --execute="SELECT User, Host FROM user" mysql
shell> mysql -u root -p --execute="SELECT User, Host FROM mysql.user"
shell> mysql -u root -p -e "SELECT VERSION();SELECT NOW()"


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

MAX / MIN / LIMIT

Database/Mysql 2007. 2. 7. 21:49
MAX / MIN

필드에 대한 최대 값(Maximum Value), 최소 값(Minimum Value)

"최고(highest)의 아이템 숫자는 어떤 것인가?"

mysql> SELECT MAX(article) AS article
   -> FROM shop;
+---------+
| article |
+---------+
|       4 |
+---------+

1 row in set (0.00 sec)


LIMIT

레코드 수를 제한한다.

"가장 비싼 상품의 숫자, 판매자, 그리고 가격을 찾는다."
(모든 레코드를 가격 내림차순으로 정렬시키고, LIMIT 구문을 사용해서 맨 윗줄만 가져온다.)

mysql> SELECT * FROM shop
   -> ORDER BY price DESC
   -> LIMIT 1;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
|    0004 | D      | 19.95 |
+---------+--------+-------+

1 row in set (0.00 sec)


"상품별로 최고의 값을 찾는다."

mysql> SELECT article, MAX( price ) 
   -> FROM shop
   -> GROUP BY article;
+---------+--------------+
| article | MAX( price ) |
+---------+--------------+
|    0001 |         3.99 |
|    0002 |        10.99 |
|    0003 |         1.69 |
|    0004 |        19.95 |
+---------+--------------+
4 rows in set (0.00 sec)

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

레코드 세기

Database/Mysql 2007. 2. 7. 21:46
레코드 세기

COUNT()를 사용해서 레코드 수를 선택할 수 있다.

mysql> SELECT COUNT(*)
   -> FROM pet;
+----------+
| COUNT(*) |
+----------+
|        4 |
+----------+

1 row in set (0.00 sec)
- 'pet' 테이블에는 4개의 레코드가 있다.
- COUNT() 사이에는 필드 리스트가 필요하다.

mysql> SELECT owner, COUNT(*)
   -> FROM pet
   -> GROUP BY owner;
+-------+----------+
| owner | COUNT(*) |
+-------+----------+
| Chan  |        2 |
| Hong  |        2 |
+-------+----------+

2 rows in set (0.00 sec)
- 'pet' 테이블에 'owner' 필드값을 그룹화하여 'owner'와 해당 레코드 수를 선택한다.
- GROUP BY 는 필드를 그룹화 하는데 사용한다.
- COUNT()와 GROUP BY는 데이터를 특성화 시키는데 유용하다.

mysql> SELECT owner, sex, COUNT(*)
   -> FROM pet
   -> WHERE owner = 'hong' OR owner = 'chan'
   -> GROUP BY owner, sex;
+-------+------+----------+
| owner | sex  | COUNT(*) |
+-------+------+----------+
| Chan  | m    |        2 |
| Hong  | f    |        2 |
+-------+------+----------+
2 rows in set (0.00 sec)
- COUNT()를 사용할 때에 전체 테이블을 읽어 들일 필요가 없다.
- 위 'WHERE owner' 처럼 특정 필드를 뽑아낼 수도 있다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

정규 표현식

Database/Mysql 2007. 2. 7. 21:43
정규 표현식 (Regular Expression)

패턴 매칭의 다른 형태로 REGEXP를 이용하여 확장된 규칙 수식을 사용할 수 있다.

mysql> SELECT *
   -> FROM pet
   -> WHERE name REGEXP '^n';
+------+-------+---------+------+------------+-------+
| name | owner | species | sex  | birth      | death |
+------+-------+---------+------+------------+-------+
| Nabi | Hong  | hamster | f    | 2006-12-31 | NULL  |
+------+-------+---------+------+------------+-------+

1 row in set (0.00 sec)

- 'name'필드에 'n'으로 시작하는 값을 가진 레코드의 모든 필드를 선택한다.
- 대소문자를 구분하게 하려면 BINARY 키워드를 사용해서 바이너리 스트링을 만든다. (REGEXP BINARY '^b')
- ^는 시작 문자를 뜻한다.

  • REGEXP ^n : 'n'자로 시작하는 값
  • REGEXP i$ : 'i'자로 끝나는 값
  • REGEXP w : 'w'문자를 가진 값
  • REGEXP ^.....$ : 5개의 문자를 가진 값
  • REGEXP ^.{5} : 문자 한개(.)를 5개 포함하고 있는 값

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

패턴 매칭

Database/Mysql 2007. 2. 7. 21:39
패턴 매칭

SQL 패턴은 디폴트로 대소문자를 구분하지 않는다.
SQL 패턴을 사용할 때에 = 또는 <> 대신에 LIKE 또는 NOT LIKE 를 사용해야 한다.
mysql> SELECT *
  -> FROM pet
  -> WHERE name LIKE 'n%';
+------+-------+---------+------+------------+-------+
| name | owner | species | sex  | birth      | death |
+------+-------+---------+------+------------+-------+
| Nabi | Hong  | hamster | f    | 2006-12-31 | NULL  |
+------+-------+---------+------+------------+-------+

1 row in set (0.00 sec)
- 'name' 필드에 'n'으로 시작하는 레코드의 모든 필드를 선택한다.
- LIKE '%n' 이라면 'n'으로 끝나는 레코드, LIKE '%n%' 이라면 값 안에 'n'이 들어가 있는 레코드의 모든 필드를 선택한다.

mysql> SELECT *
  -> FROM pet
  -> WHERE name LIKE '____';
+------+-------+---------+------+------------+-------+
| name | owner | species | sex  | birth      | death |
+------+-------+---------+------+------------+-------+
| Nabi | Hong  | hamster | f    | 2006-12-31 | NULL  |
| Hoya | Chan  | rabbit  | m    | 2006-10-31 | NULL  |
+------+-------+---------+------+------------+-------+

2 rows in set (0.00 sec)
- 'name' 필드에 정확히 4개의 문자로 되어 있는 값('____')의 모든 레코드를 선택한다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,