반응형

반응형

MySQL 데이터베이스 전체를 백업하고 복원하기.

 

백업과 복원하는 방법.

데이터베이스의 구성, 테이블과 컬럼의 정의, 데이터 등 데이터베이스의 모든 정보를 파일로 출력할 수가 있습니다.

 

덤프.

데이터베이스의 모든 내용을 추출하는 것을 덤프(dump)한다고 합니다. 덤프한 파일을 사용하면 다른 서버에 같은 내용의 데이터베이스를 구축하거나 만일의 사태를 대비해서 백업을 할 수도 있습니다.

MySQL의 데이터베이스를 덤프할 때에는 명령 프롬프트에서 mysqldump 명령을 실행합니다.

mysqldump 명령은 데이터베이스의 구성과 데이터를 SQL 문으로 작성합니다.

 

복원.

반대로 mysqldump 명령으로 출력한 데이터를 데이터베이스에 되돌려 놓는 것을 복원(restore)이라고 합니다. 복원을 한다는 것은 데이터베이스를 처음부터 새로 만든다는 것입니다.

이 작업은 SQL 문을 모아 놓은 텍스트 파일을 mysql 명령으로 리다이렉트만 하면 되는 것입니다.

 

mysqldump를 사용해서 추출하기.

명령문은 다음과 같습니다.

mysqldump –u 사용자명 -p비밀번호 데이터베이스명 > 출력파일명

 

mysqldump –u comster_user –p12345 comster > backup_comster.txt

 

 

덤프 파일 복원하기.

명령 프롬프트에서 파일을 리다이렉트해서 데이터베이스에 복원합니다.

데이터베이스를 덤프하고 이를 복원할 때에는 데이터를 넣을 데이터베이스가 있어야 합니다.

미리 데이터베이스 comster_02를 만들고 여기에 복원해 보겠습니다.

 

mysqladmin –u root –p12345 create comster_02

mysql –u root –p12345 comster_02 < backup_comster.txt

 

반응형
Posted by 컴스터
,
반응형

MySQL 문의 실행 결과를 파일에 저장하기.

 

리다이렉트로 SQL 문의 실행 결과를 텍스트 파일에 출력하기.

키보드처럼 애초부터 준비된 입력 장치를 표준입력, 디스플레이 장치처럼 애초부터 준비된 출력 장치를 표준출력이라고 합니다.

표준 입력과 표준출력 장치를 변경할 수가 있습니다. 이런 변경 작업을 리다이렉트(redirect)라고 합니다.

명령프롬프트에서 dir를 입력하면 화면에 디렉토리 목록이 나옵니다.

Dir > test.txt 라고 입력하면 디렉토리 목록을 test.txt라는 파일에 저장 됩니다.

출력 결과가 저장된 test.txt 파일은 실행한 장소에 저장되어 있습니다.

 

MySQL 명령으로 리다이렉트하기.

리다이렉트 기능을 MySQL에 사용해 보겠습니다.

명령프롬프트에 다음을 입력합니다.

mysql –u comster_user –p12345 > log.txt

 

위의 명령을 실행하면 결과가 화면에 표시되지 않고 log.txt파일에 출력됩니다.

이제 다음 명령을 실행해 봅니다.

use comster;

select * from table_01;

exit

실행 결과는 아무것도 표시되지 않습니다.

 

이제 명령프롬프트에 다음을 입력합니다.

type log.txt

Log.txt  파일에 select 한 결과가 잘 저장 되어 있음을 확인할 수 있습니다.

 

tee 명령으로 SQL 문의 결과를 파일에 저장하기.

MySQL 콘솔창에 tee 명령을 사용하면 리다이렉트와 마찬가지로 결과를 파일에 출력할 수 있습니다.

 

tee 출력할 파일명;

tee test_tee.txt

이제 빈 파일 test_tee.txt 가 생성되었습니다.

이후의 실행 결과는 화면에 표시될 뿐만 아니라 test_tee.txt파일에도 출력됩니다.

