DATA BASE & MySQL - 21.05.22


데이터 베이스(DB:DataBase)

데이터의 집합체. 중복된 데이터를 없애고, 자료를 구조화하여, 효율적인 처리를 할 수 있도록 관리. 데이터베이스는 응용 프로그램과는 다른 별도의 미들웨어에 의해 관리.

관계형 데이터 베이스

테이블(table)로 이루어져 있으며, 이 테이블은 키(key)와 값(value)의 관계

관계형 데이터 베이스 용어
  • 열(column, field, attribute) : 각각의 열은 유일한 이름을 가지고 있으며, 자신만의 타입 가지고 있음

  • 행(row, tuple, record) : 관계된 데이터의 묶음을 의미. 한 테이블의 모든 행은 같은 수의 열을 가지고 있음.

  • 값(value) : 테이블은 각각의 행과 열에 대응하는 값을 가지고 있음. 이러한 값은 열의 타입에 맞는 값이어야 함.

  • 키(Key) : 테이블에서 행의 식별자로 이용되는 열을 키(key) 또는 기본 키(primary key). 즉, 테이블에 저장된 레코드를 고유하게 식별하는 후보 키(candidate key) 중에서 데이터베이스 설계자가 지정한 속성을 의미

  • 관계(relationship) : 관계를 맺는 테이블의 수에 따라 분류 (일대일 관계, 일대다 관계, 다대다 관계)

  • 외래 키(foreign key) : 관계형 데이터베이스에서는 이러한 관계를 나타내기 위해 외래 키(foreign key) 사용

  • 스키마(schema) : 테이블을 디자인하기 위한 청사진. 스키마는 테이블의 각 열에 대한 항목과 타입뿐만 아니라 기본 키와 외래 키도 표시.

  • SQL(Structured Query Language) : 데이터베이스에서 데이터를 정의, 조작, 제어하기 위해 사용하는 언어

  1. DDL(Data Definition Language) : 데이터베이스나 테이블 등을 생성, 삭제하거나 그 구조를 변경하기 위한 명령어 (CREATE, ALTER, DROP)

  2. DML(Data Manipulation Language) : 데이터베이스에 저장된 데이터를 처리하거나 조회, 검색하기 위한 명령어(INSERT, UPDATE, DELETE, SELECT 등)

  3. DCL(Data Control Language) : 데이터베이스에 저장된 데이터를 관리하기 위하여 데이터의 보안성 및 무결성 등을 제어하기 위한 명령어 (GRANT, REVOKE 등)

MySQL

  • MySQL : 관계형 데이터베이스 관리 시스템(RDBMS: Relational Database Management System) 데이터베이스를 관리하는 미들웨어.
MySQL Syntax
  • 데이터 베이스 생성
<!-- 데이터 베이스 생성 -->
CREATE DATABASE 생성할데이터베이스명
  • 사용할 데이터베이스 선택
<!-- 사용할 데이터 베이스 선택 -->
USE 사용할데이터메이스명
  • 테이블 생성
<!-- 테이블 생성 -->
CREATE TABLE  (
    필드이름1 필드타입1,
    필트이름2 필드타입2,
    ...
    필드이름5 필드타입5
)
  • ALTER : 데이터베이스와 테이블의 내용을 수정
<!-- 데이터베이스 수정 -->
ALTER DATABASE 수정할데이터베이스이름 수정할내용

<!-- 데이터베이스 이름 수정 -->
ALTER DATABASE 데이터베이스이름 CHARACTER SET=문자집합이름

<!-- 테이블 수정 -->

<!-- 테이블 필드 추가 -->
ALTER TABLE 테이블이름 ADD 필드이름 필드타입

<!-- 테이블 필드 삭제 -->
ALTER TABLE 테이블이름 DROP 필드이름

<!-- 필드 타입 변경 -->
ALTER TABLE 테이블이름 MODIFY COLUMN 필드이름 필드타입
  • DROP : 데이터베이스와 테이블 내용 삭제
<!-- 데이터베이스 삭제 -->
DROP DATABASE 데이터베이스이름

<!-- 테이블 삭제 : 제테이블을 삭제하면 해당 테이블의 모든 데이터도 삭제 -->
DROP TABLE 테이블이름

<!-- 테이블의 모든 데이터만 삭제 -->
TRUNCATE TABLE 테이블이름

<!-- 삭제 조건문 : 삭제하려는 이름의 데이터베이스나 테이블이 존재하지 않을때 발생하는 에러 방지 -->
<!-- 만약 데이터베이스명이 존재하면 삭제 -->
DROP DATABASE IF EXISTS 데이터베이스명;

