728x90
반응형
SELECT @rownum:=@rownum+1 rownum, t.*
FROM (SELECT @rownum:=0) r, mytable t;
728x90
반응형
728x90
반응형

계정생성 --> 데이타베이스 생성 ----> 테이블 생성 으로 하시면 될꺼 같습니다.

 


 

 

데이터베이스 접속

$ mysql -u 사용자명 -p dbname


설치 직후에는 root 사용자에 비밀번호가 없으므로 다음과 같이 접속하여 MySQL을 관리할 수 있다.

$ mysql -u root mysql



비밀번호 변경
MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않다.
다음 세가지 방법으로 비밀번호를 변경 할 수 있다.


  • mysqladmin이용
    $ mysqladmin -u root password 새비밀번호

  • update문 이용
    $ mysql -u root mysql

    mysql> UPDATE user SET password=password('새비밀번호') WHERE user='root';
    mysql> FLUSH PRIVILEGES;


  • Set Password 이용
    SET PASSWORD FOR root=password('새비밀번호');


일단 root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다.

사용자 추가/삭제

mysql> GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';


username 이라는 사용자를 password라는 비밀번호를 갖도록 하여 추가한다. username은 dbname이라는
데이타베이스에 대해 모든 권한을 가지고 있다.
username 사용자는 로칼 호스트에서만 접속할 수 있다. 다른 호스트에서 접속하려면

GRANT ALL PRIVILEGES ON dbname.* TO username@'%' IDENTIFIED BY 'password';


위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.
추가 : '%'를 호스트네임으로 지정해도 모든 호스트에서 접속할 수 없었다. 각 호스트별로 다 지정해야 했다.

불필요한 사용자 삭제는

mysql> DLETE FROM user WHERE user='username';
mysql> FLUSH PRIVILEGES;



데이터베이스 생성/보기


  • 데이터베이스를 생성하고,
    mysql> CREATE DATABASE dbname;

  • 현재 존재하는 데이터베이스 목록을 보여준다.
    mysql> SHOW DATABASES;

  • 특정 데이타베이스를 사용하겠다고 선언한다.
    mysql> USE dbname;

  • 쓸모 없으면 과감히 삭제한다.
    mysql> DROP DATABASE [IF EXISTS] dbname;

    IF EXISTS 옵션은 비록 데이타베이스가 없더라도 오류를 발생시키지 말라는 의미이다.



테이블 생성/보기


  • 테이블을 생성하고,
    mysql> CREATE TABLE tablename (
    column_name1 INT,
    column_name2 VARCHAR(15),
    column_name3 INT );

  • 현재 데이타베이스의 테이블 목록을 보고
    mysql> SHOW TABLES;

  • 테이블 구조를 살펴본다.
    mysql> EXPLAIN tablesname;
    혹은
    mysql> DESCRIBE tablename;

  • 이름을 잘못 지정했으면 이름을 변경할 수도 있다.
    mysql> RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];

  • 필요 없으면 삭제한다.
    mysql> DROP TABLE [IF EXISTS] tablename;



현재 상태 보기


mysql> status

--------------
mysql Ver 11.18 Distrib 3.23.58, for pc-linux (i686)

Connection id: 26
Current database: study
Current user: study@localhost
Current pager: stdout
Using outfile: '
Server version: 3.23.58
Protocol version: 10
Connection: Localhost via UNIX socket
Client characterset: latin1
Server characterset: euc_kr
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 2 hours 9 min 59 sec

Threads: 1 Questions: 160 Slow queries: 0 Opens: 28 Flush tables: 1
Open tables: 1 Queries per second avg: 0.021
--------------



INSERT

mysql> INSERT INTO tablename VALUES(값1, 값2, ...);

혹은

mysql> INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);



SELECT

mysql> SELECT col1, col2, ... FROM tablename;


컬럼명을 *로 하면 모든 컬럼 의미.

mysql> SELECT col1 AS '성명', col2 AS '국어점수' FROM grade;


컬럼의 이름을 바꿔서 출력.

mysql> SELECT * FROM tablename ORDER BY col1 DESC;
mysql> SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;


DESC는 내림차순 ASC는 오름차순.

mysql> SELECT * FROM grade WHERE korean < 90;


조건줘서 SELECT.

mysql> SELECT * FROM grade LIMIT 10;


결과중 처음부터 10개만 가져오기

mysql> SELECT * FROM grade LIMIT 100, 10;


결과중 100번째부터 10개만 가져오기. 첫번째 레코드는 0번 부터 시작한다.

UPDATE

mysql> UPDATE tablename SET col1=새값 WEHER 조건



DELETE

mysql> DELETE FROM tablename WEHRE 조건



mysql에서 쿼리 결과 세로로 보기
-E 옵션을 줘서 실행한다.

$ mysql -E -u root -p mysql



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

1. Mysql 기본 사용법

 

->Mysql 데이터베이스 접속하기

# mysql -u root mysql

 

-> mysql 관리자 root 패스워드 설정하기

# mysql -u root mysql

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

 

-> 빠져나간후 데이터베이스를 재시작

# mysqladmin -u root reload

 

->패스워드 입력

# mysql -u root -p mysql

 

< 여러가지 관련 명령어 >

 

->데이터베이스 확인

mysql> show databases;

 

->테이블 확인

msyql> show databases; 

msyql> desc user =>동일한 결과

 

2. 데이터베이스 생성 및 삭제

 

->데이터베이스 생성

① 첫번째 방법

# mysql -u root -p mysqlll

    msyql> create database TESTDB;

    msyql> show databases;

 

② 두번째 방법

# ./mysqladmin -u root -p create testdb2

Enter password:

# ./mysql -u root -p mysql

Enter passwor

 

cd /

msyql> show databases;

msyql> exit

Bye

#

 

->데이타 베이스 삭제

# ./mysqladmin -u root -p drop testdb2

Enter password:

 

mysql> drop database testdb2

 

# ./mysql -u root -p mysql

msyql> show databases;

 

3. 새로 생성한 데이터베이스 등록하기

-> 데이터베이스를 새로 생성한 후에는 mysql 이라는 관리용 데이터베이스에 등록

->mysql 이라는 데이터베이스의 db라는 테이블에 TESTDB를 등록한 것

