DATA BASE & MySQL - 21.05.22
in Dev
데이터 베이스(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) : 데이터베이스에서 데이터를 정의, 조작, 제어하기 위해 사용하는 언어
DDL(Data Definition Language) : 데이터베이스나 테이블 등을 생성, 삭제하거나 그 구조를 변경하기 위한 명령어 (CREATE, ALTER, DROP)
DML(Data Manipulation Language) : 데이터베이스에 저장된 데이터를 처리하거나 조회, 검색하기 위한 명령어(INSERT, UPDATE, DELETE, SELECT 등)
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;
타입
숫자 타입
정수 타입(integer types) : INT (TINYINT, SMALLINT, MEDIUMINT, BIGINT)
고정 소수점 타입(fixed-point types) : DECIMAL(M,D) (실수의 값을 정확하게 표현하기 위해 사용)
부동 소수점 타입(floating-point types) : FLOAT(P),FLOAT(M,D),DOUBLE(M,D) (실수의 값을 대략적으로 표현하기 위해 사용)
비트값 타입(bit-value type) : BIT(M) (비트의 값을 저장)
문자열 타입
CHAR(고정 길이의 문자열) & VARCHAR(가변 길이의 문자열)
BINARY와 VARBINARY
BLOB과 TEXT
ENUM
SET : 여러 개를 동시에 저장할 수 있는 타입. SET(‘데이터값1’, ‘데이터값2’, …)
날짜와 시간 타입
DATE(YYYY-MM-DD), DATETIME(‘YYYY-MM-DD HH:MM:SS’), TIMESTAMP(데이터가 마지막으로 입력되거나 변경된 시간이 저장)
TIME(‘HH:MM:SS’나 ‘HHH:MM:SS’)
YEAR : YEAR(4)는 4자리의 연도를 저장
연산자
- 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
- IF() : 첫 번째 인수로 전달받은 표현식의 논리값에 따라 다른 값을 반환
<!-- 만약 expr1이 참이면 expr2를 반환하고, 거짓이면 expr3를 반환합니다. -->
IF(expr1, expr2, expr3)
SELECT IF(0 < 1, 'yes', 'no'); // yes
- IFNULL() : 첫 번째 인수로 전달받은 값이 NULL인지 아닌지를 검사하여 다른 값을 반환
IFNULL(expr1, expr2)
<!-- 만약 expr1의 값이 NULL이 아니면 expr1 그 자체를 반환하고, NULL이면 expr2를 반환 -->
- 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 : 정규 표현식을 토대로 하는 패턴 매칭 연산을 제공
타입 변환
BINARY : 뒤에 오는 문자열을 바이너리 문자열로 변환하여 문자가 아닌 바이트를 기준으로 하여 비교나 검색 작업을 수행
CAST() : 전달받은 값을 명시된 타입으로 변환하여 반환
CAST(expr AS type)
- CONVERT() : 인수로 전달받은 값을 명시된 타입으로 변환하여 반환. 두 번째 인수로 변환하고자 하는 타입을 직접 전달
CONVERT(expr, type)
---
CONVERT(expr USING transcoding_name)
제약 조건
- 테이블 생성 제약 조건 : 데이터의 무결성을 지키기 위해, 데이터를 입력받을 때 실행되는 검사 규칙
- NOT NULL : 해당 필드는 NULL 값을 저장할 수 없게 됩니다.
- UNIQUE : 해당 필드는 서로 다른 값을 가져야만 합니다.
- PRIMARY KEY : 해당 필드가 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가지게 됩니다.
- FOREIGN KEY : 하나의 테이블을 다른 테이블에 의존하게 만듭니다.
- 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