MySQL 프롬프트에 다음 명령을 입력해 봅니다.

select * from table_01;

select * from table_sales;

 

위의 명령을 실행하면 화면에도 표시되고 test_tee.txt파일에도 결과가 표시됩니다.

 

파일 출력 중지하기.

파일에 출력하는 것을 중지할 때에는 notee명령을 사용합니다

notee명령이후로는 파일로 더 이상은 출력하지 않습니다.

반응형
Posted by 컴스터
,
반응형

MySQL 명령을 파일에서 읽어들여 실행하기(source명령 사용하기).

 

파일로 작성한 SQL 명령을 MySQL 콘솔창에서 실행하기.

복잡하고 긴 SQL 문을 실행할 때 일일이 MySQL 콘솔창에 입력하는 것은 매우 불편합니다. 복잡한 SQL문을 실행할 경우 텍스트 파일에 SQL 문을 작성해서 저장하고 그 파일을 한 번에 실행합니다. SQL문을 텍스트 파일로 저장해 두면 언제든지 다시 사용하거나 변형할 수 있습니다.

 

텍스트 파일로 작성해둔 SQL문을 MySQL 콘솔창에서 source 명령으로 실행합니다.

 

source 텍스트파일명;

 

sql.txt 파일에 다음을 입력합니다.

 

select * from table_01

select * from table_sales;

 

sql.txt 파일을 저장한 후 MySQL 콘솔창에 다음 명령을 실행합니다.

 

source d:/test/sql.txt;

 

Sql.txt 파일에 저장한 명령문이 잘 실행됩니다.

 

파일로 작성한 SQL 명령을 명령 프롬프트에서 실행하기.

굳이 MySQL콘솔창을 실행하지 않아도 명령 프롬프트에서 직접 SQL문을 실행할 수 있습니다.

명령 프롬프트에서 SQL문을 실행하려면 다음 명령을 실행합니다.

mysql 데이터베이스명 –u 사용자명 -p비밀번호 –e “MySQL 콘솔창의 명령문

 

mysql comster –u comster_user –p12345 –e “source d:/test/sql.txt”

 

 

반응형
Posted by 컴스터
,
반응형

MySQL CSV 파일 임포트 익스포트 하기

텍스트 파일로부터 데이터 가져오기 임포트

보통 파일로부터 데이터를 입력할 때에는 CSV(Comma Separated Values)형식과 같은 텍스트 파일을 사용합니다. 이런 형식의 파일을 읽어 들이는 것을 가져오기 또는 임포트(import)라고 합니다.

 

파일 가져오기.

파일에서 데이터를 가져올 때에는 LOAD DATA LOCAL INFILE이라는 명령을 사용합니다.

 

Load data local infile ‘파일명’ into table 테이블명 옵션설정;

 

Load data local infile 명령으로 데이터 형식을 지정하는 옵션

Fields terminated by 구분문자 기본설정은 ‘\t’:

Lines terminated by 줄바꿈 문자 기본설정은 ‘\n’: 줄바꿈

Ignore 처음에 건너 뛸 행 lines 기본설정은 0

 

우선 test.csv 파일을 다음과 같이 입력한 후 생성합니다.

A1, 강백호, 41

A2, 김민우, 29

A3, 김우빈, 20

A4, 문성근, 24

A5, 박찬호, 47

A6, 이수만, 60

 

위의 레코드를 table_03에 가져오는 명령을 내려 보겠습니다.

select * from table_03;

load data local infile ‘d:/test/test.csv’

into table table_03 fields terminated by ‘,’;

select * from table_03;

 

데이터를 텍스트 파일에 내보내기 익스포트

가져오기와는 반대로 테이블에 있는 데이터를 CSV 파일 등의 텍스트 파일로 내보낼 수가 있습니다. 이처럼 데이터를 파일로 내보내는 것을 내보내기 또는 익스포트(export)라고 합니다.

명령문은 다음과 같습니다.

