MySQL

sunsetk·2022년 6월 24일
0

DBMS

목록 보기
3/5

SQL문

Structured Query Language
한줄씩 번역되고 빈번한 수정이 있을 때 효율적이다.
번역과 동시에 실행된다.(번역 파일이 따로 존재하지 않는다.)

데이터베이스 생성

CREATE DATABASE 데이터베이스명;

데이터베이스 사용

USE 데이터베이스명;

자료형

숫자형

  • INT : 정수
  • DECIMAL(n,m) : n(전체자리수) / m(소수점자리수)
    ex) DECIMAL(4,2) → -99.99 ~ 99.99

문자열

  • CHAR(n) : n바이트의 문자열(고정형), 빈 자리는 그대로 남겨둔다.
    ex) CHAR(4) → [    ] → 'A'를 넣으면? → [A   ]
  • VARCHAR(n) : n바이트의 문자열(가변형), 빈 자리는 할당 해제
    ex) VARCHAR(4) → [    ] → 'A'를 넣으면? → [A]

시간(날짜)

  • DATE : 한 순간의 날짜를 표현하는 타입
  • DATETIME : 한 순간의 날짜와 시간을 표현하는 타입

DDL

Data Definition Language - 데이터 정의어
테이블에 관련된 쿼리문

  • CREATE : 테이블 생성
  • ALTER : 테이블 수정
  • DROP : 테이블 삭제

테이블 생성

CREATE TABLE 테이블명(
	컬럼명1 자료형,
    컬럼명2 자료형,
    ...,
	{제약조건}
);
# {} ← 생략이 가능하다는 뜻이다.

테이블 삭제

DROP TABLE 테이블명;

테이블 수정

ALTER TABLE 테이블명
  • 컬럼추가
    ADD 컬럼명 자료형
  • 컬럼수정
    MODIFY 컬럼명 자료형
  • 컬럼삭제
    DROP 컬럼명
# 예시
CREATE TABLE test(
	intdata INT,
    strdata VARCHAR(300)
);

DROP TABLE test;

ALTER TABLE test ADD doubledata DECIMAL(4,2);
ALTER TABLE test MODIFY doubledata DECIMAL(7,3);
ALTER TABLE test DROP doubledata;

제약조건

데이터 삽입시 특정한 조건에 맞는 데이터만 삽입될 수 있도록 걸어놓는 조건

PRIMARY KEY

기존 테이블 → ALTER / ADD CONSTRAINT
새로운 테이블 → CREATE 안에 CONSTRAINT PRIMARY KEY(컬럼명)

FOREIGN KEY

다른 테이블과 관계성을 맺기 위해 가져오는 PK값
다른 테이블에 존재하는 값만 들어올 수 있도록 걸어주는 제약조건

관계성을 맺은 테이블

FOREIGN KEY 를 부여한 테이블은 자식 테이블
참고되고 있는 테이블은 부모 테이블

값 추가, 테이블 생성 : 부모테이블 먼저
값 삭제, 테이블 삭제 : 자식테이블 먼저

# 예시
CREATE TABLE flower(
	flowernum INT,
	type VARCHAR(300),
    color VARCHAR(300),
    size VARCHAR(300),
    flowerlang VARCHAR(300),
    price INT,
    season VARCHAR(300),
    potcode INT,
    CONSTRAINT PRIMARY KEY(flowernum),
    CONSTRAINT FOREIGN KEY(potcode) REFERENCES pot(potcode)
);

CREATE TABLE pot(
	potcode INT,
	material VARCHAR(300),
    shape VARCHAR(300),
    madein VARCHAR(300),
    price INT,
    size VARCHAR(300),
    CONSTRAINT PRIMARY KEY(potcode)
);

CHECK

CHECK(조건식) → 조건식이 참인 테이블만 삽입 가능
칼럼 IN(값1, 값2, ...) : 컬럼의 값이 값1, 값2, ...에 있으면 참

UNIQUE

중복되는 값이 들어오면 오류발생

# CHECK / UNIQUE 예시
CREATE TABLE student(
	studnum VARCHAR(300),
    name VARCHAR(300),
    age INT,
    gen CHAR(1) CHECK(gen IN ('M','W')),
    jumin VARCHAR(300) UNIQUE,
    CONSTRAINT PRIMARY KEY(studnum)
);

무결성

데이터의 정확성, 일관성, 유효성이 유지 되는것

  • 정확성
    데이터는 애매하지 않아야 한다.
  • 일관성
    각 사용자가 일관된 데이터를 볼 수 있도록 해야한다.
  • 유효성
    데이터가 실제 존재하는 데이터여야 한다.

개체 무결성

서로 다른 두 개체는 같지 않아야 하는것
테이블이 PK로 설정된 컬럼을 가지도록 설계한다.

참조 무결성

참조되는 기본키(PRIMARY KEY)는 실제 존재하는 키여야 하는것

