데이터베이스(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) 테이블 생성 : * 새로운 테이블을 생성 * 새로운 테이블을 생성할려면 사용할 수 있는 자료형을 알아둬야 함
* 테이블을 생성할 때는 데이블의 구조를 정의해야 함. * 테이블 이름 다음에 괄호를 넣고 필드명과 필드의 자료명을 지정 * 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 '테이블 이름' '수정 명령';
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'; |