select * into outfile ‘파일명옵션설정 from 테이블명;

옵션 설정에는 내보내기할 텍스트 파일의 형식을 지정합니다.

 

select * into outfile ‘d:/test/export.csv’

fields terminated by ‘,’ from table_03;

 

다음과 같이 익스포트 할 때 Access denied for user 라는 오류 메시지가 나올 때 다음과 같이 해결합니다.

우선 mysql 프롬프트 에서 빠져 나와서 root로 로그인후 파일 권한을 사용자 아이디에 부여합니다.

 

use mysql;

update user set file_priv = ‘y’ where user = ‘comster_user’;

flush privileges;

 

권한을 부여한 후 다시 사용자 아이디로 로그인한 후 실행해 보겠습니다.

위와 같이 csv 파일을 잘 export 합니다.

 

내보내기한 파일의 내용은 메모장과 같은 텍스트 편집기로 확인할 수 있습니다.

여기에서는 명령 프롬프트에서 type 명령을 사용해 보겠습니다. 먼저 MySQL 콘솔창을 종료하고 명령 프롬프트에 다음 명령을 실행합니다.

 

quit;

type d:\test\export.csv

 

 

반응형
Posted by 컴스터
,

MySQL 트랜잭션.

MySQL 2018. 1. 2. 11:15
반응형

MySQL 트랜잭션.

 

트랜잭션이란?

여러 단계의 처리를 하나의 처리처럼 다루는 기능을 트랜잭션(transaction)이라고 합니다.

트랜잭션의 실행 결과를 데이터베이스에 반영하는 것을 커밋(commit)이라 하고, 반영하지 않고 원래 상태로 되돌리는 것을 롤백(roll-back)이라고 합니다.

 

트랜잭션 사용하기.

트랜잭션을 시작할 때에는 start transaction 이라는 명령을 사용합니다.

뭔가 작업을 하고 원래 상태로 되돌릴 때는 rollback 명령어를 사용합니다.

작업후 작업한 것을 반영할 때는 commit 명령어를 사용합니다.

 

table_03을 트랜잭션을 시작한 후 삭제 했다가 롤백을 해보겠습니다.

Rollback 이 되어서 무사히 데이터가 복원되었습니다.

 

트랜잭션은 rollback;을 실행한 시점에서 확정됩니다. 다시 한번 테스트를 하려면 반드시 start transaction;으로 트랜잭션을 시작해야 합니다.

 

이번에는 테이블을 삭제한 후 commit; 를 실행해 보겠습니다.

start transaction;

delete from table_03;

commit;

select * from table_03;

위와 같이 commit; 명령 실행한 후 테이블이 비어 있는 것을 확인할 수 있습니다.

 

자동 커밋 기능.

일반적으로 MySQL에서 명령을 실행하면 그대로 반영됩니다. , 사용자가 의식하지 않아도 모든 명령이 자동으로 commit되는 것입니다.

이처럼 명령을 실행하면 그대로 반영하는 기능을 자동 커밋 기능이라고 합니다.

 

자동 커밋 기능을 OFF로 설정하기.

자동 커밋 기능을 off로 하려면, 다음과 같이 set autocommit=0; 이라는 명령을 실행합니다.

set autocommit=0;

insert into table_03 values(‘test’, ‘테스트’, 30);

select * from table_03;

rollback;

select * from table_03;

위에서 보는 것과 같이 자동커밋 기능을 off로 설정해서 rollback; 을 했을 때 원래 상태로 돌아 가는 것을 확인할 수 있습니다.

 

자동 커밋 기능을 on으로 바꾸기.

Off로 설정된 자동 커밋 기능을 원래대로 되돌리는 방법은 다음 명령을 사용하여 자동 커밋 기능을 원래의 기본 설정으로 되돌려 놓습니다.

set autocommit=1;

 

 

자동 커밋 기능의 설정 상태를 확인 명령어.

select @@autocommit;

트랜잭션을 이용할 수 있는 범위.

