[MySQL] 테이블 생성

chrkb1569·2022년 7월 8일

MySQL

목록 보기
4/6
post-thumbnail

오늘은 MySQL에서 테이블 생성에 대하여 배웠습니다.

일단은 테이블을 생성해주기 위하여 MySQLworkbench에서 test라는 스키마를 만들어 준 뒤, 쿼리문을 입력하기 위한 명령어 창을 띄워줍니다.

일단 제일 먼저 테이블을 만들어줄텐데, 테이블을 생성하는 명령어는 다음과 같습니다.

CREATE TABLE (테이블 이름) (
(컬럼의 이름1) (컬럼의 자료형1) (컬럼에 부여할 특징1),
(컬럼의 이름2) (컬럼의 자료형2) (컬럼에 부여할 특징2),
(컬럼의 이름3) (컬럼의 자료형3) (컬럼에 부여할 특징3),
...
)

생성할 테이블을 어떠한 컬럼들로 구성할지 지정하여 테이블을 생성할 수 있으며, 컬럼에 따라서 특징들을 부여할 수 있습니다.

일단 특징들은 나중에 살펴보고, 제일 먼저 기본적인 테이블을 만들어보겠습니다.

저의 경우에는 test라는 테이블을 만들었는데,

정수형 값을 저장히기 위한 test_number 컬럼, 최대 5개의 문자를 저장할 수 있는 test_name, 텍스트를 저장하기 위한 test_text 컬럼을 추가해주었습니다.

다음의 명령어를 입력하고, 왼쪽에서 3번째에 위치한 번개 아이콘을 클릭한다면, 명령어가 실행됩니다.

그럼 다음과 같이 test라는 테이블이 test 스키마 하위에 생성되는 것을 확인할 수 있으며,

테이블 생성시 설정해주었던 컬럼들이 생성되어 있는 것을 확인할 수 있습니다.

테이블을 생성하는 것에 관해서는 간략하게 알아보았으니, 컬럼에 부여할 특징과 자료형에 대해서 알아보겠습니다.

자료형

CREATE TABLE test(
	test_number int,
    test_name varchar(5),
    test_text text
)

아까 제가 테이블을 만들때 활용하였던 명령어입니다.

제가 알고있는 프로그래밍 언어가 많지 않아서 아닐 수도 있지만, 프로그래밍 언어와는 조금 다르게, MySQL에서는 컬럼명을 왼쪽에 사용하고, 컬럼의 자료형을 오른쪽에 사용하는 것 같습니다.
자료형은 다른 프로그래밍 언어의 자료형과 비슷한 것 같아 어렵지는 않았습니다.

정수형 자료형

정수형 자료형의 경우에는 나타낼 수 있는 정수의 범위에 따라서, TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT가 존재합니다.

UNSIGNED를 자료형 앞에 추가할 경우, 이는 양수인 정수만을 표현하게됩니다.

실수형 자료형

실수형 자료형은 FLOAT, DOUBLE이 존재합니다.

이것도 다른 언어와 마찬가지로, FLOAT의 경우 DOUBLE보다 표현 범위가 적다는 특징을 가지고 있으며, 실수형 자료형은 일정 범위까지만 정확한 값을 제공하며, 그 이상으로는 정확한 값을 표현하기 힘들다는 특징을 가지고 있습니다.

문자열 자료형

이건 MySQL에서 처음 접하는 자료형이였습니다.

보통 문자열 자료형의 경우에는 CHAR을 흔하게 접해왔었는데, VARCHAR 이라는 자료형 또한 문자열을 저장하기 위하여 활용된다고 합니다.

CHAR과 VARCHAR의 경우에는 차이점이 존재하는데,

이는 바로 문자열을 처리하는 방식입니다.

CHAR과 VARCHAR의 차이

CHAR과 VARCHAR 모두 10개의 문자를 저장할 수 있도록 선언되었다고 가정해봅시다.

그리고 이 2개의 자료형에 'abcde'라는 5글자의 문자열을 저장하였을때의 크기를 살펴보면,

CHAR의 경우에는 10바이트가 되는 것을 확인할 수 있으며, VARCHAR의 경우에는 6바이트가 되는 것을 확인할 수 있습니다.

이는 문자열을 저장하는 과정에서 CHAR의 경우에는 10개의 문자를 저장할 수 있지만, 저장하게되는 문자열이 5바이트이므로, 남은 자리를 공백으로 채우게됩니다.

따라서, CHAR의 경우에는 어떠한 문자열을 저장하더라도 처음 선언된 크기만큼의 용량을 차지한다고 볼 수 있습니다.

이와는 반대로 VARCHAR의 경우에는 최대 10개의 문자를 저장할 수 있더라도, 10개 이하의 문자로 구성된 문자열이 저장될 경우, 그냥 그대로 저장합니다.

하지만, 저장하게 된 문자열 크기를 저장할 별도의 공간을 필요로 하는데, 이 크기가 바로 1바이트입니다.

