본문 바로가기

카테고리 없음

db -3w

01 MySQL key 종류

- Primary key

- Unique key

- index key

02 무결성 제약조건

03 개념적 key의 종류

슈퍼키, 후보키, 기본키, 대리키, 대체키, 외래키

04 인덱스 더 알아보기

-B-tree

- 클러스터

- 논클러스터

 

01 

[primary key(기본키)]

: 테이블 당 하나만 존재할 수 있는 가장 기본이 되는 Key 이다.

 다른 레코드 값과 중복될 수 없고 null일 수도 없다.

 

* 기본키 설정하기

-  테이블을 새로 만들 때 (column1이 primary key일 경우)

CREATE TABLE table_name(

              column1 datatype NOT NULL PRIMARY KEY,

              column2 datatype,

               ...

);

 

- 이미 만들어진 테이블을 수정할 떄

ALTER TABLE table_name

ADD PRIMARY KEY (column_name);

 -> 이 경우에는 primary key로 설정하는 column이 NOT NULL이어야 한다.

 

[Unique Key]

- 값의 중복을 허용하지 않음

- 유니크키가 설정된 칼럼에 입력되는 데이터가 각각 유일하다는 것을 보장해줌

- 하나의 테이블에 여러 개의 유니크 키 설정 가능

- 주로 기본키 설정후 추가적으로 고유한 식별자가 있는 경우 유니크키로 설정

- 유니크키의 값은 null값이 허용됨

 

*유니크키 설정하기

 

-테이블을 새로 만들 떄(column1,2가 고유 식별자일 경우)

CREATE TABLE table_name(

         column1 datatype UNIQUE,

         column2 datatype UNIQUE,

         column3 datatype,

          ...

);

 

혹은

 

CREATE TABLE table_name(

         column1 datatype,

         column2 datatype,

         column3 datatype,

          ...

          UNIQUE INDEX index1_name(column1),

          UNIQUE INDEX index2_name(column2)

);

 

 

- 이미 만들어진 테이블 스키마를 수정할 때

 

ALTER TABLE table_name

ADD UNIQUE INDEX index_name(column_name);

 

혹은

 

ALTER TABLE table_name

ADD UNIQUE (column_name);

 

[Index Key]

- 테이블 마다 여러 개의 인덱스 key설정 가능

- 중복 값과 null값이 허용됨

- 검색 속도 향상시키기 위한 용도로 활용

 

* 인덱스키 설정하기

 

- 테이블을 새로 만들 떄 (column1,2에 대해 인덱스를 만드는 경우)

 

CREATE TABLE table_name(

         column1 datatype,

         column2 datatype,

         column3 datatype,

         ....

         INDEX index1_name(column1),

         INDEX index2_name(column2)

);

 

- 이미 만들어진 테이블 스키마를 수정할 때

ALTER TABLE table_name

ADD INDEX index_name(column_name);

 

[AUTO_INCREMENT]

: 각 컬럼의 기본값으로 설정해 줄 수 있는 옵션 중 하나

  - 주로 고유 식별자 번호를 자동으로 발급하는데 사용

  - 레코드의 값이 중복되지 않고 1씩 자동 증가하게 됨

* INSERT INTO로 레코드 추가시 AUTO_INCREMENT에 해당하는 컬럼에 NULL을 넣거나 입자 목록에서 생략하면 자동으로 값이 채워짐

 

예시) 

INSERT INTO market VALUES(NULL, '김민준','사과'); 

or

INSERT INTO market( seller,product) VALUES('김민준', ' 사과');

 

실습>

 

CREATE DATABASE day_3;

USE day_3;

CREATE TABLE account(nickname VARCHAR(30) NOT NULL PRIMARY KEY,

                                          address VARCHAR(100),

                                          manner_point INT,

                                          reg_date DATETIME);

CREATE TABLE market(market_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY

                                        seller VARCHAR(30),

                                        produdct VARCHAR(30),

                                        amout INT,

                                        price BIGINT,

                                        reg_data DATETIME,

                                        FOREIGN KEY (seller) REFERENCES amount(nickname));

 

레코드 추가 예시>

 

INSERT INTO account VALUES('김영진','서울','100,'2023-03-07 10:10:10');

''

 

 

[02 무결성 제약 조건]

 

무결성: 데이터의 정확성, 일관성을 나타냄

- 데이터에 결함이 없는 상태, 즉 데이터를 정확하고 일관되게 유지하는 것을 의미함

 

<무결성 제약조건>

: 데이터베이스의 정확성, 일관성을 보장하기 위해 저장, 삭제, 수정 등을 제약하기 위한 조건을 뜻함

 

1. 개체 무결성 제약조건(기본키 제약 조건)

: 각 테이블의 기본키를 구성하는 속성은 NULL값이나 중복 값이 될 수 없음

2. 참조 무결성 제약조건(외래키 제약 조건)

: 외래키 칼럼의 값은 NULL이거나 참조하는 부모 테이블 컬럼의 값과 동일해야 함

3. 도메인 무결성 제약조건

: 속성 안에 들어가는 값들은 정의된 도메인에 속한 값이어야 함

4. 고유 무결성 제약 조건

: 속성 값들이 서로 달라야 함(NULL은 허용)

 

[04 개념적 키의 종류]

 

<슈퍼키>

투플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합

-> 투플을 유일하게 식별할 수 있는 값이면 모두 슈퍼키가 될 수 있음

 

<후보키>

투플을 유일하게 식별할 수 있는 속성의 최소 집합

* 2개 이상의 속성으로 이루어진 키를 복합키라고 함

 

<기본키>

여러 후보키 중 하나를 선정하여 대표로 삼는 키

* 기본키 선정 시 고려사항

 - 투플을 식별할 수 있는 고유한 값을 가져야 함

 - NULL값 허용X 

 - 키 값의 변동이 일어나지 않아야 함

 - 최대한 적은 수의 속성을 가진 것이어야 함

 

* 릴레이션 스키마를 표현할 때 기본키는 밑줄을 그어 표시

 

<대리키(인조키)>

- 기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하여 마땅한 기본키가 없을 떄는 일련번호 같은 가상의 속성을 만들어 기본키로 삼는 경우를 말함

 

<대체키>

- 기본키로 선정되지 않은 후보키

 

<외래키>

- 다른 릴레이션의 기본키를 참조하여 릴레이션 간의 관계를 표현함

* 외래키 특장

 - 참조하고(외래키) , 참조되는(기본키) 양쪽 도메인은 서로 같아야 함

 - 기본키 값이 변경되면 외래키 값도 변경됨

 - NULL 값과 중복 값 등이 허용됨

 - 자기 자신의 기본키를 참조하는 외래키도 가능함

 

[04 인덱스 더 알아보기]

<B-Tree >

Balanced Tree,  균형트리 - DBMS 는 빠른 값 검색을 위해 Key를 B-Tree로 정렬해 둠

*논클러스터 방식

스토리지 어딘가에 만들어진 인덱스, 스토리지 어딘가에 저장된 데이터들 목록

 

*클러스터 방식

B-Tree의 말단에 바로 데이터를 정렬해 두는 방식

 

<논클러스터 방식 vs 클러스터 방식>

- 레코드 추가가 빠르다    - 레코드 추가가 느리다

- 검색이 느리다                - 검색이 빠르다

                                         -Key가 여러 개일 경우에도 테이블당 하나만 생성됨