트랜잭션으로 모든 명령을 롤백으로 되돌릴 수 있는 것은 아닙니다. 다음과 같은 명령은 자동 커밋됩니다.

drop database

drop table

drop

alter table

위의 명령은 트랜잭션을 실행해도 원래의 상태로 되돌릴 수가 없으니 주의해야 합니다.

 

반응형
Posted by 컴스터
,

MySQL 저장엔진.

MySQL 2017. 12. 29. 10:03
반응형

저장 엔진이란?

MySQL의 기능은 크게 두 가지로 나눌 수 있습니다.

첫 번째는 접속 기능과 SQL문의 내용을 사전에 조사하는 기능, 즉 데이터베이스의 상위 부분이고, 두 번째는 그 상위 부분의 지시를 받아 실제로 검색이나 파일을 조작하는 기능의 하위 부분입니다. 이 하위 부분을 저장 엔진이라고 합니다.

 

저장 엔진의 종류.

저장 엔진

특징

MyISAM

MySQL 5.1까지의 기본 엔진. 트랜잭션을 지원하지 않는다.

InnoDB

MySQL 5.5이후의 기본 엔진. 트랜잭션을 지원한다.

ISAM

MyISAM의 기본이 되는 저장 엔진. 예전 형식으로, MySQL 5.0부터는 설치되지 않는다.

MEMORY

데이터를 모두 메모리상에 보관하며, 동작이 빠르다.

MERGE

MyISAM의 여러 개의 테이블을 하나의 데이블처럼 다룬다.

 

저장 엔진 확인하기.

테이블의 저장 엔진을 확인해 보는 명령은 다음과 같습니다.

show create table 테이블명;

 

show create table table_02;

table_02 InnoDB엔진이 사용되고 있습니다.

위와 같이 보기가 좀 불편할 때는 명령문 끝에 세미콜론 대신 \G 를 사용하면 보기가 쉽습니다.

이때 G는 대문자를 사용해야 합니다.

 

저장 엔진 변경하기.

테이블의 저장 엔진은 나중에 변경할 수도 있습니다.

지금 InnoDB로 되어 있는 것을 MyISAM으로 변경해 보겠습니다.

저장 엔진을 변경하는 명령문은 다음과 같습니다.

 

alter table 테이블명 engine=MyISAM;

 

alter table table_02 engine=MyISAM;

show create table table_02 \G

위에 보는 것과 같이 엔진이 잘 변경되었습니다.

 

 

 

반응형

'MySQL' 카테고리의 다른 글

MySQL CSV 파일 임포트 익스포트 하기  (0) 2018.01.03
MySQL 트랜잭션.  (0) 2018.01.02
MySQL 트리거(trigger).  (0) 2017.12.28
MySQL 저장함수.  (0) 2017.12.27
MySQL 저장 프로시저 활용하기.  (0) 2017.12.18
Posted by 컴스터
,

MySQL 트리거(trigger).

MySQL 2017. 12. 28. 12:11
반응형

트리거란(trigger)?

트리거(trigger)는 테이블에 대해 어떠한 처리를 실행하면 이에 반응하여 설정해 둔 명령이 자동으로 실행되는 구조를 말합니다. 이때, 이러한 과정이 총의 방아쇠를 당기는 것과 같다 하여 트리거(방아쇠)라고 합니다.

Insert update, delete등의 명령이 실행될 때, 사전에 트리거로 설정해 놓은 기능도 함께 실행할 수가 있습니다. 예를 들어, 테이블의 레코드를 변경하면 그것을 계기로 변경한 내용을 다른 테이블에 기록하도록 트리거를 작성할 수 있습니다.

 

예제로 테이블에 있는 레코드를 삭제하면, 삭제한 레코드가 다른 테이블에 복사되는 트리거를 만들어 보겠습다.

테이블 컬럼 구조만 복사해서 table_trigger 테이블을 만들어 둡니다.

 

select * from table_03;

create table table_trigger like table_03;