msyql> insert into db  values('%','TESTDB','root','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

msyql> select host, db, user from db

 

4.  Mysql 사용자등록(데이터베이스 소유자)

->mysql 을 사용할 사용자는 반드시 user 라는 테이블에 등록을 해줘야함

msyql> insert into user (host, user, password) values('localhost', 'sspark', password('shcm0816'));

 

->정상적인 등록여부 확인

msyql> select host, user, password from user; 

 

->sspark이라는 사용자로 mysql 데이터베이스로 접속

msyql> mysql -u sspark -p

Enter password:

 

->새로운 데이터베이스를 생성하거나 새로운 사용자를 생성한 후에는 반드시 reload를 해줘야함

# mysqladmin -u root -p reload

Enter password:

 

5. 테이블 생성 및 삭제

msyql> create table testtable (

         ->uid mediumint(4) unsigned DEFAULT '0' NOT NULL auto_increment,

         -> name varchar(12) DEFAULT "" NOT NULL,

         -> email varchar (20) DEFAULT "" NOT NULL,

         -> PRIMARY KEY (uid)

         -> );

Query OK, 0 rows affected (0.00 sec)

msyql>show tables;

 

-> 필드 구조가 정의한 필드구조로 생성되었는지 확인

msyql> desc testtable;

 

-> 삭제

msyql> drop table testtable;

mysql> show tables;

 

6. 테이블속성 및 구조변경법

ALTER TABLE 테이블명 CHANGE[COLUMN] 필드명 필드타입

-> 기존 테이블에 필드 추가하기

 

mysql> er table testtable add column homepage varchar(30);

mysql> desc testtable;

 

-> 기존에 필드 속성 변경하기

ALTER TABLE 테이블명 CHANGE[COLUMN] 기존필드명 새필드명 필드타입

mysql> er table testtable change column homepage home varchar(50);

 

-> 기존에 필드 삭제

ALTER TABLE 테이블명 DROP [COLUMN] 필드명

mysql> er table testtable drop column home;

mysql> desc testtable;

 

-> 기존의 테이블삭제하기

mysql> create table sampletable

mysql> show tables;

mysql> drop table sampletable;

mysql> show tables;

 

7. 데이터 입력하기

mysql> insert into testtable (uid, name, email) values (', 'parksungsoo', sspark09@soback.kornet.net'" target=_blank>'sspark09@soback.kornet.net');

-> 주의: uid라는 필드는 auto_increment 라는 속성으로 생성했기 때문에 이 속성을 가진 필드들은 실제로 데이터값을 주지 않아도 자동적으로 1씩 증가.

 

->삽입할 필드는 생략가능

mysql> insert into testtable values(','sontaesoo','shutterbug@orgio.net');

 

->특정 필드에만 데이터를 입력할 경우에는 입력할 필드이름만을 나열 그에 해당하는 데이터 입력

mysql> insert into testtable (uid,name) values(','junwooki');

->정상적으로 입력되었는지 확인

mysql> select * from testtable;

 

8. 데이터 검색

SELECT(데이터검색하기)

->데이터검색의 일반적인 방법

 

-> 테이블의 모든 테이터를 검색

mysql> select * from testtable;

 

-> uid와 name 필드만을 조회

mysql> select uid, name from testtable;

->where문을 사용하여 특정 조건에 맞는 데이터만을 검색

mysql> select * from testtable where name = "sontaesoo";

 

->출력 결과 레코드의 중복제거하기(DISTINCT)

SELECT DISTINCT sex FROM testtable

 

->다양한 검색 방법

 

->'soo'라는 문자가 포함된 데이터를 모두 검색

->SELECT name FROM testtable WHERE name LIKE '%soo%'

mysql> select name from testtable where name LIKE '%soo%';

 

->특정한  한 문자로 시작하는 데이터만을 출력할 때에 사용하는 조회형식

SELECT name FROM testable WHERE name LIKE 'park%'

mysql> select name from testtable where name LIKE 'park%';

 

->특정 필드에 데이터가 NULL 인 경우를 조회한것

SELECT uid, name FROM testtable WHERE age IS NULL

mysql>select uid, name from testtable where age IS NULL;

 

-> 특정 필드의 데이터가 NULL이 아닌 경우

SELECT uid, name FROM testtable WHERE age IS NULL

 mysql>select uid, name from testtable where age IS NOT NULL;

 

-> SELECT name, uid, email FROM testtable WHERE savem > 5000 AND sex='M'

-> SELECT name, uid, savem FROM testtable WHERE savem >= 5000 ORDER BY savem  

     DESC

-> SELECT count(*) FROM testtable WHERE sex='M'

-> SELECT avg(savem) FROM testtable WHERE sex='M'

 

9. 데이터 수정하기

->UPDATE 테이블명 SET 필드명=필드값 또는 산술식 {, 필드명 = 필드값 또는 산술식}*[WHERE

   검색조건]

mysql> select * from testtable;

 

->uid 4 번의 데이터에 name 값과 email을 입력해 봄

mysql> update testtable set name = 'junyangmi' where age = 23;

mysql> update testtable set email = jym@superuser.co.kr'" target=_blank>'jym@superuser.co.kr' where age = 23;

mysql> select * from testtable;

 

-> uid 1 인 사람 (parksungsoo)의 나이를 25살로 수정

mysql> update testtable set age= 25 where uid =1;

 

->uid 2인 사람의 나이를 30살로 수정

mysql> update testtable set age = 30 where uid =2;

mysql> update testtable set age = 41 where uid=3;

 

-> 한해가 지났으므로 모든 사람의 나이를 한 살씩 증가

mysql> update testtable set age = age + 1;

mysql> select * from testtable;

 

10. 데이터 삭제하기(delete)

->Delete FROM 테이블명 [WHERE 검색조건]

mysql> select * from testtable;

mysql> delete from testtable where uid = 3;

 

11. 새로운 사용자 등록

-> Mysql 에 root로 접속

./mysql -u root -p

->Mysql DB 선택

mysql> use mysql;

mysql> show tables;

 

->새로운 DB 생성

mysql> create database xlare;

 

-> user 테이블에 입력 (user 라는 테이블에 새로운 사용자의 계정이름과 권한설정을 할 차례)

-> 호스팅사용자에 대한 설정 user테이블에 현재 사용장0ㅔ 대한 권한들을 모두 'N'로 설정

mysql> insert into user valuses('localhost', 'xlare', password('123'),'Y','Y','Y','Y','Y','N','N','N','N','N','N','N','N','N');

 

->user  테이블에 입력확인

mysql> select * from user where user = 'xlare' ;

 

-> db 테이블에 입력

mysql> insert into db values('localhost', 'xlare', 'xlare', 'Y','Y','Y','Y','Y','N','N','N','N','N',);

 

-> db 테이블에 입력 확인

mysql> select * from db where db = 'xlare';

 

-> 새로운 설정을 바로 적용키위해 mysqladmin 이라는 관리자명령어로 mysql 을 재시작

->reload를 해주지 않으면 생성했던 것들이 적용이 되지 않음

# ./mysqladmin -u root -p reload;

 

12. 일반사용자 권한설정(보안사항)

#./mysql -u root -p mysql

Enter password:

mysql> show tables;

--------------------

tables in mysql

--------------------

columns_priv

db

func

host

tables_priv

user

----------------------

 

->columns_priv 테이블

* 모든 특정 DB 의 특정 User 에 대한 특정 테이블의 각 컬럼에 대한 select, insert, update,

   reference 권한을 설정

mysql> desc columns_priv;

->db 테이블

* db라는 테이블에는 특정 DB에 대한 user들의 여러가지 권한들을 설정하는 테이블

mysql> desc db;

-> kebia 라는 데이터베이스의 소유자와 그 권한에 대해서 알아보고자 함.

-> kebia라는 데이터베이스의 소유자는 hyung 이라는 mysqkl 사용자이며 이 hyung 이라는 사용자

     는 이 kebia 라는 데이터베이스에 대한 각종 권한을 볼수 있음.

mysql> select * from db where db = 'kebia';

| localhost | kebia | hyung | Y  |   - - - - - ...........

------------------------

 

->tables_priv테이블

* columns_priv 테이블처럼 각 데이터베이스와 사용자 및 그 테이블에 대한 권한 설정

mysql > desc tables_priv;

---------------------

 

->user 테이블 : 새로운 사용자를 생성할때 이 테이블에 등록

-> 특정 사용자에 대한 Mysql에 존재하는 모든 데이터베이스에 대한 권한설정

-> 특정 사용자의 어떤권한에 대한 사항은 특정 데이터베이스가 아니라 Mysql에 존재하는 모든 데

     이터베이스에 권한이 주어짐.

-> host와 user, password 항목을 제외한 나머지 권한들은 모두 'N"로 설정

->특정한 사용자에 대한 특정한 데이터베이스에 대한 권한을 주려면 위에서 보았던 db라는 테이블

    에서 그 권한설정을 하는것이 안전함

 

13 .Mysql root 암호 변경하기

-> 방법 1:  mysqladmin 이라는 명령어 사용

# ./mysqladmin -u root -p password 12345

 

->방법 2: mysql의 set 이란 명령어로 root 암호 변경

# ./mysql -u root -p mysql

mysql> set password for root=passwd('12345678');

 

-> 방법 3: mysql 데이터베이스로 접속하여 update문을 사용하는 방법

# ./mysql -u root -p mysql

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

mysql> flush privileges;

 

->flush-privileges: 권한 테이블을 재시작한다. 권한 설정을 변경했을경우 반드시 재시작

mysql> flush privileges;

 

14. root 패스워드를 잊어버렸을 때는 어떻게?

->단계 1: 실행중인 mysql 종료

# ps -ef | grep mysqld

# killall mysqld

 

->단계 2: grant-table 미사용모드로 mysql시작 및 root로 접속

# .safe_mysqld --skip-grant-tables&

 

-> 단계 3: update문으로 root사용자 패스워드 변경

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

mysql> flush privileges;

 

-> 단계 4: 실행중인 mysql 다시 종료

# ps -ef | grep mysqld

# killall mysqld

 

-> 단계 5: 일반모드로 Mysql 재시작

# ./safe_mysqld&

# ps -ef | grep mysql

 

15. 특정 테이블의 구조보기(show columns from 테이블)

-> 특정테이블의 필드명 type, 설정값들을 보기 위한 것

-> 특정한 테이블의 칼럼(필드)구조를 보려면 "show columns from 테이블명"

-> 좀더 편리하여 많이 사용되는 명령문 " desc 테이블명"으로 확인

mysql> show columns form user;

 

->특정 테이블의 인덱스 보기

mysql> show index from user;

 

-> 데이타베이스의 설정상태 보기(show status)

mysql> show status;

# ./mysqladmin -u root -p status

 

-> 데이터베이스의 설정환경변수와 값보기(show variables)

mysql> show variables;

# ./mysqladmin -u root -p variables

 

-> 현재 데이터베이스에 연결된 프로세스들 보기(show processlist)

# ./mysqladmin -u root -p processlist

끝으로 원격에서 접근할려면 아래 내용을 참조하면 됩니다.

 

mysql 원격접속 권한 설정

 

>use mysql

>grant all privileges on *.* to 'oops'@'192.168.5.14'      

>identified by 'passwd' with grant option;

 

ip대신 % 를 주면 모든 호스트허용!

 

oops 라는 유저가 모든 권한을 부여받을 수있다 . 단 해당 아이피의 호스트 에서만.

 

이와 같은 설정은 select host,user from user; 로 확인해볼수 있다.

728x90
반응형
728x90
반응형

MySQL 사용법 (요약)

이강성

2000.1.26

 

시작하기/끝내기

시작하기

형식 : mysql -h hostname -u user_name -p DBname          

       hostname 의 default : localhost          user_name의 default : login name

    예1) mysql -u guest   # user가 guest이고 password가 없을 경우 (localhost) 
    예1) mysql -h sr.kwangwoon.ac.kr -u guest   # user가 guest이고 password가 없을 경우 
    예2) mysql -u guest -p  # password를 입력해야 함 
           Enter password:******** 
    예3) mysql -u guest  pythonDB
     
    참고) 컴퓨터 sr에서 mysql을 이용하여 연습을 하려면 여기서 사용하는 모든 데이터베이스 명 대신에 
    test를 사용하라. 사용자는 누구라도 되고, 테이블을 만들고 검색하고 삭제할 수 있다. 
    암호는 주어져 있지 않다.
    실행예:  mysql -u guest test

