OS/Linux - Ubuntu

[Linux - 리눅스 / Ubuntu - 우분투] 데이터베이스(DB) - 관계형 데이터베이스, 데이터, 테이블, 필드, 레코드 키, 쿼리, query, sql, 접근 권한, grant

주누다 2015. 5. 7. 02:19
반응형

데이터베이스(database, DB))

- 데이터를 모아 놓은 것

- 서로 관련성을 가진 데이터들을 데이터 간의 중복성을 최소화해서 체계적으로 모아 놓은 것

- 데이터를 테이블 구조로 구성하는 관계형 데이터베이스(reloational database, RDB)가 널리 사용



관계형 데이터베이스의 기본 개념

- 관계형 데이터베이스는 데이터를 테이블(표)로 표현

- 문서를 작성할 때 흔히 만드는 표를 생각하면 이해하기 쉬울 것

- 관계형 데이터베이스는  데이터를 항목으로 구분하여 테이블로 구성하는 것

- 이렇게 하면 테이블의 생성이나 항목의 분할과 결합을 자유롭게 할 수 있어서 편리하기 때문에

  관계형 데이터베이스는 데이터베이스의 시장의 주류로 자리를 잡고 있음

 

1) 관계형 데이터베이스 용어

 * 데이터 :

    - 각 항목에 저장되는 값

 * 테이블 :

    - 데이터를 체계화하여 행과 열의 형태로 구성한 것

 * 데이터베이스 :

    - 관련 있는 데이터를 체계적으로 저장한 것

    - 데이터는 테이블 형태로 저장

    - 데이터베이스에는 하나 이상의 테이블이 있을 수 있음

 * 필드 :

    - 테이블의 열을 의미

    - '칼럼'이라고도 함

 * 레코드 :

    - 테이블에 저장된 한 행의 정보를 의미

    - '터플(tuple)' 이라고도 함

    - 한 행에는 여러 필드의 값이 저장될 수 있음

 * 키 :

    - 레코드를 구성하는 필드에서 각 레코드를 구분할 수 있는 필드 값을 뜻함

    - 예를 들어 학생 데이터를 구성하는 레코드라면 학번 필드가 키가 될 수 있음

    - 키로 선택된 필드의 값은 중복될 수 없음

    - 키는 기본 키(primary key)와 그 외 다른 키들이 있을 수 있음




SQL의 기초

- 관계형 데이터베이스를 생성하고, 테이블을 만들고, 데이터를 입력 및 삭제하거나 수정할 때 사용하는 언어

- SQL(Structured Query Language)



데이터베이스 관련 SQL 

- SQL의 각 문장은 C 언어처럼 쌍반점(;)으로 끝나야 함

- SQL 은 특별히 지정하지 않으면 기본적으로 대문자, 소문자를 구별하지 않음

 

1) 데이터베이스 보기 :

 * 기존에 있는 데이터 베이스의 목록을 출력

 * show databases;



2) 데이터베이스 생성 :

 * 새로운 데이터베이스를 생성

 * create database 데이터베이스 이름;

 * ex) create database st_db;


3) 데이터베이스 삭제 :

 * 지정한 데이터베이스를 삭제

 * drop database 데이터베이스 이름;

 * 데이터베이스를 삭제하면 해당 데이터베이스에 있던 모든 테이블이 삭제



4) 사용할 데이터베이스 지정 :

 * 여러 데이터베이스 중에서 작업할 데이터베이스를 선택

 * use 데이터베이스 이름;




테이블 관련 SQL


1) 테이블 보기 :

 * 새현재 데이터베이스에 있는 테이블의 목록을 출력

 * show tables;



2) 테이블 생성 :

 * 새로운 테이블을 생성

 * 새로운 테이블을 생성할려면 사용할 수 있는 자료형을 알아둬야 함

  테이블 필드의 자료형

 자료형

 의미

 예

varchar(n)

최대 n개의 크기를 가진 가변 문자열

varchar(10)

char(n)

n개의 크기를 가진 고정 문자열

char(5)

int

정수형 숫자

 

float

실수형 숫자

 

date

날짜

 

time

시간

 

 * 테이블을 생성할 때는 데이블의 구조를 정의해야 함.

 * 테이블 이름 다음에 괄호를 넣고 필드명과 필드의 자료명을 지정

 * create table '테이블 이름' (필드명1 필드자료명1, 필드명2 필드자료명2, ... );

 * ex) create table st_info (ST_ID int, NAME varchar(20), DEPT varchar(25));