<!-- 만약 테이블명이 존재하면 삭제 -->
DROP TABLE IF EXISTS 테이블명;
  • INSERT INTO : 테이블에 새로운 레코드 추가
INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...)
VALUES (데이터값1, 데이터값2, 데이터값3, ...)

<!-- 필드의 이름을 생략 가능. 생략한 경우 데이터베이스의 스키마와 같은 순서대로 필드의 값이 자동 대입 -->
<!-- 생략 가능 필드 :  
NULL을 저장할 수 있도록 설정된 필드, 
DEFAULT 제약 조건이 설정된 필드, 
AUTO_INCREMENT 키워드가 설정된 필드 -->

INSERT INTO 테이블이름
VALUES (데이터값1, 데이터값2, 데이터값3, ...)
  • UPDATE SET : 테이블의 레코드 수정
UPDATE 테이블이름

SET 필드이름1=데이터값1, 필드이름2=데이터값2, ...

WHERE 필드이름=데이터값

<!-- 테이블이름의 WHERE 절에 있는 데이터를 SET에 있는 데이터로 수정 -->
  • DELETE : 테이블의 레코드를 삭제
<!-- 테이블의 특정 데이터 삭제 -->
DELETE FROM 테이블이름
WHERE 필드이름=데이터값

<!-- 테이블의 모든 데이터 삭제 -->
DELETE FROM 테이블이름;
  • SELECT : WHERE, DISTINCT, ORDER BY (DESC), AS
<!-- 테이블의 모든 필드 선택 -->
SELECT *
FROM 테이블이름;

<!-- 테이블의 특정 필드 선택 -->
SELECT 필드이름1, 필드이름2
FROM 테이블이름;

<!-- 특정 조건의 레코드 선택 -->
SELECT 필드이름
FROM 테이블이름
WHERE 조건;

<!-- 중복되는 값 제거 -->
SELECT DISTINCT Name
FROM Reservation;

<!-- 필드이름으로 선택한 결과 오름차순 정렬 -->
SELECT * 
FROM 테이블이름
ORDER BY 필드이름;

<!-- 필드이름으로 선택한 결과 내림차순 정렬 -->
SELECT * 
FROM 테이블이름
ORDER BY 필드이름 DESC;

<!-- 필드 별 선택한 결과 내림차순, 오름차순 정렬 -->
SELECT *
FROM 테이블이름
ORDER BY 필드이름1 DESC, 필드이름2 ASC; 

<!-- 별칭을 이용한 처리. 이름을 별칭으로 지정 -->
SELECT 필드이름 AS 별칭
FROM 테이블이름;

SELECT 필드이름
FROM 테이블이름 AS 별칭;

SELECT ReserveDate, CONCAT(RoomNum, " : ", Name) AS ReserveInfo
FROM Reservation;

타입

숫자 타입

  1. 정수 타입(integer types) : INT (TINYINT, SMALLINT, MEDIUMINT, BIGINT)

  2. 고정 소수점 타입(fixed-point types) : DECIMAL(M,D) (실수의 값을 정확하게 표현하기 위해 사용)

  3. 부동 소수점 타입(floating-point types) : FLOAT(P),FLOAT(M,D),DOUBLE(M,D) (실수의 값을 대략적으로 표현하기 위해 사용)

  4. 비트값 타입(bit-value type) : BIT(M) (비트의 값을 저장)

문자열 타입

  1. CHAR(고정 길이의 문자열) & VARCHAR(가변 길이의 문자열)

  2. BINARY와 VARBINARY

  3. BLOB과 TEXT

  4. ENUM

  5. SET : 여러 개를 동시에 저장할 수 있는 타입. SET(‘데이터값1’, ‘데이터값2’, …)

날짜와 시간 타입

  1. DATE(YYYY-MM-DD), DATETIME(‘YYYY-MM-DD HH:MM:SS’), TIMESTAMP(데이터가 마지막으로 입력되거나 변경된 시간이 저장)

  2. TIME(‘HH:MM:SS’나 ‘HHH:MM:SS’)

  3. YEAR : YEAR(4)는 4자리의 연도를 저장

연산자

  1. CASE : 값을 서로 비교하거나, 표현식의 논리값에 따라 다른 값을 반환
<!-- value와 compare_value가 같은 경우 THEN 이후 실행 -->
CASE value
    WHEN [compare_value] THEN result
    [WHEN [compare_value] THEN result] ...
    [ELSE result]
END