select * from table_trigger;

 

트리거 만들기.

트리거는 insert, update, delete등의 명령이 실행되기 직전이나 직후에 호출되어 실행됩니다.

또한 테이블에서 어떠한 처리를 하기 직전과 직후의 값은 다음과 같이 old.컬럼명 과 new.컬럼명으로 얻을 수 있습니다.

다음은 크리거를 만드는 명령문입니다.

create trigger 트리거명 before(또는 after) delete 등의 명령

on 테이블명 for each row

begin

           변경전(old.컬럼명) 또는 변경후(new.컬럼명)을 이용한 처리

end

 

트리거의 본체를 작성할 때 각 명령의 끝에는 세미콜론을 입력합니다. 따라서 미리 구분 문자를 //로 변경해 둡니다.

테이블 table_03의 레코드를 삭제하고, 삭제한 레코드를 테이블 table_trigger에 삽입하는 트리거 trigger_01을 작성해서 테이블 table_03에 있는 모든 레코드를 삭제해 보겠습니다.

delimiter //

create trigger trigger_01

before delete on table_03 for each row

begin

insert into table_trigger values(old.number, old.name, old.age);

end

//

delimiter ;

트리거가 생성되었습니다.

이제 테이블 table_03에 레코드를 모두 삭제하여 table_trigger에 삭제된 레코드가 저절로 입력되는지 확인해 보겠습니다.

 

delete from table_03;

select * from table_03;

select * from table_trigger;

table_03에는 레코드가 남아 있지 않고 table_trigger에는 삭제된 모든 레코드가 추가되어 있어 트리거가 잘 동작한 것을 확인할 수 있습니다.

 

설정한 트리거 확인하기.

현재 설정된 트리거를 확인할 때에는 다음 명령어를 사용합니다.

show triggers;

트리거 삭제하기.

트리거를 삭제할때는 다음 명령어를 사용합니다.

drop trigger 트리거명;

 

drop trigger trigger_01;

show triggers;

 

반응형

'MySQL' 카테고리의 다른 글

MySQL 트랜잭션.  (0) 2018.01.02
MySQL 저장엔진.  (0) 2017.12.29
MySQL 저장함수.  (0) 2017.12.27
MySQL 저장 프로시저 활용하기.  (0) 2017.12.18
MySQL 뷰 이용하기.  (0) 2017.12.13
Posted by 컴스터
,

MySQL 저장함수.

MySQL 2017. 12. 27. 10:35
반응형

MySQL 저장함수.

 

MySQL 저장 함수란 무엇인가?

저장 함수는 저장 프로시저와 거의 흡사합니다. 저장 프로시저와 유일하게 다른 점은 실행 했을 때 값을 반환한다는 점입니다.

저장 함수를 사용하면 자신만의 함수를 만들 수가 있습니다. 저장 함수는 사용자 정의 함수라고도 합니다.

다음은 저장 함수를 작성하는 구문입니다.

create function 저장함수이름(인수명 자료형) returns 반환값의 자료형

begin

           sql 문;

           Return 반환값식;

end

저장 프로시저와 마찬가지로 괄호안에 인수를 대입할 수 있습니다. 인수를 대입하지 않아도 괄호는 입력해야 합니다.

 

저장 함수로 표준 체중 계산하기.

BMI(Body Mass Index) = 22가 표준 체중이라고 했을 때 다음과 같은 식이 성립합니다.

표준 체중 = 신장(cm 단위) * 신장(cm 단위) * 22/10000

이 식을 이용해서 저장 함수 function_01( )을 만들어 보겠습니다.

delimiter //

create function function_01(height int) returns double

begin

return height * height * 22/10000;

end

//

delimiter ;

select function_01(173);

위와 같이 저장 함수를 호출할 때는 call 이 아니라 select 를 사용합니다.

 

레코드의 평균값을 반환하는 저장 함수.

특정 테이블에서 특정 컬럼의 평균값을 반환하는 함수를 저장 함수로 만들어 보겠습니다.