도메인 무결성

컬럼의 타입, NULL값 허용 등에 대한 사항을 정의하고
올바른 데이터가 들어왔는지 확인 하는것


모델링

추상적인 주제를 DB에 맞게 설계하는 것

  1. 요구분석
  2. 개념적 설계
  3. 논리적 설계(논리 모델링)
  4. 물리적 설계(물리 모델링)
  5. 구현

1. 요구분석

<영화관>
로그인
예매			[영화관정보, 영화정보, 일시, 좌석]
영화 조회	[영화제목, 영화장르, 감독정보, 배우정보, 제작사, 러닝타임]
영화관 조회	[이름, 주소, 전화번호, 사이트]

2. 개념적 설계(개념 모델링)

영화			예매			영화관
-------------------------------------
영화코드		예매번호		영화관 코드
영화제목		누가			이름
영화장르		영화관코드	주소
감독정보		영화코드		전화번호
배우정보		일시			사이트
제작사		좌석
러닝타임

3. 논리적 설계(논리 모델링)

영화				예매			영화관
-------------------------------------
영화코드(PK)		예매번호(PK)		영화관 코드(PK)
영화제목(NN)		누가				이름
영화장르			영화관코드(FK)	주소
감독정보(FK)		영화코드(FK)		전화번호
배우정보			일시				사이트
제작사			좌석
러닝타임

4. 물리적 설계(물리 모델링)

영화코드 : VARCHAR(300)
영화제목 : VARCHAR(500)

5. 구현


정규화

삽입, 수정, 삭제의 이상현상을 제거하기 위해 진행한다.
데이터 중복을 최소화 할 수 있고 대부분 3차 정규화까지 진행한다.

# 예시
아이디		이름		전공		수업코드		수업명		수업인원
apple		김사과		컴공과		C001		너무쉬운자바		30
apple		김사과		컴공과		C002		너무쉬운DBMS		35
banana		반하나		수학과		C002		너무쉬운DBMS		35
  • 삽입이상
    새로운 학생이 추가되었고 그 학생은 수강신청한 과목이 없다면
    수업코드에 NULL을 넣거나 혹은 'XXXX' 같은 약속된 코드값을 삽입해 주어야 한다.
    이러한 현상을 삽입 이상이라고 한다.

  • 갱신이상
    중복 행 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제이고
    만약 김사과가 전과해서 새로운 과로 이동을 했다면 두 행의 데이터 모두
    수정을 해주어야 한다. 이러한 현상을 갱신 이상이라고 한다.

  • 삭제이상
    행을 삭제할 때 꼭 필요한 데이터까지 함께 삭제되는 문제이고
    만약 너무쉬운 DBMS 수업이 폐강되면 반하나 의 행을 모두 삭제하게 된다.
    반하나의 데이터가 남지 않게 되고 이러한 현상을 삭제 이상이라고 한다.

# 예시
<주문 테이블>
이름			나이		우편번호 주소		상품명			상품가격
김사과		10		1000 역삼동		바지, 양말		1000,500
반하나		20		1001 사당동		바나나			2000
이체리		30		2001 분당구		필터, 오리, 낭만	1000,2000,3000

1차 정규화

하나의 컬럼에는 값이 1개씩만 있어야 한다.
반복적인 컬럼값이 나타나는 경우에는 그 값의 활용이 어려워진다.

# 예시
<주문 테이블>
이름			나이		우편번호 주소		상품명		상품가격
김사과		10		1000 역삼동		바지			1000
김사과		10		1000 역삼동		양말			500
반하나		20		1001 사당동		바나나		2000
이체리		30		2001 분당구		필터			1000
이체리		30		2001 분당구		오리			2000
이체리		30		2001 분당구		낭만			3000

2차 정규화

테이블의 모든 컬럼이 서로 관계가 있어야 한다.
관계가 없는 컬럼들이 존재한다면 테이블을 나누어준다.

# 예시
<유저 테이블>
이름			나이		우편번호 주소
김사과		10		1000 역삼동
반하나		20		1001 사당동
이체리		30		2001 분당구

<상품 테이블>
상품명		상품가격
바지			1000
양말			500
바나나		2000
필터			1000
오리			2000
낭만			3000

3차 정규화

하나의 컬럼은 그 외 다른 컬럼을 결정할 수 없다.

# 예시
<유저 테이블>
이름			나이		우편번호
김사과		10		1000
반하나		20		1001
이체리		30		2001
차두리		40		1000

<주소 테이블>
우편번호	시		구		동
1000	서울시	강남구	역삼동
1001	서울시	동작구	사당동
2001	성남시	분당구	금곡동

반정규화

활용하는 단계에서 정규화를 진행하지 않는게 더 편리하면 반(반대)정규화를 거친다.

profile
더디지만, 자라는 중입니다.

0개의 댓글