따라서, 'abcde'라는 5글자로 구성된 문자열을 저장한다고 할 때, VARCHAR의 경우에는 6바이트가 되는 것이며, CHAR의 경우에는 10바이트가 되는 것입니다.

텍스트 자료형

텍스트 자료형은 긴 문자를 저장하기 위한 자료형으로, INT와 비슷하게 크기에 따라서 TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT로 나뉩니다.

///////////////////////////////////////////////////////

그 밖에도 여러 자료형이 존재하지만, 위에서 살펴보았던 4가지를 가장 많이 접하게 될 것 같습니다.

이번에는 컬럼에 부여하게되는 특징에 대해서 알아보겠습니다.

컬럼 특징

컬럼에 부여하는 특징은 6개가 많이 사용됩니다.

PRIMARY KEY - PK
NOT NULL - NN
UNIQUE - UQ
UNSIGNED - UN
AUTO_INCREMENT - AI
DEFAULT

이러한 특징들은 worbench에서 줄여서 표현되는데,

다음과 같이 PRIMARY KEY는 PK, NOT NULL은 NN, UNIQUE는 UQ처럼, 가장 앞에 존재하는 문자를 따와서 축약하였습니다.

PRIMARY KEY

위에서 살펴본 6개의 특징 중, 가장 중요한 특징이라고 할 수 있는 PRIMARY KEY입니다.

PRIMARY KEY의 경우에는 테이블에 여러 개의 데이터가 존재하게 되는데, 이 데이터들을 분류하기 위하여 사용되는 식별자라고 생각하시면 편할 것 같습니다.

test_number를 pk로 활용한다고 가정하고, 위에서 생성하였던 test 테이블을 예로 설명해보겠습니다.

test_name = "AAA", test_text="I'm AAA"
라는 데이터가 test 테이블에 저장되고, 동일하게

test_name = "AAA", test_text="I'm AAA"
라는 데이터가 test 테이블에 저장되었다고 가정해봅시다.

이와 같이 test_name과 test_text가 완전히 동일한 상황에서, 사용자는 이 두 데이터를 식별하기란 매우 어렵습니다.

이와 같은 상황에서 활용되는 것이 바로 Primary key입니다.

아까 test_number를 pk로 활용한다고 가정한 상태에서 다음의 예시를 보여드렸는데,

이는 test_number를 통해서 각각의 데이터를 분류하겠다는 이야기 입니다.

test_number를 pk로 활용한다면, 다음과 같이 각각의 데이터에 데이터를 식별할 수 있는 식별자가 생기게됩니다.

test_number = 1, test_name = "AAA", test_text="I'm AAA"

test_number = 2, test_name = "AAA", test_text="I'm AAA"

이렇게 된다면, 동일한 데이터가 저장되어 있더라도 PK를 통하여 둘을 구별할 수 있게 됩니다.

이러한 PK는 보통 정수형 자료형이 많이 사용되며, 데이터를 식별하는데에 어려움이 없게 하기 위하여 Null값이나 중복값이 허용되지 않습니다.

또한, PK는 데이터가 입력될 때마다 자동으로 PK의 값이 증가하여 데이터에 저장되는 Auto Increment 특성과 종종 같이 사용된다고 합니다.

Not Null

문맥에서 대충 알 수 있지만, 이 특성을 지정해준 값은 Null값을 지정해줄 수 없습니다.

Unique

이 특성을 지정해준 값은 중복으로 활용할 수 없습니다.

Unsigned

이 특성을 지정해준 값은 음수가 입력될 수 없습니다.

Default

이 특성은 컬럼의 기본값을 지정해줄 때 활용됩니다.

테이블 생성

그럼 지금까지 배웠던 내용을 활용하여 이전의 테이블과는 다른 테이블을 새롭게 생성해보겠습니다.

테이블의 이름은 test_final로 지정할 것이며, 컬럼은 pk로 활용할 final_number를 선언할텐데 Auto Increments 특성과 pk로 활용하기 위하여 Primary Key를 정수형으로 지정해주겠습니다.

추가적으로 이름을 저장해주기위한 final_name을 선언해줄 것입니다. 이름이 없을 수는 없기 때문에 Not Null 특성을 부여해 줄 것이며, 동명이인을 불허하기 위하여 Unique 특성을 부여해주겠습니다. 이름은 길어봐야 5글자가 되지 않을테니, 최대 5글자를 저장할 수 있는 문자열 자료형을 활용해주겠습니다.

마지막으로 나이를 저장하기 위한 final_age를 선언해줄 것입니다. 나이가 음수일수는 없으니 Unsigned로 지정해 줄 것이며, 성인의 데이터만 저장한다고 가정하고 기본값은 20으로 해주겠습니다.

다음과 같은 조건들을 모두 충족시키는 테이블을 생성한다면 다음과 같은 명령어를 통하여 테이블을 생성할 수 있을 것입니다.

CREATE TABLE test_final(
final_number INT PRIMARY KEY AUTO_INCREMENT,
final_name VARCHAR(5) UNIQUE NOT NULL,
final_age TINYINT UNSIGNED DEFAULT 20
)

0개의 댓글