끝내기

    mysql> QUIT 
    mysql> Ctrl-D 
     
    *mysql> 은 프롬프트임

 

패스워드 설정/변경

변경:

    mysql -u root -p
    Enter password:*****
    mysql> use mysql
    mysql> update user set Password=PASSWORD('password') where user='userid';
    mysql> flush privileges;

 

질의 입력하기

버전과 날짜 보기:

* 명령에 대소문자 구분은 없다 (case insensitive). mysql> 은 프롬프트임.
 
    mysql> SELECT VERSION(), CURRENT_DATE;
    +--------------+--------------+
    | version()    | CURRENT_DATE |
    +--------------+--------------+
    | 3.22.20a-log | 1999-03-19   |
    +--------------+--------------+
    1 row in set (0.01 sec)
    mysql> 

계산기로 사용하기:

    mysql> SELECT SIN(PI()/4), (4+1)*5;  
    +-------------+---------+  
    | SIN(PI()/4) | (4+1)*5 |  
    +-------------+---------+  
    |    0.707107 |      25 |  
    +-------------+---------+

여러 명령 한줄에 입력하기:

    mysql> SELECT VERSION(); SELECT NOW();  
    +--------------+  
    | version()    |  
    +--------------+  
    | 3.22.20a-log |  
    +--------------+
    +---------------------+  
    | NOW()               |  
    +---------------------+  
    | 1999-03-19 00:15:33 |  
    +---------------------+

여려줄에 한 명령 입력하기:

    mysql> SELECT  
        -> USER()  
        -> ,  
        -> CURRENT_DATE;  
    +--------------------+--------------+  
    | USER()             | CURRENT_DATE |  
    +--------------------+--------------+  
    | joesmith@localhost | 1999-03-18   |  
    +--------------------+--------------+

 

데이터베이스 만들고 선택하기

데이터베이스 보기 :

    SHOW DATABASES; 
    +----------+  
    | Database |  
    +----------+  
    | mysql    |  
    | python   |  
    | test     |  
    +----------+

사용할 데이터베이스 선택하기 :

    USE test

관리자로 하여금 지정된 사용자만 DB를 접근하도록 하기 :

      GRANT ALL ON dbname.* TO your_mysql_name;

새로운 데이터베이스 만들기:

    CREATE DATABASE menagerie;

관리자가 해주던지 아니면 본인이 해야한다(허가권이 있다면).

사용할 데이터베이스 선택 :

    USE menagerie

mysql을 호출할 때 db선택하기 :

    mysql -h host -u user -p menagerie

데이터베이스 없애기: (한번에 모든 것을 날려 버리므로 조심해서 사용할 것)

    DROP DATABASE database_name

 

테이블 만들기 / 없애기

테이블 보기 :

    SHOW TABLES; 
     Empty set (0.00 sec)  

테이블 만들기 :

    CREATE TABLE pet ( 
        -> name VARCHAR(20),  
        -> owner VARCHAR(20), 
        -> species VARCHAR(20),  
        -> sex CHAR(1),  
        -> birth DATE,  
        -> death DATE);

테이블 다시 보기:

    mysql> SHOW TABLES; 
    +---------------------+ 
    | Tables in menagerie | 
    +---------------------+ 
    | pet                 | 
    +---------------------+ 

테이블 확인하기:

    mysql> DESCRIBE pet; 
    +---------+-------------+------+-----+---------+-------+ 
    | Field   | Type        | Null | Key | Default | Extra | 
    +---------+-------------+------+-----+---------+-------+ 
    | name    | varchar(20) | YES  |     | NULL    |       | 
    | owner   | varchar(20) | YES  |     | NULL    |       | 
    | species | varchar(20) | YES  |     | NULL    |       | 
    | sex     | char(1)     | YES  |     | NULL    |       | 
    | birth   | date        | YES  |     | NULL    |       | 
    | death   | date        | YES  |     | NULL    |       | 
    +---------+-------------+------+-----+---------+-------+