이런 함수는 미리 만들어 두면 꽤 편리하게 사용할 수 있습니다.

table_member에서 컬럼 age의 평균을 반환하는 저장 함수 function_avgAge를 생성해 보겠습니다.

delimiter //

create function function_avgAge( ) returns double

begin

declare a double;

select avg(age) into a from table_member;

return a;

end

//

delimiter ;

 

select function_avgAge( );

위에 declare a double 은 변수 a double형으로 선언한 것이고 avg(age) into a 는 평균을 구한 값을  a에 할당한다는 의미 입니다.

 

저장 함수의 내용 표시하기.

저장 함수의 내용을 표시하는 명령어는 다음과 같습니다.

Show create function 저장함수명;

 

show create function function_avgAge;

 

저장 함수 삭제하기.

저장 함수를 삭제하는 방법은 다음 명령어를 사용합니다.

drop function 저장함수명;

 

drop function function_avgAge;

 

 

 

 

반응형

'MySQL' 카테고리의 다른 글

MySQL 저장엔진.  (0) 2017.12.29
MySQL 트리거(trigger).  (0) 2017.12.28
MySQL 저장 프로시저 활용하기.  (0) 2017.12.18
MySQL 뷰 이용하기.  (0) 2017.12.13
MySQL SELECT한 레코드에서 또 SELECT하기 – 하위 질의  (0) 2017.12.11
Posted by 컴스터
,
반응형

MySQL 저장 프로시저 활용하기.

 

저장 프로시저란 무엇인가?

여러 SQL 문을 하나의 SQL 문처럼 정리하여 call 명령으로 실행할 수 있게 만든 것을 저장 프로시저라고 합니다. 저장 프로시저는 일련의 절차를 정리해서 저장한 것입니다.

사전에 준비해 둔 많은 명령을 자동으로 실행할 수 있기 때문에 작업의 효율성도 높일 수 있습니다.

 

저장 프로시저 만들기.

저장 프로시저를 작성할 때에는 다음과 같이 create procedure라는 명령을 사용합니다.

 

create procedure 저장 프로시저명( )

begin

           sql 1;

           sql 2;

end

 

begin 에서 end 까지가 저장 프로시저의 본체입니다.

시작에 begin을 끝에 end를 붙여 저장 프로시저의 명령 범위를 확실히 하고 있습니다.

저장 프로시저의 본체는 평범한 sql문 입니다. 그래서 끝에 종료를 나타내는 세미콜론을 입력해야 합니다. 하지만 이렇게 되면 저장 프로시저를 작성하는 중간에 세미콜론을 입력하게 되어서 저장 프로시저가 완성되지 않은 상태에서 실행이 됩니다. 세미콜론이 입력되면 어떤 경우에서 건 일단 세미콜론 이전 단계까지 명령문을 실행하게 됩니다.

 

구분 문자(;) 변경하기.

명령문이 완성되지 않은 상태에서 실행되면 곤란합니다. 저장 프로시저에서 end를 입력하고 나서 프로시저 명령이 실행되도록 환경을 변경해야 합니다.

그러려면 저장 프로시저를 작성하기 전에 구분 문자를 세미콜론이 아닌 다른 문자로 변경해 둡니다. 일반적으로 //을 사용합니다.

구분 문자를 //으로 변경할 때에는 delimiter명령을 사용합니다.

 

delimiter //

 

구분 문자를 //으로 변경해 두면 저장 프로시저를 작성하는 도중에 세미콜론을 입력해도 문제없습니다. End 뒤에 //을 입력하면 create procedure 명령이 실행됩니다.

저장 프로시저를 모두 작성했으면 delimiter ; 로 구분 문자를 원래대로 되돌려 놓습니다.

프로시저를 호출할 때는 call 프로시저명; 을 사용합니다.

 

select * from table_sales; select * from table_member을 실행하는 저장 프로시저를 생성하겠습니다.

 

delimiter //

create procedure procedure_01( )

