데이터 형식
- Table을 생성하기 위해서는 Column마다 지정해야되는 형식을 선언해야 한다!
- 기본적으로 DDL(Data Definition Language)을 사용한다~!
Data Type | 설명 |
VARCHAR | 가변길이의 문자열 데이터타입 (최대 65535 Byte) |
CHAR | 고정길이의 문자열 데이터타입, 지정된 길이보다 짧은 데이터가 오면 나머지는 공백으로 채운다 |
TINYTEXT | 문자열 데이터 타입 (최대 255 Byte) |
TEXT | 문자열 데이터 타입 (최대 65535 Byte) |
DATE | 날짜(Year-Month-Date) 형식의 데이터 타입 |
DATETIME | 날짜 + 시간(시:분:초) 형식의 데이터 타입 |
TINYINT | 정수형 데이터 타입(1Byte) (-127 ~ 128) 또는 (0~255)의 숫자 표현가능하다 |
INT | 일반적인 정수형 데이터 타입 (프로그래밍 INT와 동일) |
FLOAT | 부동소수점 데이터 타입 (프로그래밍 FLOAT와 동일) |
DOUBLE | 부동소수점 데이터 타입 (프로그래밍 DOUBLE와 동일) |
테이블 생성 조건
- 데이터 형식을 알았으니, 우리는 테이블을 만들 수 있다!
- But, 지켜야 되는 조건들이 조~금 있다
1. Table 이름은 객체를 의미하는 이름을 부여하자
2. Column에 대해서는 다른 Table과 연관성을 위해서 일관성 있는 이름을 사용하자
3. Table명과 Column명은 반드시 문자열로!
4. 동일한 사용자가 가지고 있는 다른 객체와 겹치면 안된다!
5. Column명은 동일 Table내에서는 중복하지 말자!
- 그럼 테이블을 만들어볼까?
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 멤버 테이블
create table if not exists member(
m_id int primary key,
membername varchar(10),
address varchar(20),
deptid int,
foreign key(deptid) references dept(deptid)
);
-- 테이블 생성시 외래키 지정 방법 : create 문에 아래와 같이 컬럼명 나열 사이에 작성한다.
-- foreign key(내컬럼명) references 참조테이블명(참조할컬럼명)
-- foreign key와 내부 컬럼의 타입(크기)를 맞춰서 선언한다.
-- foreign key 외래키로 지정하는 컬럼은 primary key로 선언되어 있어야한다!
|
cs |
- Primary Key는 반드시 지정하는 것이 좋다
- Relation DB를 구축하기 위해서는 테이블 Join을 자주 쓰게 되는데, 이러한 작업을 위해 Foreign Key를 지정한다!
- 만들었으니까 이제 가지고 놀아 볼까?
1
2
3
4
|
-- alter table 테이블명 add constraint 수정작업명 primary key ( 지정할 칼럼명 );
alter table dept add constraint pr1 primary key (deptid);
|
cs |
- ALTER : Table의 Column 을 추가(ADD), 변경(MODIFY), 삭제(DROP)하는 명령어
데이터 CRUD
- 기본적으로 DML(Data Manipulation Language)을 사용한다~!
명 령 어 | 설 명 |
INSERT | Table의 새로운 행을 삽입 |
UPDATE | Table의 있는 행을 변경 |
MERGE | Table에 이미 데이터가 존재하면 UPATE, 새로운 데이터면 INSERT |
DELETE | 테이블로부터 Row 데이터를 삭제 |
- 명령어 사용 예시는 다음과 같다
1
2
3
4
5
6
7
8
9
10
|
-- INSERT
insert into user values('abc', '124', '브룩', '하하호호', '2333', '민들레')
-- UPDATE
update user set password='125' where id='abc';
-- MERGE = MySql에서는 merge가 없으므로 다음과 같이 쓴다
insert into user values('abc', '124', '브룩', '하하호호', '2333', '민들레')
on duplicate key
update id='abc', password='124', name='브룩', address='하하호', phone='2222', allergy='민들레';
-- DELETE
delete from user where id='abc';
|
cs |
View
- View는 Table이나 다른 View를 기초로 한 논리적이고 가상(Virtual)의 Table이다.
- View는 선택적으로 Table에 있는 데이터를 가져오고, 변경할 수 있다!
- CREATE VIEW [ 이름 ] as ( SubQuery )
1
2
|
-- View를 생성하는 예시
CREATE VIEW myview as select id, password from user;
|
cs |
Index
- Pointer를 이용하여 좀 더 빠르게 데이터를 검색하는데 사용하는 Object 이다.
- Index는 B-Tree 방식을 사용하고 있으며, 이는 Full Scan방식보다 시간이 단축되게 된다!
- But, 저장 공간을 따로 차지하기 때문에, 원문 Table이 자주 바뀌면 같이 바뀌어야되므로 성능 저하가 일어날 수 있다!
* Index를 사용해야 될 때
1. WHERE이나 JOIN조건에서 Column을 자주 이용할 때
2. 칼럼이 넓은 범위값을 가질 때
3. 많은 NULL값을 가지는 칼럼일 때
4. Table의 데이터가 많고, 조회되는 행의 수가 전체의 2%~4% 일 때
* Index를 사용하지 않을 때
1. Table이 작을 때
2. 원문 Table이 자주 변경될 때
3. 위 조건들과 반대될 때
'Developer > Database' 카테고리의 다른 글
Database - Mysql 기반으로 Index 에 대해 Deep Dive 해보자 (0) | 2022.06.26 |
---|---|
Mysql Query Plan - Intellij 를 활용하여 Plan query 를 해보자 (0) | 2021.10.10 |
MySql - Master Slave Replication 구조 만들어보기 (0) | 2021.07.17 |
DataBase - 정규화 (0) | 2019.04.21 |
DataBase - 개념 + 기본활용 (0) | 2019.04.20 |