테이블 없애기:

    mysql> DROP table table_name;

 

데이터를 테이블에 저장하기

 

테이블에 입력할 정보가 다음과 같다고 하자:

name

owner

species

sex

birth

death

Fluffy

Harold

cat

f

1993-02-04

Claws

Gwen

cat

m

1994-03-17

 

Buffy

Harold

dog

f

1989-05-13

 

Fang

Benny

dog

m

1990-08-27

 

Bowser

Diane

dog

m

1998-08-31

1995-07-29

Chirpy

Gwen

bird

f

1998-09-11

 

Whistler

Gwen

bird

1997-12-09

Slim

Benny

snake

m

1996-04-29

 

 

텍스트 파일에 정보가 있다면 쉽게 일괄적으로 테이블에 입력할 수 있다. 각 레코드는 한 라인에 입력되며, 각 필드는 탭으로 구분되어야 하고, NULL인 필드는 \N이 입력되어야 한다. 예:  

Whistler

Gwen

bird

\N

1997-12-09

\N

 

이와 같은 정보가 'pet.txt' 파일에 저장되어 있다고 한다면, 다음의 명령으로 일괄적으로 읽어들일 수 있다.

    mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;

한번에 한 레코드씩 입력하려면 다음과 같은 코맨드라인 명령을 쓴다.

    mysql> INSERT INTO pet  
        -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);

이 경우 값이 없으면 NULL을 사용한다. (\N는 아님)

 

테이블에서 데이터 검색하기

SELECT 문을 이용한다:

    SELECT what_to_select  
    FROM which_table  
    WHERE conditions_to_satisfy

전체 데이터 선택하기

    mysql> SELECT * FROM pet; 
    +----------+--------+---------+------+------------+------------+ 
    | name     | owner  | species | sex  | birth      | death      | 
    +----------+--------+---------+------+------------+------------+ 
    | Fluffy   | Harold | cat     | f    | 1993-02-04 | NULL       | 
    | Claws    | Gwen   | cat     | m    | 1994-03-17 | NULL       | 
    | Buffy    | Harold | dog     | f    | 1989-05-13 | NULL       | 
    | Fang     | Benny  | dog     | m    | 1990-08-27 | NULL       | 
    | Bowser   | Diane  | dog     | m    | 1998-08-31 | 1995-07-29 | 
    | Chirpy   | Gwen   | bird    | f    | 1998-09-11 | NULL       | 
    | Whistler | Gwen   | bird    | NULL | 1997-12-09 | NULL       | 
    | Slim     | Benny  | snake   | m    | 1996-04-29 | NULL       | 
    | Puffball | Diane  | hamster | f    | 1999-03-30 | NULL       | 
    +----------+--------+---------+------+------------+------------+

정보 갱신하기: Bowser의 생일을 1998년에서 1989로 수정하려면,

    mysql> UPDATE pet SET birth = "1989-08-31" WHERE name = "Bowser";

행 선택하여 출력하기:

    mysql> SELECT * FROM pet WHERE name = "Bowser"; 
    +--------+-------+---------+------+------------+------------+ 
    | name   | owner | species | sex  | birth      | death      | 
    +--------+-------+---------+------+------------+------------+ 
    | Bowser | Diane | dog     | m    | 1989-08-31 | 1995-07-29 | 
    +--------+-------+---------+------+------------+------------+
     
    mysql> SELECT * FROM pet WHERE birth >= "1998-1-1"; 
    +----------+-------+---------+------+------------+-------+ 
    | name     | owner | species | sex  | birth      | death | 
    +----------+-------+---------+------+------------+-------+ 
    | Chirpy   | Gwen  | bird    | f    | 1998-09-11 | NULL  | 
    | Puffball | Diane | hamster | f    | 1999-03-30 | NULL  | 
    +----------+-------+---------+------+------------+-------+
 
    mysql> SELECT * FROM pet WHERE species = "dog" AND sex = "f"; 
    +-------+--------+---------+------+------------+-------+ 
    | name  | owner  | species | sex  | birth      | death | 
    +-------+--------+---------+------+------------+-------+ 
    | Buffy | Harold | dog     | f    | 1989-05-13 | NULL  | 
    +-------+--------+---------+------+------------+-------+
     
    mysql> SELECT * FROM pet WHERE species = "snake" OR species = "bird"; 
    +----------+-------+---------+------+------------+-------+ 
    | name     | owner | species | sex  | birth      | death | 
    +----------+-------+---------+------+------------+-------+ 
    | Chirpy   | Gwen  | bird    | f    | 1998-09-11 | NULL  | 
    | Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL  | 
    | Slim     | Benny | snake   | m    | 1996-04-29 | NULL  | 
    +----------+-------+---------+------+------------+-------+
     
    mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m") 
               -> OR (species = "dog" AND sex = "f"); 
    +-------+--------+---------+------+------------+-------+ 
    | name  | owner  | species | sex  | birth      | death | 
    +-------+--------+---------+------+------------+-------+ 
    | Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  | 
    | Buffy | Harold | dog     | f    | 1989-05-13 | NULL  | 
    +-------+--------+---------+------+------------+-------+

열 선택하여 출력하기

    mysql> SELECT name, birth FROM pet; 
    +----------+------------+ 
    | name     | birth      | 
    +----------+------------+ 
    | Fluffy   | 1993-02-04 | 
    | Claws    | 1994-03-17 | 
    | Buffy    | 1989-05-13 | 
    | Fang     | 1990-08-27 | 
    | Bowser   | 1989-08-31 | 
    | Chirpy   | 1998-09-11 | 
    | Whistler | 1997-12-09 | 
    | Slim     | 1996-04-29 | 
    | Puffball | 1999-03-30 | 
    +----------+------------+
     
    mysql> SELECT owner FROM pet; 
    +--------+ 
    | owner  | 
    +--------+ 
    | Harold | 
    | Gwen   | 
    | Harold | 
    | Benny  | 
    | Diane  | 
    | Gwen   | 
    | Gwen   | 
    | Benny  | 
    | Diane  | 
    +--------+
     
    mysql> SELECT DISTINCT owner FROM pet; 
    +--------+ 
    | owner  | 
    +--------+ 
    | Benny  | 
    | Diane  | 
    | Gwen   | 
    | Harold | 
    +--------+
     
    mysql> SELECT name, species, birth FROM pet 
        -> WHERE species = "dog" OR species = "cat"; 
    +--------+---------+------------+ 
    | name   | species | birth      | 
    +--------+---------+------------+ 
    | Fluffy | cat     | 1993-02-04 | 
    | Claws  | cat     | 1994-03-17 | 
    | Buffy  | dog     | 1989-05-13 | 
    | Fang   | dog     | 1990-08-27 | 
    | Bowser | dog     | 1989-08-31 | 
    +--------+---------+------------+

