6개월 대장정/MySQL 개념

68일차 - [MySQL] CREATE, ALTER, DROP, 제약 조건

pitang 2021. 12. 4. 03:40
반응형

안녕하세요. pitang입니다.

오늘은 테이블 생성, 수정, 제거와 제약 조건에 대해 알아보겠습니다.

 

CREATE TABLE 문

CREATE TABLE 문을 사용하여 데이터를 저장할 테이블을 생성한다.

이 명령문 하나로 테이블에 대한 구조를 정의하고, 데이터를 저장하기 위한 공간을 할당한다.

 

테이블을 생성하기 위해서는 테이블명을 정의하고 테이블을 구성하는 칼럼의 데이터 타입과 무결성 제약 조건을 정의해야 한다.

테이블 및 칼럼명을 정의하기 위한 규칙은 다음과 같다.

- 문자로 시작해야 하며 30자 이내로 작성.

- 문자, 숫자, 특수문자만 사용 가능.

- 대소문자 구별이 없고, 소문자로 저장하려면 작은따옴표로 묶어 주어야 함.

- 동일 사용자가 소유한 다른 객체의 이름과 중복되지 않아야 함.

 

테이블을 생성하기 위한 기본 형식은 다음과 같다.

CREATE TABLE [schema.] table
(column datatype [DEFAULT expression][column_constraint clause][,...]);

 

datatype 은 칼럼에 대한 데이터 타입과 길이를 지정한다.

DEFAULT expression은 데이터 입력 시 값이 생략된 경우에 입력되는 기본 값이다.

column_constraint_clause은 칼럼에 대해 정의되는 무결성 제약 조건이다.

제약 조건에 대해서는 이 게시물 맨 마지막 개념에서 알아볼 것이다.

 

데이터 타입

CHAR size 크기의 고정 길이 문자 데이터 타입
VARCHAR size 크기의 가변 길이 문자 데이터 타입
DATE 날짜 형식을 저장하기 위한 데이터 타입
DATETIME 날짜와 시간까지 저장하기 위한 데이터 타입
INT 정수형 숫자형식을 저장하기 위한 데이터 타입
DOUBLE 실수형 숫자형식을 저장하기 위한 데이터 타입
DECIMAL(총 길이, 소수점 길이) = DEC 실수형의 길이, 소수점 길이를 지정해 저장하기 위한 데이터 타입

 

ex1)

- CHAR

09create-table-datatype-string.sql - char

- VARCHAR

09create-table-datatype-string.sql - varchar

 

ex2)

- DATE, DATETIME

10create-table-datatype-date-time.sql
SELECT now();

-> SELECT now(); 쿼리를 실행한 결과이다.

 

ex3)

- INT, DOUBLE, DECIMAL

10create-table-datatype-numeric.sql


데이터베이스 정규화

관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다.

 

제 1 정규형(1NF 또는 최소형)은  데이터베이스 정규화에서 사용하는 정규형 중 하나이다. 

관계형 데이터베이스의 테이블이 1NF이면 최소한 테이블은 관계이며, 중복되는 항목이 없어야 한다.

17create-table-1nf.sql
제 1 정규형

제 2 정규형(2NF)는 데이터베이스 정규화에서 사용하는 정규형 중 하나로, 

제 1 정규형인 테이블이 제 2 정규형을 충족시키는 필요충분조건은 다음과 같다.

- K와 K에 속하지 않는 속성 A가 있을 때, A를 결정하기 위해 K의 일부가 아닌 K 전체를 참조해야 하는 경우

18create-table-2nf.sql
제 2 정규형

제 3 정규형(3NF)은 데이터베이스 정규화의 세 번째 단계로, 

제 2 정규형을 만족하고, 테이블 내의 모든 속성이 기본 키에만 의존하며 다른 후보 키에 의존하지 않는다.

19create-table-3nf.sql
제 2 정규형 -> 제 3 정규형

 

ALTER TABLE 문 

테이블을 생성하며 칼럼을 빠뜨렸거나 칼럼의 타입이나 길이를 변경하거나 칼럼을 제거해야 할 상황이 발생하여

테이블의 구조를 변경해야 할 경우에 ALTER TABLE 문을 사용한다.

 

ADD 명령문을 사용하여 새로운 칼럼을 추가하며 추가되는 칼럼에도 기본 값을 지정할 수 있다.

MODIFY 명령문을 이용하여 테이블에서 칼럼의 타입, 크기, 기본 값을 변경할 수 있다.

DROP COLUMN 명령문을 사용하여 테이블 내의 특정 칼럼과 칼럼의 데이터를 제거할 수 있다.

2개 이상의 칼럼이 존재하는 테이블에서만 삭제할 수 있으며, 한 번에 하나의 칼럼만 삭제할 수 있고, 복구할 수는 없다.

 

ex1)

15alter-table.sql
DESC mytable19Student;

 

ex2)

16alter-table.sql

 

DROP TABLE 문

DROP TABLE 명령문을 사용하여 기존 테이블과 데이터를 모두 제거한다.

삭제할 테이블의 기본 키나 고유 키를 다른 테이블에서 참조하고 있는 경우에는 삭제가 불가능하다.

 

ex1)

11drop-table.sql

 

제약 조건

데이터 무결성 제약 조건(Data Integrity Constraint Rule)이란,

테이블에 유효하지 않은 데이터가 입력되는 것을 방지하기 위해 테이블을 생성할 때 각 칼럼에 대해 정의하는 여러 가지 규칙을 말한다.

이러한 제약 조건은 새로운 데이터가 삽입되거나 기존 데이터가 수정, 삭제될 때에 적용된다.

 

제약 조건은 일반적으로 테이블이 생성될 때 생성되지만 ALTER TABLE로 제약 조건을 추가할 수 있으며 삭제도 가능하다.

제약 조건은 아래와 같다.

NOT NULL 칼럼에 NULL 값을 포함하지 못하도록 지정.
UNIQUE 테이블의 모든 로우에 대해서 유일한 값을 갖도록 함.
PRIMARY KEY 테이블의 각 행을 식별하기 위한 것, NULL과 중복된 값을 모두 허용하지 않음.
즉, NOT NULL과 UNIQUE를 결합한 형태.
FOREIGN KEY 참조되는 테이블에 칼럼 값이 항상 존재해야 함.
CHECK 저장 가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만을 허용.
DEFAULT 비어있는 칼럼에 기본값을 사용.
AUTO_INCREMENT 레코드의 값이 중복되지 않고 1씩 자동 증가시켜줌.

 

ex1)

- NOT NULL

13constraints.sql - not null

- UNIQUE

13constraints.sql - unique

- PRIMARY KEY

13constraints - not null, unique -- 14primary-key.sql - primary key

- FOREIGN KEY

20foreign-key.sql

- CHECK

13constraints.sql - check

- DEFAULT

13constraints.sql - default

- AUTO_INCREMENT

14primary-key.sql - auto_increment

 

 

 

 

 

감사합니다.

 

* m1 맥북을 사용 중입니다.*

 

 

728x90
반응형