<!-- condition이 True인 경우 실행 -->
CASE
    WHEN [condition] THEN result 
    [WHEN [condition] THEN result] ...
    [ELSE result]
END
  1. IF() : 첫 번째 인수로 전달받은 표현식의 논리값에 따라 다른 값을 반환
<!-- 만약 expr1이 참이면 expr2를 반환하고, 거짓이면 expr3를 반환합니다. -->
IF(expr1, expr2, expr3)

SELECT IF(0 < 1, 'yes', 'no'); // yes
  1. IFNULL() : 첫 번째 인수로 전달받은 값이 NULL인지 아닌지를 검사하여 다른 값을 반환
IFNULL(expr1, expr2)
<!-- 만약 expr1의 값이 NULL이 아니면 expr1 그 자체를 반환하고, NULL이면 expr2를 반환 -->
  1. NULLIF() : 인수로 전달받은 두 값이 서로 같은지를 검사하여 다른 값을 반환
NULLIF(expr1, expr2)
만약 expr1과 expr2의 값이 서로 같으면 NULL을 반환하고, 같지 않으면 expr1을 반환합니다.

<!-- NULLIF()문 => CASE 문으로 바꾼다면 -->
CASE
    WHEN expr1 = expr2 
    THEN NULL 
    ELSE expr1 
END

패턴 매칭

  • 와일드 카드 : 문자열 내에서 임의의 문자나 문자열을 대체하기 위해 사용되는 기호를 의미. % : 0개 이상의 문자를 대체 _ : 1개의 문자를 대체)

  • LIKE

SELECT * FROM 테이블명
<!-- a로시작하는 문자 찾기 -->
WHERE 필드명 LIKE 'a%';
  • REGEXP : 정규 표현식을 토대로 하는 패턴 매칭 연산을 제공

타입 변환

  1. BINARY : 뒤에 오는 문자열을 바이너리 문자열로 변환하여 문자가 아닌 바이트를 기준으로 하여 비교나 검색 작업을 수행

  2. CAST() : 전달받은 값을 명시된 타입으로 변환하여 반환

CAST(expr AS type)
  1. CONVERT() : 인수로 전달받은 값을 명시된 타입으로 변환하여 반환. 두 번째 인수로 변환하고자 하는 타입을 직접 전달
CONVERT(expr, type)
---
CONVERT(expr USING transcoding_name)

제약 조건

  • 테이블 생성 제약 조건 : 데이터의 무결성을 지키기 위해, 데이터를 입력받을 때 실행되는 검사 규칙
  1. NOT NULL : 해당 필드는 NULL 값을 저장할 수 없게 됩니다.
  2. UNIQUE : 해당 필드는 서로 다른 값을 가져야만 합니다.
  3. PRIMARY KEY : 해당 필드가 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가지게 됩니다.
  4. FOREIGN KEY : 하나의 테이블을 다른 테이블에 의존하게 만듭니다.
  5. DEFAULT : 해당 필드의 기본값을 설정합니다.
CREATE TABLE  (
    <!-- 필드1은 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가지게 됩니다. -->
    필드이름1 필드타입1 PRIMARY KEY,

    <!--  필드2는 NULL 값을 저장할 수 없게 됩니다. -->
    필트이름2 필드타입2 NOT NULL,

    <!-- 필드3은 서로 다른 값을 가져야만 합니다. -->
    필트이름3 필드타입4 UNIQUE,

    <!-- 테이블을 다른 테이블에 의존하게 만듭니다. -->
    필드이름4 필드타입5 FOREIGN KEY(필드이름) REFERENCES 테이블이름 (필드이름)

    <!-- 필드5의 기본값을 설정합니다. -->
    필드이름5 필드타입5 DEFAULT
)

<!-- 테이블에 새로운 필드 추가 시 제약 조건 설정 -->
ALTER TABLE 테이블이름
ADD 필드이름 필드타입 제약조건

<!-- 기존 필드에 제약 조건 설정 -->
ALTER TABLE 테이블이름
MODIFY COLUMN 필드이름 필드타입 제약조건

<!-- 제약조건 이름 설정 : 제약 조건 앞에 CONSTRAINT 제얀조건이름 작성 -->
[CONSTRAINT 제약조건이름] 제약조건 (필드이름)

<!-- 제약조건 이름을 설정하면 해당 제약 조건을 삭제 가능 -->
ALTER TABLE 테이블이름
DROP INDEX 제약조건이름

참고 : http://tcpschool.com/mysql/DB




© 2020.11. by creamer

Powered by CREAMer