정렬하기

    mysql> SELECT name, birth FROM pet ORDER BY birth; 
    +----------+------------+ 
    | name     | birth      | 
    +----------+------------+ 
    | Buffy    | 1989-05-13 | 
    | Bowser   | 1989-08-31 | 
    | Fang     | 1990-08-27 | 
    | Fluffy   | 1993-02-04 | 
    | Claws    | 1994-03-17 | 
    | Slim     | 1996-04-29 | 
    | Whistler | 1997-12-09 | 
    | Chirpy   | 1998-09-11 | 
    | Puffball | 1999-03-30 | 
    +----------+------------+
     
    mysql> SELECT name, birth FROM pet ORDER BY birth DESC; 
    +----------+------------+ 
    | name     | birth      | 
    +----------+------------+ 
    | Puffball | 1999-03-30 | 
    | Chirpy   | 1998-09-11 | 
    | Whistler | 1997-12-09 | 
    | Slim     | 1996-04-29 | 
    | Claws    | 1994-03-17 | 
    | Fluffy   | 1993-02-04 | 
    | Fang     | 1990-08-27 | 
    | Bowser   | 1989-08-31 | 
    | Buffy    | 1989-05-13 | 
    +----------+------------+
     
    mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC; 
    +----------+---------+------------+ 
    | name     | species | birth      | 
    +----------+---------+------------+ 
    | Chirpy   | bird    | 1998-09-11 | 
    | Whistler | bird    | 1997-12-09 | 
    | Claws    | cat     | 1994-03-17 | 
    | Fluffy   | cat     | 1993-02-04 | 
    | Fang     | dog     | 1990-08-27 | 
    | Bowser   | dog     | 1989-08-31 | 
    | Buffy    | dog     | 1989-05-13 | 
    | Puffball | hamster | 1999-03-30 | 
    | Slim     | snake   | 1996-04-29 | 
    +----------+---------+------------+

날짜계산하기

    mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365 FROM pet; 
    +----------+-------------------------------------+ 
    | name     | (TO_DAYS(NOW())-TO_DAYS(birth))/365 | 
    +----------+-------------------------------------+ 
    | Fluffy   |                                6.15 | 
    | Claws    |                                5.04 | 
    | Buffy    |                                9.88 | 
    | Fang     |                                8.59 | 
    | Bowser   |                                9.58 | 
    | Chirpy   |                                0.55 | 
    | Whistler |                                1.30 | 
    | Slim     |                                2.92 | 
    | Puffball |                                0.00 | 
    +----------+-------------------------------------+
     
    mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365 AS age 
        -> FROM pet ORDER BY name; 
    +----------+------+ 
    | name     | age  | 
    +----------+------+ 
    | Bowser   | 9.58 | 
    | Buffy    | 9.88 | 
    | Chirpy   | 0.55 | 
    | Claws    | 5.04 | 
    | Fang     | 8.59 | 
    | Fluffy   | 6.15 | 
    | Puffball | 0.00 | 
    | Slim     | 2.92 | 
    | Whistler | 1.30 | 
    +----------+------+
     
    mysql>  SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365 AS age 
        ->  FROM pet ORDER BY age; 
    +----------+------+ 
    | name     | age  | 
    +----------+------+ 
    | Puffball | 0.00 | 
    | Chirpy   | 0.55 | 
    | Whistler | 1.30 | 
    | Slim     | 2.92 | 
    | Claws    | 5.04 | 
    | Fluffy   | 6.15 | 
    | Fang     | 8.59 | 
    | Bowser   | 9.58 | 
    | Buffy    | 9.88 | 
    +----------+------+
     
    mysql>  SELECT name, birth, death, (TO_DAYS(death)-TO_DAYS(birth))/365 AS age 
        ->  FROM pet WHERE death IS NOT NULL ORDER BY age; 
    +--------+------------+------------+------+ 
    | name   | birth      | death      | age  | 
    +--------+------------+------------+------+ 
    | Bowser | 1989-08-31 | 1995-07-29 | 5.91 | 
    +--------+------------+------------+------+

DATE에서 해, 달, 일의 정보를 꺼내려면, YEAR(), MONTH(), DAYOFMONTH()를 이용한다.

    mysql> SELECT name, birth, MONTH(birth) FROM pet; 
    +----------+------------+--------------+ 
    | name     | birth      | MONTH(birth) | 
    +----------+------------+--------------+ 
    | Fluffy   | 1993-02-04 |            2 | 
    | Claws    | 1994-03-17 |            3 | 
    | Buffy    | 1989-05-13 |            5 | 
    | Fang     | 1990-08-27 |            8 | 
    | Bowser   | 1989-08-31 |            8 | 
    | Chirpy   | 1998-09-11 |            9 | 
    | Whistler | 1997-12-09 |           12 | 
    | Slim     | 1996-04-29 |            4 | 
    | Puffball | 1999-03-30 |            3 | 
    +----------+------------+--------------+

5월에 태어난 동물을 출력하려면:

    mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5; 
    +-------+------------+ 
    | name  | birth      | 
    +-------+------------+ 
    | Buffy | 1989-05-13 | 
    +-------+------------+

패턴 매칭

'%'는 (0을 포함한) 임의의 수의 문자와 매칭한다. 'b'로 시작하는 이름의 동물을 찾으려면,

    mysql> SELECT * FROM pet WHERE name LIKE "b%"; 
    +--------+--------+---------+------+------------+------------+ 
    | name   | owner  | species | sex  | birth      | death      | 
    +--------+--------+---------+------+------------+------------+ 
    | Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       | 
    | Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 | 
    +--------+--------+---------+------+------------+------------+

'fy'로 끝나는 이름의 동물은,

    mysql> SELECT * FROM pet WHERE name LIKE "%fy"; 
    +--------+--------+---------+------+------------+-------+ 
    | name   | owner  | species | sex  | birth      | death | 
    +--------+--------+---------+------+------------+-------+ 
    | Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  | 
    | Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  | 
    +--------+--------+---------+------+------------+-------+

'w'가 있는 이름의 동물은,

    mysql> SELECT * FROM pet WHERE name LIKE "%w%"; 
    +----------+-------+---------+------+------------+------------+ 
    | name     | owner | species | sex  | birth      | death      | 
    +----------+-------+---------+------+------------+------------+ 
    | Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       | 
    | Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 | 
    | Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       | 
    +----------+-------+---------+------+------------+------------+

꼭 다섯자로 구성된 이름의 동물은,

    mysql> SELECT * FROM pet WHERE name LIKE "_____"; 
    +-------+--------+---------+------+------------+-------+ 
    | name  | owner  | species | sex  | birth      | death | 
    +-------+--------+---------+------+------------+-------+ 
    | Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  | 
    | Buffy | Harold | dog     | f    | 1989-05-13 | NULL  | 
    +-------+--------+---------+------+------------+-------+

확장된 정규식

  • '.'는 임의의 한자와 매치
  • '[abc] 는 'a' 또는 'b' 또는 'c'
  • '*'는 0이상의 임의의 수의 앞선 문자와 매치 'x*'는 임의의 수의 'x'와 매치. [0-9]*는 임의의 수의 숫자와, '.*' 는 임의의 문자와 매치
  • 대소문자를 구별함 (case sensitive)
  • 테스트되는 임의의 어떤 부분에서 매치되면 됨 (SQL패턴 매치는 전체가 다 매치되어야함)
  • 시작과 끝을 매치하기 위하여 '^' '$'를 사용한다.

'b'혹은 'B'로 시작하는 이름:

    mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]"; 
    +--------+--------+---------+------+------------+------------+ 
    | name   | owner  | species | sex  | birth      | death      | 
    +--------+--------+---------+------+------------+------------+ 
    | Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       | 
    | Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 | 
    +--------+--------+---------+------+------------+------------+

마지막에 `fy' 로 끝나는 이름:

    mysql> SELECT * FROM pet WHERE name REGEXP "fy$"; 
    +--------+--------+---------+------+------------+-------+ 
    | name   | owner  | species | sex  | birth      | death | 
    +--------+--------+---------+------+------------+-------+ 
    | Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  | 
    | Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  | 
    +--------+--------+---------+------+------------+-------+

`w'를 포함하는 이름:

    mysql> SELECT * FROM pet WHERE name REGEXP "[wW]"; 
    +----------+-------+---------+------+------------+------------+ 
    | name     | owner | species | sex  | birth      | death      | 
    +----------+-------+---------+------+------------+------------+ 
    | Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       | 
    | Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 | 
    | Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       | 
    +----------+-------+---------+------+------------+------------+

