20180817

DB

  • DB의 기본 개념
    • 데이터의 집합.
    • 여러 응용 시스템(프로그램)들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터의 집합.
    • 효율적으로 저장, 검색, 갱신할 수 있도록 데이터 집합들끼리 연관시키고 조직화되어야 한다.
  • DB의 특성
    • 실시간 접근성(Real-time Accessability)
      • 사용자의 요구를 즉시 처리할 수 있다.
    • 계속적인 변화(Continuous Evolution)
      • 정확한 값을 유지하기 위해 삽입/삭제/수정 작업 등으로 데이터를 지속적으로 갱신할 수 있다.
    • 동시 공유성(Concurrent Sharing)
      • 사용자마다 서로 다른 목적으로 사용하므로 동시에 여러사람이 동일한 데이터에 접근하고 이용할 수 있다.
    • 내용 참조(Content Reference)
      • 저장한 데이터 레코드의 위치나 주소가 아닌 사용자가 요구하는 데이터의 내용, 즉 데이터 값에 따라 참조할 수 있어야 한다.
  • DBMS
    • 데이터베이스를 관리하는 소프트웨어.
    • 여러 응용 소프트웨어(프로그램) 또는 시스템이 동시에 데이터베이스에 접근하여 사용할 수 있게 한다.
    • 필수 3기능
      • 정의기능 : 데이터베이스의 논리적, 물리적 구조를 정의
      • 조작기능 : 데이터를 검색,삭제,갱신,삽입,삭제 기능
      • 제어기능 : 데이터베이스의 내용 정확성과 안전성을 유지하도록 제어하는 기능.
    • Oracle, SQL Server, MySQL, DB2
  • DBMS 장/단점
    • 장점
      • 데이터 중복 최소화.
      • 데이터 일관성 및 무결성 유지.
      • 데이터 보안 보장.
    • 단점
      • 운영비.
      • 백업 및 복구 관리 복잡.
      • 부분적 DB손실이 전체 시스템을 정지.
  • MySQL 설치
    • 랩탑과 데스크탑 두 대 모두 설치완료.

SQL

  • 데이터를 보다 쉽게 검색하고 추가, 삭제, 수정 같은 조작을 할 수 있도록 고안된 컴퓨터 언어.
  • 관계형 데이터베이스에서 데이터를 조작하고 쿼리하는 표준 수단.
  • http://www.ciokorea.com/print/35385

  • 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을 지닌다.

    dbtable

  • 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 테이블명;
  • 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 테이블명;