DB 기초 개념 공부
by choising
20180817
DB
- DB의 기본 개념
- 데이터의 집합.
- 여러 응용 시스템(프로그램)들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터의 집합.
- 효율적으로 저장, 검색, 갱신할 수 있도록 데이터 집합들끼리 연관시키고 조직화되어야 한다.
- DB의 특성
- 실시간 접근성(Real-time Accessability)
- 사용자의 요구를 즉시 처리할 수 있다.
- 계속적인 변화(Continuous Evolution)
- 정확한 값을 유지하기 위해 삽입/삭제/수정 작업 등으로 데이터를 지속적으로 갱신할 수 있다.
- 동시 공유성(Concurrent Sharing)
- 사용자마다 서로 다른 목적으로 사용하므로 동시에 여러사람이 동일한 데이터에 접근하고 이용할 수 있다.
- 내용 참조(Content Reference)
- 저장한 데이터 레코드의 위치나 주소가 아닌 사용자가 요구하는 데이터의 내용, 즉 데이터 값에 따라 참조할 수 있어야 한다.
- 실시간 접근성(Real-time Accessability)
- DBMS
- 데이터베이스를 관리하는 소프트웨어.
- 여러 응용 소프트웨어(프로그램) 또는 시스템이 동시에 데이터베이스에 접근하여 사용할 수 있게 한다.
- 필수 3기능
- 정의기능 : 데이터베이스의 논리적, 물리적 구조를 정의
- 조작기능 : 데이터를 검색,삭제,갱신,삽입,삭제 기능
- 제어기능 : 데이터베이스의 내용 정확성과 안전성을 유지하도록 제어하는 기능.
- Oracle, SQL Server, MySQL, DB2
- DBMS 장/단점
- 장점
- 데이터 중복 최소화.
- 데이터 일관성 및 무결성 유지.
- 데이터 보안 보장.
- 단점
- 운영비.
- 백업 및 복구 관리 복잡.
- 부분적 DB손실이 전체 시스템을 정지.
- 장점
- MySQL 설치
- 랩탑과 데스크탑 두 대 모두 설치완료.
SQL
- 데이터를 보다 쉽게 검색하고 추가, 삭제, 수정 같은 조작을 할 수 있도록 고안된 컴퓨터 언어.
- 관계형 데이터베이스에서 데이터를 조작하고 쿼리하는 표준 수단.
- DML
- 데이터 조작
- SELECT, DELETE, UPDATE, INSERT
- DDL
- 스키마 정의 / 조작
- CREATE, DROP, ALTER
- DCL
- 권한 관리, 보안/무결성 관리
- GRANT, REVOKE
1) DB 생성
- MySQL 관리자 계정인 root로 DBMS 접속
mysql -uroot -p
- DB생성 명령
mysql create database DB명;
- DB 사용자 생성 및 권한 부여
create user 'user명'@'%' identified by '패스워드';
grant all on connectdb.* to 'user명'@'%';
-
flush privileges;
@'%'
은 어떤 클라이언트에서든 접근 가능을 의미.@'localhost
는 해당 클라이언트에서만 접근 가능하다는 의미.- db 이름 뒤
*
은 모든 권한을 의미. - flush privileges는 DBMS 적용하라는 의미.
- 생성한 DB 접속
mysql -h 호스트명 -u DB계정명 -p DB이름
- mysql 현재 버전, 현재 날짜 출력 쿼리
select version(), current_date;
- DBMS에 존재하는 database 확인
show databases
- DB 전환 명령어
use db명
2) Table
- Data를 저장하는 공간.
- Table의 구성요소.
- 테이블 : RDBMS의 기본적 저장구조. 한 개 이상의 column과 0개 이상의 row로 구성한다.
- 열(Column) : 테이블 상에서의 단일 종류의 데이터. 특정 데이터 타입 및 크기를 지닌다.
- 행(Row) : Column들의 조합. aka 레코드. 기본키(PK)로 구분.
- 기본키(PK)는 중복을 허용하지 않으며 필수 요소.
- Field : Row와 Column의 교차점. 데이터가 없을 떄는 Null을 지닌다.
- Database에 존재하는 table 목록 확인 쿼리
- show tables;
3) DML
SELECT 구문
- 조회.
SELECT(DISTINCT) 컬럼명(ALIAS)
FROM 테이블명;
INSTRUCT | DESC |
---|---|
SELECT | 검색하고자 하는 데이터(컬럼)을 나열한다. |
FROM | 조회할 테이블 명시. |
DISTINCT | 중복행을 제거. (optional) |
ALIAS | 나타날 컬럼에 대한 다른 별칭 부여. (optional) |
- alias 및 concat 함수 사용 예제
select concat(empno, '-', name) as '사번 및 부서번호'
from employee;
- distinct 사용 예제
select distinct empno
from employee;
- order by 사용 예제
- order by 구문 이후 첫 번째 컬럼, 두 번째 컬럼이라는 의미로 1이나 2를 줄 수도 있다.
- asc / desc (optional)
select empno, name from employee
order by empno desc;
where 절, 키워드, 함수
- 특정행 검색
SELECT(DISTINCT) 컬럼명(ALIAS)
FROM 테이블명
WHERE 조건식;
- 산술비교 연산자, 논리연산자 사용 가능
where hiredate < '1981-01-01'
where deptno = 10 and salary < 3000
- in 키워드
- 부서번호가 10 또는 30
where deptno in (10, 30)
;
- Like 키워드
- 와일드 카드를 사용하여 특정 문자를 포함한 값에 대한 조건을 처리.
%
는 0에서부터 여러 개의 문자열을 나타내는 와일드카드.-
_
는 단 하나의 문자를 나타내는 와일드카드. - 이름에 A가 포함되는 사람, 이름의 두 번째 글자가 A인 사람.
where name like '%A%';
where name like '_A%';
- UCASE, UPPER, LACSE, LOWER
- 오라클 DBMS에서는 From 이하 절이 필수이기에 이러한 함수를 사용 시
from dual
과 같은 테이블을 임시로 명시해야 한다. select upper('Seoul'), ucase('seOUL')
- 활용 예) 컬럼 명을 소문자로 출력하고 싶을 때 예제.
select upper(name) from 테이블명;
- 오라클 DBMS에서는 From 이하 절이 필수이기에 이러한 함수를 사용 시
- substring
select substring('Happy Day' , 3,2);
- 3번째 인덱스 부터 2글자를 보여준다.
- 참고로 mysql db는 인덱스가 1부터 시작.
- LPAD, RPAD
select lpad('hi', 5, '*');
- lpad는 왼쪽, rpad는 오른쪽을 의미.
- hi 라는 글자를 5자로 표현하되, 5자가 되지 않는다면 왼쪽을
*
문자로 채워달라는 명령.
- TRIM, LTRIM, RTIRM
- 공백제거.
- 응용
SELECT TRIM(BOTH 'A' FROM NAME) FROM EMPLOYEE;
- A문자도 제거된다.
- CAST 함수
- type을 변경 하는 함수
CAST(expression, as type)
- 유사
CONVERT(expression, type)
- 인코딩 변경
CONVERT(expr USING transcoding_name)
- MySQL Type
- BINARY, CHAR, DATE, DATETIME, SIGNED {INTEGER}, TIME, UNSIGNED {INTEGER}
- 그룹 함수
- 여러개의 컬럼으로 하나의 값을 만들어내는 아이들.
- COUNT(exp), AVG(exp), MIN(exp), MAX(exp), SUM(exp), GROUP_CONCAT(exp)
- group by 절. 코드 및 실행결과.
select deptno, avg(salary), sum(salary) from employee group by deptno;
+--------+-------------+-------------+ | deptno | avg(salary) | sum(salary) | +--------+-------------+-------------+ | 10 | 2916.666667 | 8750.00 | | 20 | 2175.000000 | 10875.00 | | 30 | 1566.666667 | 9400.00 | +--------+-------------+-------------+
INSERT 구문
INSERT INTO 테이블명(필드1, 필드2, 필드3 ...)
VALUES (필드1의 값, 필드2의 값, 필드3의 값 ...)
INSERT INTO
VALUES (필드1의 값, 필드2의 값, 필드3의 값 ...)
- 테이블에 레코드를 삽입하는 구문.
- 필드명을 생략했을 경우에는 모든 필드 값을 반드시 입력해야 한다.
- 필드명을 지정해주는 방식은 디폴트 값이 세팅되는 필드는 생략 가능.
UPDATE 구문
UPDATE 테이블명
SET 필드1 = 필드1의 값, 필드2 = 필드2의값 ...
WHERE 조건식;
- 테이블에 레코드 정보를 변경하는 구문.
- 조건식을 사용하지 않으면 전체 레코드에 영향을 미친다.
- 조건식을 통해 특정 레코드만 변경할 수 있다.
DELETE 구문
DELETE
FROM 테이블명
WHERE 조건식;
- 테이블의 레코드를 삭제하는 구문.
- 조건식을 사용하지 않으면 전체 레코드에 영향을 미친다.
- 조건식을 통해 특정 레코드만 삭제할 수 있다.
4) DDL
- 테이블과 관련된 예만 진행하지만, 테이블이 아닌 다른 객체도 아래와 같은 DDL로 정의 가능하다.
- 아래는 대표적인 데이터 타입.
TYPE | DESC |
---|---|
INT(M) or INTEGER(M) | unsigned, signed 4Byte. |
FLOAT(M,D) | 부동소수점. signed. |
DOUBLE(M,D) | 2배 정밀도를 가진 부동 소수점. signed. |
DATE | 날짜. ‘9999-12-31’. 3Byte. |
TIMESTAMP | ‘1970-01-01 00:00:00’ 부터 2037년까지 나타낼 수 있다. 4Byte. |
CHAR(M) | 고정 길이 문자열. (M은 1부터 255까지) |
VARCHAR(M) | 가변 길이 문자열. |
- 테이블 생성
create table 테이블명(
필드명1 타입 [NULL | NOT NULL][DEFAULT][AUTO_INCREMNET],
필드명2 타입 [NULL | NOT NULL][DEFAULT][AUTO_INCREMNET],
필드명3 타입 [NULL | NOT NULL][DEFAULT][AUTO_INCREMNET],
....
PRIMARY KEY (필드명)
)
- 테이블 수정(컬럼 추가, 삭제)
ALTER TABLE 테이블명
ADD 필드명 타입 [NULL | NOT NULL][DEFAULT][AUTO_INCREMNET];
ALTER TABLE 테이블명
DROP 필드명;
- 테이블 수정(컬럼 수정)
ALTER TABLE 테이블명
CHANGE 필드명 새필드명 타입 [NULL | NOT NULL][DEFAULT][AUTO_INCREMNET];
- 테이블 이름 변경
ALTER TABLE 테이블명 RENAME 변경이름
- 테이블 삭제
- 만약 제약 조건이 있을 경우 테이블이 삭제 되지 않을 수 있다.
- 그럴 경우 테이블을 생성한 반대 순으로 삭제를 진행해야 한다.
DROP TABLE 테이블명;
Subscribe via RSS