begin

select * from table_sales;

select * from table_member;

end

//

delimiter ;

call procedure_01;

 

설정한 값 이상인 레코드만 표시하는 저장 프로시저 만들기.

인수를 대입해서 실행하는 저장 프로시저를 만들어 보겠습니다.

처리하고자 하는 데이터를 괄호( ) 안에 대입해서 저장 프로시저를 실행합니다.

다음은 저장 프로시저에 인수를 대입하는 방법입니다.

procedure 저장프로시저명(인수명 자료형)

 

table_salessales가 인수 s 이상인 레코드를 표시하는 프로시저를 생성해서 호출해 보겠습니다.

 

delimiter //

create procedure procedure_02(s int)

begin

select * from table_sales where sales >= s;

end

//

delimiter ;

call procedure_02(100);

 

 

저장 프로시저의 내용 표시하기.

 

작성한 저장 프로시저의 내용을 표시할 때에는 다음 명령을 실행합니다.

 

show create procedure 저장프로시저명;

 

show create procedure procedure_01;

 

저장 프로시저 삭제하기.

저장 프로시저를 삭제할 때는 데이터베이스나 테이블, 뷰를 삭제할 때와 마찬가지로 drop 명령을 사용합니다.

명령문은 다음과 같습니다.

drop procedure 저장프로시저명;

 

drop procedure procedure_01;

반응형

'MySQL' 카테고리의 다른 글

MySQL 트리거(trigger).  (0) 2017.12.28
MySQL 저장함수.  (0) 2017.12.27
MySQL 뷰 이용하기.  (0) 2017.12.13
MySQL SELECT한 레코드에서 또 SELECT하기 – 하위 질의  (0) 2017.12.11
MySQL 셀프 조인.  (2) 2017.12.08
Posted by 컴스터
,

MySQL 뷰 이용하기.

MySQL 2017. 12. 13. 11:44
반응형

MySQL 뷰 이용하기.

 

뷰의 정의

뷰는 무엇일까요?

데이터를 추출할 때 select를 사용해서 다양한 방법으로 데이터를 추출했습니다.

이렇게 select한 결과를 가상 테이블에 저장한 것을 뷰라고 합니다.

뷰는 테이블이 아닙니다. 그러므로 뷰의 레코드와 컬럼에는 데이터가 존재하지 않고 데이터를 추출하기 위한 정보일 뿐입니다.

추출한 것을 뷰로 한번 실행해 두면 사용자 정의 형식의 테이블로 이용할 수가 있습니다.

사용자의 입장에서 보면 뷰와 테이블의 이용 방법에는 큰 차이가 없습니다.

 

뷰 생성하기.

뷰를 생성하는 방법은 다음과 같이 명령문을 사용합니다.

 

create view 뷰이름 as select 컬럼명 from 테이블명 where 조건;

 

결과적으로 어떠한 조건으로 컬럼을 모아 가상의 테이블을 만드는 것입니다.

지금까지 실행했던 많은 select의 결과를 create view ~ as를 이용해서 뷰를 만든다고 생각하면 됩니다.

뷰를 생성해 보겠습니다.

 

select * from table_member;

 

create view view_member

as select name, age from table_member;

 

select * from view_member;

 

뷰에서 컬럼 값 변경하기.

뷰는 참조 테이블의 일부분을 표시하고 있다고 할 수 있습니다. 따라서 참조 테이블의 값이 변경되면 뷰의 값도 변경됩니다.

뷰는 참조 테이블의 일부분을 표시하는 동시에 참조 테이블의 데이터 창구이기도 합니다. 그래서 뷰의 값이 변경되면 참조 테이블의 값도 변경됩니다.

다음 실습은 view_member 의 강백호를 서태웅으로 변경하여 참조 테이블과 뷰를 확인해 보겠습니다.

update view_member

set name = ‘서태웅

where name = ‘강백호’;

 

select * from view_member;

select * from table_member;