3) 테이블 구조 보기

 * 지정한 테이블의 구조를 출력

 * explain '테이블 이름';



4) 테이블 수정 :

 * 테이블의 구조를 변경

 * alter table '테이블 이름' '수정 명령';


* 테이블에 필드 추가

- alter table '테이블 이름' add '필드명 자료형'

- ex) alter table st_info add AGE int;



 * 필드의  자료형 변경

- alter table '테이블 이름' modify '필드명 자료형'

- ex) alter table st_info modify AGE float;



 * 필드 삭제

- alter table 테이블 이름 drop column 필드명

- ex) alter table st_info drop column AGE;



 * 기본 키 추가

- alter table 테이블 이름 add constraint 제약 조건명 primary key (필드명)

- ex) alter table st_info add constrai nt pk_stinfo primary key (ST_ID);

- 제약 조건명은 사용자가 정하면 됨


- 처음 테이블 생성하면서 기본 키를 지정할 때

- ex) create table st_info (ST_ID int Not NULL primary key, NAME varchar(20), DEPT varchar(25));




5) 테이블 삭제

 * 지정한 테이블을 삭제

 * drop table '테이블 이름';





레코드 삽입, 삭제, 수정 관련 SQL

- 테이블에 데이터를 입력하거나 삭제할 때는 레코드 단위로 작업

- 레코드를 삽입하거나 삭제 및 수정시 SQL 문 사용


1) 레코드 삽입 :

 * 테이블에 새로운 레코드를 추가

 * insert into '테이블 이름' values (값1, 값2, ... );

 * 삽입하는 레코드는 테이블을 생성할 때 지정한 자료형에 맞는 데이터를 입력해야함

 * ex) insert into st_info values(20100401, '홍길동', 'Game');



2) 레코드 수정 :

 * 기존 레코드를 수정

 * update '테이블 이름' set 필드명1=수정할 값1, 필드명2=수정할 값2, .... where 조건;

 * 조건에 맞는 레코드를 찾아 지정한 필드의 값을 수정

 * 다음 예는 학생 신상 정보 테이블(st_info)에서 학번이 201403인 레코드의 학과(DEPT)를 Computer로 수정한 것

 * ex) update st_info set DEPT='Computer' where ST_ID=201403;



3) 레코드 삭제

 * 테이블에서 해당 레코드를 삭제

 * delete from '테이블 이름' where 조건;

 * ex) delete from st_info where ST_ID=201403;





레코드 검색하기

- 테이블에 저장된 레코드를 검색할 때 select 문을 사용

- select 필드명1, 필드명2, . . . from '테이블이름' where 조건;


1) select * from st_info;

2) select NAME from st_info where ST_ID=201401;

3) select Linux, DB from st_grade where ST_ID=201401;


 * 1번은 학생 신상 정보 테이블(st_info)의 모든 레코드를 검색

 * 2번은 학생 신상 정보 테이블에서 학번(ST_ID)이 201401 인 학생의 이름을 검색

 * 3번은 학생 성적 테이블(st_grade)에서 학번이 201401 인 학생의 리눅스와 DB 성적을 검색


 * 만약 학번이 201401 인 학생의 이름과 리눅스 성적을 알고 싶다면 어떻게?

  이름과 성적 데이터가 각기 다른 테이블에 저장되어 있는데..

- 이럴 때는 양쪽 테이블에 공통으로 적용되는 기본 키를 이용하여 검색

- 이렇게 테이블을 연결하는 것을 조인(join) 이라고 함

 => select st_info.NAME, st_grade.Linux from st_info,

    st_grade where st_info.ST_ID=201401 and st_grade.ST_ID=201401;




접근 권한 부여하기

- 시스템 관리자가 데이터베이스를 만들고 일반 사용자들이 사용하도록 설정해야할 때 'grant' 문을 사용

- 예를 들어 제로보드 같은 게시판을 설치하려면 데이터베이스가 필요

- 이때 관리자가 만들고, 이 데이터베이스에 대한 모든 권한을 해당 사용자에게 부여하는 것


 * grant all privileges on DB명.* to 사용자 계정@localhost identified by '패스워드';

 * 앞에서 생성한 학생 DB(st_db)에 대한 사용권을 user1 사용자에게 부여

 * ex) grant all privileges on st_db.* to user1@localhost identified by '123456';




반응형