다섯 문자로 이루어진 이름:

    mysql> SELECT * FROM pet WHERE name REGEXP "^.....$"; 
    +-------+--------+---------+------+------------+-------+ 
    | name  | owner  | species | sex  | birth      | death | 
    +-------+--------+---------+------+------------+-------+ 
    | Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  | 
    | Buffy | Harold | dog     | f    | 1989-05-13 | NULL  | 
    +-------+--------+---------+------+------------+-------+

`{n}' 연산자 (repeat-n-times)를 사용하여 아래와 같이 쓸 수도 있음:

    mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$"; 
    +-------+--------+---------+------+------------+-------+ 
    | name  | owner  | species | sex  | birth      | death | 
    +-------+--------+---------+------+------------+-------+ 
    | Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  | 
    | Buffy | Harold | dog     | f    | 1989-05-13 | NULL  | 
    +-------+--------+---------+------+------------+-------+

행의 수 세기

전체 엔트리 수 세기:

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

주인이 가지고 있는 동물의 수 세기:

    mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner; 
    +--------+----------+ 
    | owner  | COUNT(*) | 
    +--------+----------+ 
    | Benny  |        2 | 
    | Diane  |        2 | 
    | Gwen   |        3 | 
    | Harold |        2 | 
    +--------+----------+

종별 수:

    mysql> SELECT species, COUNT(*) FROM pet GROUP BY species; 
    +---------+----------+ 
    | species | COUNT(*) | 
    +---------+----------+ 
    | bird    |        2 | 
    | cat     |        2 | 
    | dog     |        3 | 
    | hamster |        1 | 
    | snake   |        1 | 
    +---------+----------+

성별 수:

    mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex; 
    +------+----------+ 
    | sex  | COUNT(*) | 
    +------+----------+ 
    | NULL |        1 | 
    | f    |        4 | 
    | m    |        4 | 
    +------+----------+

종 및 성별 수:

    mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex; 
    +---------+------+----------+ 
    | species | sex  | COUNT(*) | 
    +---------+------+----------+ 
    | bird    | NULL |        1 | 
    | bird    | f    |        1 | 
    | cat     | f    |        1 | 
    | cat     | m    |        1 | 
    | dog     | f    |        1 | 
    | dog     | m    |        2 | 
    | hamster | f    |        1 | 
    | snake   | m    |        1 | 
    +---------+------+----------+

개와 고양이에 대해서만 적용:

    mysql> SELECT species, sex, COUNT(*) FROM pet 
        -> WHERE species = "dog" OR species = "cat" 
        -> GROUP BY species, sex; 
    +---------+------+----------+ 
    | species | sex  | COUNT(*) | 
    +---------+------+----------+ 
    | cat     | f    |        1 | 
    | cat     | m    |        1 | 
    | dog     | f    |        1 | 
    | dog     | m    |        2 | 
    +---------+------+----------+

알려진 성별에 대해서만 성별 동물의 수:

    mysql> SELECT species, sex, COUNT(*) FROM pet 
        -> WHERE sex IS NOT NULL 
        -> GROUP BY species, sex; 
    +---------+------+----------+ 
    | species | sex  | COUNT(*) | 
    +---------+------+----------+ 
    | bird    | f    |        1 | 
    | cat     | f    |        1 | 
    | cat     | m    |        1 | 
    | dog     | f    |        1 | 
    | dog     | m    |        2 | 
    | hamster | f    |        1 | 
    | snake   | m    |        1 | 
    +---------+------+----------+

 

하나이상의 테이블 사용하기

테이블 하나 더 만들기:

    mysql> CREATE TABLE event  ( 
        -> name VARCHAR(20),  
        -> date DATE, 
        -> type VARCHAR(15),  
        -> remark VARCHAR(255));

파일 'event.txt'

Fluffy

1995-05-15

litter

4 kittens, 3 female, 1 male

Buffy

1993-06-23

litter

5 puppies, 2 female, 3 male

Buffy

1994-06-19

litter

3 puppies, 3 female

Chirpy

1999-03-21

vet

needed beak straightened

Slim

1997-08-03

vet

broken rib

Bowser

1991-10-12

kennel

 

Fang

1991-10-12

kennel

 

Fang

1998-08-28

birthday

Gave him a new chew toy

Claws

1998-03-17

birthday

Gave him a new flea collar

Whistler

1998-12-09

birthday

First birthday

 

데이터 읽어들이기:

    mysql> LOAD DATA LOCAL INFILE "event.txt" INTO TABLE event;

출산 때의 동물의 나이를 계산 (JOIN):

    mysql> SELECT pet.name, (TO_DAYS(date) - TO_DAYS(birth))/365 AS age, remark 
        -> FROM pet, event 
        -> WHERE pet.name = event.name AND type = "litter"; 
    +--------+------+-----------------------------+ 
    | name   | age  | remark                      | 
    +--------+------+-----------------------------+ 
    | Fluffy | 2.27 | 4 kittens, 3 female, 1 male | 
    | Buffy  | 4.12 | 5 puppies, 2 female, 3 male | 
    | Buffy  | 5.10 | 3 puppies, 3 female         | 
    +--------+------+-----------------------------+

짝찾아보기 (JOINing itself):

    mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species 
        -> FROM pet AS p1, pet AS p2 
        -> WHERE p1.species = p2.species AND p1.sex = "f" AND p2.sex = "m"; 
    +--------+------+--------+------+---------+ 
    | name   | sex  | name   | sex  | species | 
    +--------+------+--------+------+---------+ 
    | Fluffy | f    | Claws  | m    | cat     | 
    | Buffy  | f    | Fang   | m    | dog     | 
    | Buffy  | f    | Bowser | m    | dog     | 
    +--------+------+--------+------+---------+

 

기타의 연산

 

    CREATE TABLE shop ( 
     article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL, 
     dealer  CHAR(20)                 DEFAULT ''     NOT NULL, 
     price   DOUBLE(16,2)             DEFAULT '0.00' NOT NULL, 
     PRIMARY KEY(article, dealer));
 
    INSERT INTO shop VALUES 
    (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69), 
    (3,'D',1.25),(4,'D',19.95);

전체 데이터 예는:

    SELECT * FROM shop 
    +---------+--------+-------+ 
    | article | dealer | price | 
    +---------+--------+-------+ 
    |    0001 | A      |  3.45 | 
    |    0001 | B      |  3.99 | 
    |    0002 | A      | 10.99 | 
    |    0003 | B      |  1.45 | 
    |    0003 | C      |  1.69 | 
    |    0003 | D      |  1.25 | 
    |    0004 | D      | 19.95 | 
    +---------+--------+-------+

최대 아이템 수는?

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

가장 비싼 항목의 번호, 판매자, 가격?

    SELECT article, dealer, price 
    FROM   shop 
    WHERE  price=(SELECT MAX(price) FROM shop)

각 항목의 최고 가격은?

    SELECT article, MAX(price) AS price 
    FROM   shop 
    GROUP BY article
    +---------+-------+ 
    | article | price | 
    +---------+-------+ 
    |    0001 |  3.99 | 
    |    0002 | 10.99 | 
    |    0003 |  1.69 | 
    |    0004 | 19.95 | 
    +---------+-------+

각 항목에 대하여 가장 비싼 가격의 딜러를 찾아라!

    SELECT article, dealer, price 
    FROM   shop s1 
    WHERE  price=(SELECT MAX(s2.price) 
                  FROM shop s2 
                  WHERE s1.article = s2.article)

항목 삭제하기 (DELETE)

문법 : DELETE FROM tbl_name [WHERE where_condition] [LIMIT rows]

 

외부키(Foreign Key)사용하기

     
    CREATE TABLE persons ( 
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,  
        name CHAR(60) NOT NULL, 
        PRIMARY KEY (id) 
    );
     
    CREATE TABLE shirts ( 
        id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 
        style ENUM('t-shirt', 'polo', 'dress') NOT NULL, 
        color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL, 
        owner SMALLINT UNSIGNED NOT NULL REFERENCES persons, 
        PRIMARY KEY (id) 
    );
     
    INSERT INTO persons VALUES (NULL, 'Antonio Paz');
     
    INSERT INTO shirts VALUES 
    (NULL, 'polo', 'blue', LAST_INSERT_ID()), 
    (NULL, 'dress', 'white', LAST_INSERT_ID()), 
    (NULL, 't-shirt', 'blue', LAST_INSERT_ID());
     
    INSERT INTO persons VALUES (NULL, 'Lilliana Angelovska');
     
    INSERT INTO shirts VALUES 
    (NULL, 'dress', 'orange', LAST_INSERT_ID()), 
    (NULL, 'polo', 'red', LAST_INSERT_ID()), 
    (NULL, 'dress', 'blue', LAST_INSERT_ID()), 
    (NULL, 't-shirt', 'white', LAST_INSERT_ID());
     
    SELECT * FROM persons; 
    +----+---------------------+ 
    | id | name                | 
    +----+---------------------+ 
    |  1 | Antonio Paz         | 
    |  2 | Lilliana Angelovska | 
    +----+---------------------+
     
    SELECT * FROM shirts; 
    +----+---------+--------+-------+ 
    | id | style   | color  | owner | 
    +----+---------+--------+-------+ 
    |  1 | polo    | blue   |     1 | 
    |  2 | dress   | white  |     1 | 
    |  3 | t-shirt | blue   |     1 | 
    |  4 | dress   | orange |     2 | 
    |  5 | polo    | red    |     2 | 
    |  6 | dress   | blue   |     2 | 
    |  7 | t-shirt | white  |     2 | 
    +----+---------+--------+-------+
     
    SELECT s.* FROM persons p, shirts s 
     WHERE p.name LIKE 'Lilliana%' 
       AND s.owner = p.id 
       AND s.color &lt;&gt; 'white';
    +----+-------+--------+-------+ 
    | id | style | color  | owner | 
    +----+-------+--------+-------+ 
    |  4 | dress | orange |     2 | 
    |  5 | polo  | red    |     2 | 
    |  6 | dress | blue   |     2 | 
    +----+-------+--------+-------+

 

테이블 구조 바꾸기

테이블 이름 바꾸기

    t1에서 t2로 이름 바꾸기
     
    mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));
    mysql> ALTER TABLE t1 RENAME t2;

컬럼의 형 바꾸기

    테이블 t2의 컬럼 a를 INTEGER에서 TINYINT NOT NULL 형으로 전환하기
     
    mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL;

컬럼의 길이 바꾸기

    테이블 t2의 컬럼 b CHAR(10)을 c CHAR(20)으로 길이와 이름 바꾸기
     
    mysql> ALTER TABLE t2 CHANGE b c CHAR(20);

새 컬럼 추가하기

    timestamp란 컬럼을 t2에 추가하기
     
    mysql> ALTER TABLE t2 ADD d TIMESTAMP;

인덱스 컬럼 만들기 / primary key 설정하기

    t2에 컬럼 d의 인덱스를 추가하기, 컬럼 a를 주 키로 설정한다.
     
    mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);

컬럼 없애기

    테이블 t2에서 컬럼 c를 없앤다.
     
    mysql> ALTER TABLE t2 DROP COLUMN c;

새 컬럼 추가하기

    테이블 t2에 INT UNSIGNED NOT NULL AUTO_INCREMENT 형 컬럼 c를 새로 만들기
     
    mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT;

테이블 없애기

    mysql> DROP TABLE table_name

 


언어 참조

스트링

    'a string' "another string"

Escape sequences

    \0   An ASCII 0 (NUL) character.   
    \n   A newline character.   
    \t   A tab character.   
    \r   A carriage return character.   
    \b   A backspace character.   
    \'   A single quote (`'') character.   
    \"   A double quote (`"') character.   
    \\   A backslash (`\') character.   
    \%   A `%' character. This is used to search for literal instances of `%' in contexts  
           where `%' would otherwise be interpreted as a wildcard character.   
    \_   A `_' character. This is used to search for literal instances of `_' in contexts  
           where `_' would otherwise be interpreted as a wildcard character. 
    mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; 
    +-------+---------+-----------+--------+--------+ 
    | hello | "hello" | ""hello"" | hel'lo | 'hello | 
    +-------+---------+-----------+--------+--------+
     
    mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; 
    +-------+---------+-----------+--------+--------+ 
    | hello | 'hello' | ''hello'' | hel"lo | "hello | 
    +-------+---------+-----------+--------+--------+
     
    mysql> SELECT "This\nIs\nFour\nlines"; 
    +--------------------+ 
    | This 
    Is 
    Four 
    lines | 
    +--------------------+

숫자

정수형 (1221, 0, -32), 부동소숫점형 (3.4, -23.45e+10, 148.00), 16진수(0x23fc)

Column Types

Numeric types

Column type

Storage required

TINYINT

1 byte

SMALLINT

2 bytes

MEDIUMINT

3 bytes

INT

4 bytes

INTEGER

4 bytes

BIGINT

8 bytes

FLOAT(X)

4 if X <= 24 or 8 if 25 <= X <= 53

FLOAT

4 bytes

DOUBLE

8 bytes

DOUBLE PRECISION

8 bytes

REAL

8 bytes

DECIMAL(M,D)

M bytes (D+2, if M < D)

NUMERIC(M,D)

M bytes (D+2, if M < D)

 

Date and time types

Column type

Storage required

DATE

3 bytes

DATETIME

8 bytes

TIMESTAMP

4 bytes

TIME

3 bytes

YEAR

1 byte

 

date, time이 값의 범위를 벋어날 경우는 zero value를 갖는다.

Column type

``Zero'' value

DATETIME

'0000-00-00 00:00:00'

DATE

'0000-00-00'

TIMESTAMP

00000000000000 (length depends on display size)

TIME

'00:00:00'

YEAR

0000

 

Timestamp format

Column type

Display format

TIMESTAMP(14)

YYYYMMDDHHMMSS

TIMESTAMP(12)

YYMMDDHHMMSS

TIMESTAMP(10)

YYMMDDHHMM

TIMESTAMP(8)

YYYYMMDD

TIMESTAMP(6)

YYMMDD

TIMESTAMP(4)

YYMM

TIMESTAMP(2)

YY

 

String types

Column type

Storage required

CHAR(M)

M bytes, 1 <= M <= 255

VARCHAR(M)

L+1 bytes, where L <= M and 1 <= M <= 255

TINYBLOBTINYTEXT

L+1 bytes, where L < 2^8

BLOBTEXT

L+2 bytes, where L < 2^16

MEDIUMBLOBMEDIUMTEXT

L+3 bytes, where L < 2^24

LONGBLOBLONGTEXT

L+4 bytes, where L < 2^32

ENUM('value1','value2',...)

1 or 2 bytes, depending on the number of enumeration values (65535 values maximum)

SET('value1','value2',...)

1, 2, 3, 4 or 8 bytes, depending on the number of set members (64 members maximum)

 

기억 용량 비교

Value

CHAR(4)

Storage required

VARCHAR(4)

Storage required

''

' '

4 bytes

''

1 byte

'ab'

'ab '

4 bytes

'ab'

3 bytes

'abcd'

'abcd'

4 bytes

'abcd'

5 bytes

'abcdefgh'

'abcd'

4 bytes

'abcd'

5 bytes

 

* BLOB 는 case-sensitive, TEXT는 case-insensitive

인덱스

적절한 인덱스의 사용은 SELECT문의 성능을 크게 향상시켜준다. 최대 16개까지의 인덱스를 갖는다. 최대 인덱스 길이는 256바이트이다. CHAR과 VARCHAR에 대해서 앞 문자열을 대상으로 인덱스 할 수 있다. BLOB와 TEXT에 대해서 앞문자열을 사용하는 것은 인덱스 할 때 필수이다.

    mysql> CREATE TABLE test ( 
               name CHAR(200) NOT NULL, 
               KEY index_name (name(10)));

복수개 컬럼에 대해서 인덱스를 만들 수 있다. 최대 15개 컬럼을 사용할 수 있다.

     
    mysql> CREATE TABLE test ( 
               id INT NOT NULL, 
               last_name CHAR(30) NOT NULL, 
               first_name CHAR(30) NOT NULL, 
               PRIMARY KEY (id), 
               INDEX name (last_name,first_name));

name인덱스의 사용예:

     
    mysql> SELECT * FROM test WHERE last_name="Widenius";
     
    mysql> SELECT * FROM test WHERE last_name="Widenius" 
                              AND first_name="Michael";
     
    mysql> SELECT * FROM test WHERE last_name="Widenius" 
                              AND (first_name="Michael" OR first_name="Monty");
     
    mysql> SELECT * FROM test WHERE last_name="Widenius" 
                              AND first_name >="M" AND first_name < "N";

연산자

다음의 연산자는 select문에서 사용가능하다.

산술 연산자

    +, -, *, /, MOD(a,b) : a를 b로 나눈 나머지

비트 연산자

    |, &, <<, >>, ~, BIT_COUNT(N) : N의 설정된 비트 수

논리 연산자

    !, ||, &&, 

비교 연산자

    =, >, <, >=, <=, <> (!=),   
    <=> (Null safe equal),   
    IS NULL, IS NOT NULL,   
    between a and b  
    expr IN (value, ...), expr NOT IN (value, ...)  
    ISNULL(expr), COALESCE(list), INTERVAL(N,N1,N2,N3,...)
     
     
    mysql> select 1 <=> 1, NULL <=> NULL, 1 <=> NULL; 
                      -> 1 1 0
     
    mysql> select 1 BETWEEN 2 AND 3; 
               -> 0
     
    mysql> select 'b' BETWEEN 'a' AND 'c'; 
               -> 1
     
    mysql> select 2 BETWEEN 2 AND '3'; 
               -> 1
     
    mysql> select 2 BETWEEN 2 AND 'x-3'; 
               -> 0
     
    mysql> select 2 IN (0,3,5,'wefwf'); 
               -> 0
     
    mysql> select 'wefwf' IN (0,3,5,'wefwf'); 
               -> 1
    .......
728x90
반응형
728x90
반응형
#############################################################
#
# Title : mysql-5.1.31 source version install for RadHat9 (Success)
# date : 2009.02.26
# Lee Tae Young
#
#############################################################
# 참고로 이용한 글..
#http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10110&eid=+M4+Z45I5dxBLLfy+trYOBlXpC7coFfm&qb=bXlzcWw1IOyEpOy5mA==&enc=utf8&pid=fjUoJsoi5Uhssb/ILMNsss--050675&sid=SaXoddXNpUkAACj7JpU
#http://cafe.naver.com/netack.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=124

#압축 풀기
>tar -xvzf mysql-5.1.31.tar.gz

>cd mysql-5.1.31

#인스톨하기
>./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-charset=utf8

>make

>make install

>cd ..

>rm mysql-5.1.31.tar.gz

#초기 DB 생성
>/usr/local/mysql/bin/mysql_install_db

#user 생성
>userdel mysql

>useradd -m -s /sbin/nologin -g mysql -d /usr/local/mysql/data mysql

#폴더 권한 주기
>chown -R mysql:mysql /usr/local/mysql/data

#PATH 설정
>vi /etc/profile.d/mysql.sh

###########################
#/etc/profile.d/mysql.sh
MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
###########################

>source /etc/profile

#데몬 구동
>/usr/local/mysql/bin/mysqld_safe &

#mysql root 유저의 비밀번호 변경
>/usr/local/mysql/bin/mysqladmin -u root password "infonia()_+"

#데몬 설정
>echo '/usr/local/mysql/bin/mysqld_safe&' >> /etc/rc.d/rc.local

#설치 확인
>ps -ef | grep mysql

>netstat -an | grep LISTEN | grep 3306

728x90
반응형
728x90
반응형

음... 이 글을 쓰기전에 정말 뻘짓했다..ㅡ.ㅡ;;;

여기 저기서 글을 찾아서 설치를 해봤는데..계속 실패를 거듭하던중...

새로운 사실을 알았다...

바로..솔라리스10은 기본적으로 MySQL이 깔려있다는 것이다..

정말 유용한 사이트...[http://radiocom.kunsan.ac.kr/lecture/start.html]

다른 버젼을 설치 한다고 하면 위 사이트에서 참고를 하기 바란다...

환경 설정말 바꿔주면 되는...ㅡ.ㅡ;;

이거 뭐냐...제길....친절하게 설명서도 존재했다...


[root@Solaris10:/usr/local]# cat /etc/sfw/mysql/README.solaris.mysql
To use mysql a number of post-install procedures need to be made by root.
The following steps are derived from the mysql manual (manual.ps, manual.txt or
manual_toc.html) found in the /usr/sfw/src/mysql/Docs directory.
Initialise the database tables.

# /usr/sfw/bin/mysql_install_db

Create mysql user and group and change data directory group.

# groupadd mysql
# useradd -g mysql mysql
# chgrp -R mysql /var/mysql
# chmod -R 770
# installf SUNWmysqlr /var/mysql d 770 root mysql


MySQL reads configuration files from different places in the following order.

Filename                Purpose
---------               ---------
/etc/my.cnf             Global options

DATADIR/my.cnf          Server-specific options

defaults-extra-file     The file specified with
                        --defaults-extra-file=path

~/.my.cnf               User-specific options

Optionally copy a mysql daemon configuration file to configuration directory.
Note there are other configuration profiles available.
For default solaris installation DATADIR is /var/mysql.

# cp /usr/sfw/share/mysql/my-medium.cnf /var/mysql/my.cnf

Start mysql daemon by hand
# /usr/sfw/sbin/mysqld_safe --user=mysql &

Optionally perform the following steps for automatic start and stop of
mysql daemon at boot and shutdown.

Link boot time start up script from rc3.d and rc[012S].d
# ln /etc/sfw/mysql/mysql.server /etc/rc3.d/S99mysql
# ln /etc/sfw/mysql/mysql.server /etc/rc0.d/K00mysql
# ln /etc/sfw/mysql/mysql.server /etc/rc1.d/K00mysql
# ln /etc/sfw/mysql/mysql.server /etc/rc2.d/K00mysql
# ln /etc/sfw/mysql/mysql.server /etc/rcS.d/K00mysql



위 작업을 하고 reboot 하고 mysql 치면...된다...제길...

완전 뻘진중에 뻘짓이다...
728x90
반응형

+ Recent posts