위의 결과와 같이 뷰의 값을 변경하면 참조하는 테이블의 데이터도 변경된다는 것이 확인되었습니다.

 

 

조건을 설정해서 뷰 만들기.

2개의 테이블을 이용하여 where로 조건을 설정해서 뷰를 만들어 보겠습니다.

table_sales sales 컬럼 조건이 90이상인 레코드만 추출하여 number, sales table_member name로 구성된 뷰인 view_sales 를 만들어 보겠습니다.

 

select * from table_sales;

select * from table_member;

 

create view view_sales

as select A.number, A.sales, B.name

from table_sales as A

join table_member as B

using(number) where A.sales >= 90;

 

select * from view_sales;

 

뷰 확인하기.

어떤 뷰가 있는지 확인하려면 SHOW TABLES를 사용합니다.

 

show tables;

 

테이블과 마찬가지로 컬럼의 구조는 DESC로 확인합니다.

 

desc view_sales;

 

뷰의 조건에 일치하지 않으면 오류가 나게 설정하기.

뷰에서 insert를 하면 where 조건에 일치하지 않아도 관련 테이블에 데이터가 추가 됩니다.

하지만 조건을 설정한 뷰에 그 조건을 무시하고 데이터가 입력되면 곤란해지는 때도 있습니다. 또한 뷰에서 입력한 데이터를 뷰에서 확인할 수 없다면 곤란하겠지요. 이런 문제가 일어나지 않게 하려면, 뷰에서는 조건에 일치하지 않는 데이터는 입력할 수 없도록 설정할 수 있습니다.

WHERE 조건에 일치하지 않으면 입력할 수 없도록 설정하려면 create view로 뷰를 생성할 때, WITH CHECK OPTION을 추가합니다.

 

create view view_sales2

as select number, sales from table_sales

where sales > 100

with check option;

 

insert into view_sales2 values(‘A8’, 50);

 

뷰 덮어쓰기.

이미 같은 이름의 뷰가 존재할 때 덮어쓰기를 해서 뷰를 생성하는 방법입니다.

Create view를 실행할 때, 생성하려고 하는 이름의 뷰가 이미 존재하면 오류가 발생합니다. 이럴 때 create or replace view 와 같이 or replace를 추가하면 덮어쓰기를 할 수 있습니다. , 이미 존재하는 같은 이름의 뷰를 삭제하고 새롭게 뷰를 생성하게 됩니다.

다음과 같이 사용합니다.

create or replace view view_sales

as select now();

 

select * from view_sales;

 

뷰의 컬럼 구조 변경하기.

뷰의 정의를 변경할 때는 alter view를 사용합니다.

명령문은 다음과 같습니다.

alter view 뷰이름 as select 컬럼명 from 테이블이름;

 

다음 명령을 실행하면 이미 존재하는 view_salestable_sales의 컬럼 name, age와 같은 구조로 변경됩니다.

 

alter view view_sales

as select number, sales from table_sales;

 

select * from view_sales;

 

뷰 삭제하기.

MySQL에서 무언가를 삭제할 때에는 drop 명령을 상용했습니다. 뷰를 삭제할 때에도 drop명령을 사용합니다. 데이터베이스나 테이블에 사용하는 명령과 같습니다.

 

drop view 뷰이름;

단 삭제할 뷰가 존재하지 않으면 오류가 발생합니다.

만약, 다음과 같이 if exists를 추가하면 삭제할 뷰가 존재하지 않아도 오류가 발생하지 않습니다.

 

drop view if exists view_sales;

 

 

반응형

'MySQL' 카테고리의 다른 글

MySQL 저장함수.  (0) 2017.12.27
MySQL 저장 프로시저 활용하기.  (0) 2017.12.18
MySQL SELECT한 레코드에서 또 SELECT하기 – 하위 질의  (0) 2017.12.11
MySQL 셀프 조인.  (2) 2017.12.08
MySQL 외부 JOIN 사용하기.  (0) 2017.12.07
Posted by 컴스터
,


반응형