728x90
반응형
타입(data type) - 숫자
- 테이블의 타입확인
DESCRIBE 테이블명;
- 숫자 타입
- 정수
- TINYINT
- -128~ 127범위(2의8승=256), 1바이트 //1바이트=8비트 바이트가 커질수록 내가 표현할 수 있는 숫자가 커짐
- JAVA의 byte와 매핑
- INT
- 4바이트(2의8승*4)
- JAVA의 int타입과 매핑
- BIGINT
- 8바이트
- JAVA와 long타입과 매핑
- UNSIGNED 타입을 사용하여 양수만 표현가능
- 표현값 2배로 증가
- TINYINT UNSIGNED 이렇게 사용한다면 255까지 사용 가능 ex)나이
- TINYINT
- 실수
- 부동 소수점 타입(소숫점을 이진법으로 표현)
- FLOAT(M,D), DOUBLE(M,D)
- 오차가 발생할 여지가 있음
- 고정 소수점 타입 - 권유(속도는 느리지만 오차없음)
- DECIMAL(M,D)
- JAVA의 Bigdecimal
- M은 총자릿수 (정수부 + 소수부)를 의미하고, 65자리까지 표현가능
- D는 소수부 의미
- 정확한 숫자 표현을 위해 사용
→ CREATE TABLE post(price DECIMAL(10,3));
- DECIMAL(M,D)
- 부동 소수점 타입(소숫점을 이진법으로 표현)
실습
- author 테이블에 age 데이터 tinyint unsigned로 추가
- 255이하로 insert, 255초과로 insert테스트
ALTER TABLE author ADD COLUMN age tinyint unsigned;
insert into author(id, name, age) values (6, '사', 23);
insert into author(id, name, age) values (7, '사', 277);
→ 277은 255를 초과하므로 에러발생 (out of range : 범위 벗어남) - insert 불가
- post에 price라는 원고료 컬럼을 추가, 원고료 컬럼은 총자릿수 10자리 및 소수점단위는 3자리까지 가능
- 컬럼 추가 후 비어있는 컬럼에 숫자 update test(소숫점 세자리 이하 test, 소숫점 세자리 초과 테스트)
ALTER TABLE post add COLUMN price decimal(10,3);
update post set price=11.111 where id=1;
update post set price=11.112222 where id=2;
→ UPDATE는 되나 자릿수가 잘려서 입력됨
타입(data type) - 문자
- CHAR와 VARCHAR
- CHAR(M)
- M은 문자열의 최대 길이를 의미
- 고정 길이의 문자열(0~255까지 설정가능)
- 데이터가 255바이트보다 작아도 255바이트 차지
- 정해진 자릿수 문자에 제한을 두기 위해서는 사용
- VARCHAR(M)
- java의 String 사용 시 varchar
- 0부터 65,535까지 설정가능
- 가변 길이의 문자열(M을 통해 길이지정)
- B-tree 인덱싱 - 조회 빠름
- 길이를 지정하더라도 실제 입력된 문자열의 길이만큼만 저장하고 사용
- 일반적으로 가장 많이 사용
- CHAR(M)
- TEXT
- 65,535바이트 저장 가능한 가변길이 문자열을 위한 타입(MAX지정 X, ex: name TEXT 로만 설정)
- VARCHAR보다 더 큰 범위의 표현이 가능 ex)LONGTEXT는 4GB - LONGTEXT는 사용 가능성 있음
- disk에 저장해서 조회속도가 VARCHAR(메모리저장)에 비해 느림
- index 사용의 어려움(B-tree인덱싱 불가(VARCHAR는 가능), Full-Text 인덱스만 가능) - 조회속도 느림
→ 이러한 단점때문에 잘 사용 안함 주로 VARCHAR 사용 / 엄청긴문자열을 사용해야할 때 LONGTEXT 사용
- BLOB(longblob)
- 다양한 크기의 바이너리 데이터(이진데이터)를 저장할 수 있는 타입
- 일반적으로 PNG와 같은 이미지 파일을 저장할 때 지정하는 타입
create table table_blob(id int, myimg longblob); insert into table_blob (id, myimg) values (1, load_file('C:\\test_picture.jpg')); select * from table_blob; -- blob으로 조회됨 select hex(myimg) from table_blob where id = 1; -- 16진수로 조회됨
→ 위 16진수를 통해 원본 이미지 확인 가능
- ENUM
- 미리 들어갈 수 있는 특정 데이터의 값을 지정
- 컬럼명 ENUM(’데이터값1’, ‘데이터값2’, …)
- NOT NULL DEFAULT ‘user’ 등의 옵션도 추가 가능
실습
- role 타입을 enum타입으로 변경하고, ‘user’, ‘admin’으로 enum타입 지정.
- not null로 설정하되, 입력이 없을 시에는 ‘user’로 세팅되도록 default 설정
- test는 admin으로 데이터 세팅후 insert/ super-user 데이터로 insert / role 데이터 없이 insert
update author set role='user'; -- alter하기 위해 기존 role 데이터 변경
ALTER TABLE author MODIFY COLUMN role enum('user', 'admin') NOT NULL default 'user';
describe author;
insert into author (id, name, role) values (1, 'qoth', 'admin');
insert into author (id, name, role) values (2, 'qoth', 'super-user');
insert into author (id, name) values (3, 'qoth');
select * from author;
→ describe로 변경된 role의 type과 default 확인 가능
→ id 2번은 enum 외의 값이기 때문에 에러 발생
→ 3번은 role을 입력안했지만 default를 설정해두었기 때문에 user로 채워짐
타입(data type) - 날짜와 시간
- DATE
- 날짜를 저장할 수 있는 타입
- YYYY-MM-DD 형식
- DATETIME(m)
- 날짜와 함께 시간까지 저장, m 지정 시 소수점 microseconds
- YYYY-MM-DD HH:MM:SS 형식
- 가장 많이 사용
- JAVA의 localdatetime과 sync
- DATETIME DEFAULT CURRENT_TIMESTAMP - DB설계시 기본세팅으로 들어감(필수)
- 현재 시간을 default로 삽입하는 형식 - 자바, 스프링, 도커, 리눅스, 데이터베이스 등 기본은 utc 기준
실습
post 테이블에 DATETIME으로 created_time 컬럼 추가 및 default로 현재시간 들어가도록 설정
- datetime(6) default current_timestamp(6)
- 컬럼 추가 후 insert 테스트
ALTER TABLE post add COLUMN created_time datetime(6) default current_timestamp(6);
insert into post (id) values (7);
→ 기존에 있던 데이터들의 created_time도 채워짐
Uploaded by N2T
728x90
반응형
'Database' 카테고리의 다른 글
[MariaDB] 제약조건 (0) | 2023.11.22 |
---|---|
[MariaDB] 연산자 (1) | 2023.11.22 |
[MariaDB] DML (1) | 2023.11.22 |
[MariaDB] DDL (1) | 2023.11.22 |
[MariaDB] 설치, MariaDB란 (1) | 2023.11.22 |