본 포스트는 개인 스터디에 대한 정리 및 기록의 용도로써, 오개념이 존재 할 수 있습니다. 글은 상시 수정되며, 지적사항에 대해서 검토 후 수정하겠습니다.
본 포스트는 한국데이터진흥원 발간, SQL 전문가 가이드 2013Edition을 참고하였습니다.
▶ TABLE
DDL문을 사용하기에 앞서 Table에 대한 간단한 정리와, 데이터를 알맞게 정리해야하는 이유에 대해서 생각해 봐야 한다.
<1> 의 데이터를 연관지으라고 한다면, <2> 의 데이터의 형태로 묶어 정리 할 수 있을 것이다. 그렇다면 이런식으로 데이터를 정리하면 유용한 데이터가 될까? 데이터를 추가 한다면 어떻게 할 것인가? 아직은 뭔가 부족하다는 생각이 든다.
이제는 우리가 흔히 보던 2차원 표가 완성 됐다. 각 열(colum)에 이름을 만들어주어 묶었으며, 이제는 새로운 데이터를 추가할때에도 각 열에 맞는 값들을 새로운 행에 삽입하면 된다. 각 행은 선수가 가지는 특징이 됐다. 이제 누가 선수의 정보를 묻거든 '박지성 선수의 행을 읽어봐!' 라고 하면 된다.
위 표를 우리는 관계형 데이터베이스에서의 기본단위인 '테이블'이라고 부른다. 이것은 데이터를 저장하는 하나의 객체(Object)가 된다. 또 한가지 특성은 안의 모든 값이 비어 있더라도, 각열의 특성은 유지한다는 점이다. 아래 이미지로 이해하면 더 쉽다.
관계형 데이터베이스에서 가장 중요한 모델링 과정은 불필요한 정보의 중복을 막기 위한 '정규화'이다. '정규화'과정을 통해 데이터들의 중복을 막고 각 테이블들을 서로 연결 시켜준다. 이를 위해서는 기본키(Primary Key)와 외부키(Foreign Key)라는 속성을 특정 열에 부여한다. 두 키에 대한 자세한 설명은 본 게시물에서는 넘어가도록 하겠다.
테이블을 저런식으로 연결하게 되면 테이블의 갯수를 줄일 수 있는데, 위 예시에서는 두개이지만 <경기장>, <경기일정>, <응원단>, <클럽직원> 등등 여러테이블을 만들게 되면 저런식으로 참조함으로써 테이블의 갯수가 줄어들고 효율성이 높아진다. 기본키, 외래키는 뒤에서 살펴볼 DDL에 CONSTRAINT(제약조건) 명령어로 의미를 부여해준다.
▶ DDL을 이용하여 테이블 만들기
테이블이 무엇인지 어떻게 쓰이는지 대략적으로 알았다면, DBMS을 통하여 테이블을 만드는 방법을 공부해야한다. 테이블을 만드는 방법 그것이 바로 DDL(Data Definition Language)이다.
○ MySQL의 데이터 타입
테이블을 만들때 가장 먼저 해야하는 일은 각 열(colum)에 어떤 데이터 타입이 올 수 있는지에 대한 정보를 DBMS에 알려줘야 한다. 각 벤더마다 조금씩 차이가 있기 때문에 MySQL을 기준으로 작성할 것이며, 각 데이터타입에 대한 상세한 종류와 설명을 담기보다는 어떻게 사용하는지에 대해서 초점을 맞추겠다.
1. 문자형 데이터타입
- CHAR(n), VARCHAR(n), TINYTEXT(n), TEXT(n), MEDIUMTEXT(n), LONGTEXT(n)
2. 숫자형 데이터 타입
- TINYINT(n), SMALLINT(n), INT(n), BIGINT(n), FLOAT(길이,소수), DECIMAL(길이,소수), DOUBLE(길이,소수)
3. 날짜형 데이터 타입
- DATE, TIME, DATETIME, TIMESTAMP, YEAR
4. 이진 데이터 타입
- BINARY(n) & BYTE(n), VARBINARY(n), TINYBLOB(n), BLOB(n), MEDIUMBLOB(n), LONGBLOB(n)
칼럼명1 DATETYPE [DEFAULT형식]
NAME VARCHAR(20) NOTNULL
TEAM_ID CHAR(10) NOTNULL
BACK_NO TINYINT
BIRTH_DATE DATE
알아둬야할 것은 CHAR(n)와 VARCHAR(n) 차이점이다. 두개다 문자열을 저장하지만 차이점은 CHAR(10)은 'name ' , VARCHAR(10)은 'name'으로 저장된다는 점이다. 쉽게 말해 10을 어떻게든 다 채우려는 것과 그렇지 않은 것이다. 왜 이런게 나왔을까라는 생각을 하게될텐데 주민등록번호나, 사번과 같이 고정된 길이를 가진다면 CHAR을 그렇지 않다면 VARCHAR을 사용하는 것이 바람직하다.
○ 테이블 만들기 CREATE TABLE
각열에 데이터타입을 부여하는 법을 알았다면, DDL을 이용하여 테이블을 만들어보자. SQL은 영어문법과 비슷하여 코드를 모르는 사람이 봐도 어떤 쓰임새인지 예측이 가능할거 같다.
CREATE TABLE STADIUM (
STADIUM_ID CHAR(3) NOT NULL,
STADIUM_NAME VARCHAR(40) NOT NULL,
SEAT_COUNT INT,
ADDRESS VARCHAR(60),
DDD VARCHAR(3),
TEL VARCHAR(10),
CONSTRAINT PK_STADIUM PRIMARY KEY (STADIUM_ID)
);
테이블이 알맞게 생성됐는지 보기 위해 아래 뒤에서 공부해볼 명령어(DML)를 입력하면, 문제 없이 생성 된 것을 볼 수 있다.
▽ CREATE TABLE 을 사용하면서 주의해야할 점 몇가지가 있다.
- 데이터 유형은 반드시 문자로 시작해야한다.
- 칼럼 뒤 데이터 유형은 반드시 지정해야함.
- 테이블 명이 중복되지 않아야 한다.
- 테이블 별로 ( ) 묶어 지정하며 지정후에는 세미콜론( ; ) 붙여야한다. 또한 각 칼럼들은 반점( , ) 으로 구분된다.
CREATE TABLE A (
STADIUM_ID CHAR(3) NOT NULL,
STADIUM_NAME VARCHAR(40) NOT NULL,
SEAT_COUNT INT,
);
CREATE TABLE B (
ADDRESS VARCHAR(60),
DDD VARCHAR(3),
);
CREATE TABLE C (
TEL VARCHAR(10),
CONSTRAINT PK_STADIUM PRIMARY KEY (STADIUM_ID)
);
위에 조건을 만족시키며 3개의 테이블을 만들었다
이번 포스트에서는 테이블에 대한 간단한 개념과 DDL문장을 사용해 테이블을 만드는 방법을 알아봤다. 다음포스트에서 DROP TABLE, ALTER TABLE, RENAME TABLE, TRUNCATE TABLE에 대해서 다뤄보고, 제약조건을 명시하는법에 대해서도 공부하고자 한다.
'• 데이터베이스(DB) > __SQL__' 카테고리의 다른 글
#5 [DML] MySQL에서 WHERE 조건식 사용해보기 IN,LIKE,IS NULL,BETWEEN (0) | 2021.05.25 |
---|---|
#4 [DML] MySQL에서 SELECT 사용해보기 (0) | 2021.05.25 |
#3[DML] MySQL 에서 INSERT, DELETE, UPDATE 문을 사용해보기, sql_Safe_Updates모드 (0) | 2021.05.25 |
#2[DDL]_ MySQL 을 이용하여 제약조건 사용 및 DROP TABLE, ALTER TABLE 정리 (0) | 2021.05.20 |
#0_SQL 기본 및 명령어 종류 (0) | 2021.05.16 |