-
MariaDB 열과 행DBMS/MariaDB 2024. 2. 23. 22:25728x90반응형
열(Column)
- 테이블에 존재하는 레코드가 가지는 데이터의 타입을 정하기 위해 사용
- 명명법 : 스네이크 케이스, 단/복수형열의 구조는 아래와 같다
`열 이름` [데이터 타입] [null|not null]? [default x]? [auto_increment]?
null : 해당 열의 값이 비어있을 수 있다는 의미. 생략시 기본값
not null : 해당 열의 값이 비어있을 수 없다
default : 레코드 삽입 시 열의 값을 명시하지 않을 경우 사용할 기본값을 x로 설정. 생략시 x는 null
auto_increment :데이터 타입
- 모든 정수형과 decimal을 제외한 실수형 타입 뒤에 unsigned 키워드를 붙여 음수부 크기만큼 양수를 추가적으로 사용할 수 있다.
가령, tinyint unsigned 타입의 범위는 0부터 255까지
정수형
- tinyint(1 byte) : -128~ 127까지 정수
- smallint(2 byte) : -32,768~ 32767까지 정수
- mediumint(3 byte) : -8,388,608~ 8,388,607까지 정수
- int(4 byte) : -2,147,483,648~ 2,147,483,647까지 정수
- bigint(8 byte) : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807까지 정수
실수형
- float(4 byte) : -3.402823466e+38부터 3.402823466e+38 까지 부동 소수
값을 저장하는 방식 때문에 오차가 발생할 수 있어 민감한 데이터를 저장하는데 사용하지 않음
- double(8 byte) : -1.797693134862315157e+308~ 1.79769313486231573e + 308 까지 부동 소수
값을 저장하는 방식 때문에 오차가 발생할 수 있어 민감한 데이터를 저장하는데 사용하지 않음
- decimal(t, p)(t byte) : 전체 길이가 t, 소수부 길이가 p인 고정 소수. 차지하는 용량이 큰 대신, 값이 유실되지 않음
문자형
- varchar(n):(최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 65,535이다.
값을 직접 저장함. 값을 빨리, 자주 보여줘야 하는 것들은 varchar 사용
- tinytext(n): (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 255이다.
- text(n) : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 65,535이다.
값을 다른 곳에 따로 저장하고 그 파일의 경로를 저장함. 나머지 text들도 마찬가지
- mediumtext(n) : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 16,777,215이다.
- longtext(n) : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 4,294,967,295이다.
논리형
- boolean(1 byte) : 참(true)과 거짓(false)을 가질 수 있다
날짜와 시간
- date : 날짜(년, 월, 일)를 가질 수 있다.
- time(n) : 시간(시, 분, 초)을 가질 수 있다. n은 밀리초의 길이를 의미하며, 생략시 0이고, 최대값은 6이다.
- datetime(n) : 날짜 및 시간을 가질 수 있다. n은 밀리초의 길이를 의미하며, 생략시 0이고, 최대값은 6이다.
기타
- tinyblob(n) : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 255이다.
- blob(n) : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 65,535이다.
- mediumblob(n) : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 16,777,215이다.
- longblob(n) : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 4,294,967,295이다.레코드(Record)
- 테이블에 소속된 실제 데이터(행, row)를 의미
삽입하기
- 테이블에 레코드 삽입을 위해 아래 쿼리 실행
INSERT INTO `스키마`.`테이블` ([열 이름, ...]) VALUES ([값, ...])
위 쿼리에서 명시한 열의 순서와 값의 순서는 반드시 일치해야 한다.
명시한 열의 순서는 테이블이 가지는 열의 순서와 일치할 필요는 없다.
열 이름을 명시할 필요는 없는데, 열 이름을 명시하지 않을 경우 테이블이 가지고 있는 모든 열을 순차적으로 명시한 것과 동일하다
명시되지 않은 열의 값은 기본값(DEFAULT)을 활용한다.
쿼리 하나로 여러 레코드를 한 번에 삽입하기 위해 아래 쿼리 실행INSERT INTO `스키마`.`테이블`([열, ...]) VALUES([값, ...]), ([값, ...]), ([값, ...]), ([값, ...]), ...;
VALUES 뒤에 오는 쉼표(,)로 구분된 소괄호((,))한 묶음이 레코드 하나를 의미한다
여러개의 레코드를 삽입할 때 여러개의 쿼리를 실행하는 것보다 하나의 쿼리만 실행하는 것이 무조건 빠름, 가능한 한 이런 방식을 사용조회하기
테이블이 가지고 있는 레코드를 조회하기 위해 아래 쿼리 실행
SELECT [*|열, ...|리터럴, ...] FROM `스키마`.`테이블` [JOIN...]? [WHERE [조건]]? [GROUP BY [기준 열, ...]]? [ORDER BY [기준 열, ...] [ASC|DESC]?]? [LIMIT [개수] [OFFSET [개수]]?]?;
* : 테이블이 가지고 있는 모든 열
WHERE : 조건에 맞는 레코드만 선택
GROUP BY : 통계 함수를 사용할 때 레코드를 묶어낼 기준 열을 명시한다. 명시하지 않을 경우, 모든 레코드를 통계 기준으로 한다.
ORDER BY : 선택 결과를 정렬할 기준열 지정
ASC : 오름차순 정렬, 기본값
DESC : 내림차순 정렬
LIMIT OFFSET
LIMIT : 본래 SELECT에 의해 선택될 결과에서 명시한 개수의 상위 레코드만 선택
OFFSET : 본래 SELECT에 의해 선택될 결과에서 명시한 개수의 상위 레코드만 선택. LIMIT보다 선행. 단독 생략 불가SELECT `code`, `name` FROM `world`.`countries` ORDER BY `code` LIMIT 2 OFFSET 1; # 2개를 가져오는데 1단계 생략하고 출력, 12를 출력할 때 OFFSET 1; 을 하면 23이 출력된다 <!-- 생략만 하고 싶으면 LIMIT 0 OFFSET 1을 하면 됨 -->
조인
- 현재 조회하고 있는 테이블이 가진 데이터를 활용하여 다른 테이블에 있는 데이터를 함께 조회할 때 사용
- 구조는 아래와 같다[LEFT|RIGHT|INNER] JOIN `스키마`.`테이블` AS `별명` ON [조건]
조인 대상이 되는 테이블이 가지는 레코드 중 조건에 부합하는 레코드를 모두 가져온다.
LEFT : FROM 대상이 되는 테이블이 가지는 데이터를 기준으로 선택
RIGHT : JOIN 대상이 되는 테이블이 가지는 데이터를 기준으로 선택
INNER : FROM과 JOIN 대상이 되는 테이블이 가지는 데이터의 교집합을 기준으로 선택
한 SELECT문에 여러 개의 JOIN이 사용될 수 있고, 따로 구분자는 없어서 그냥 한 줄 더 적으면 된다.단, 별명(AS)이 같은 경우는 안됨
예시SELECT CONCAT_WS('-', `student_grade`,`student_class`,`student_number`) AS 학년반번호, `stdents`.name AS 이름, `subjects`.`text` AS 과목, `scores`.`value` AS 점수 FROM `school`.`scores` LEFT JOIN `school`.`subjects` ON scores.subject_code = subjects.code LEFT JOIN `school`.`stdents` ON scores.student_grade = stdents.grade && scores.student_class = stdents.class && scores.student_number = stdents.number;
수정하기
레코드가 가지는 값을 수정하기 위해 아래 쿼리를 실행
UPDATE `스키마`.`테이블` SET [[`열 이름` = [값]], ...];
위 쿼리는 조건 없이 모든 레코드를 수정하는 쿼리이므로, 일반적으로 사용하지 않는다.
주로 아래와 같이 WHERE 키워드를 사용하여 수정하고자 하는 레코드를 제한한다.UPDATE `스키마`.`테이블` SET [[`열 이름` = [값]], ...] WHERE [조건];
삭제하기
- 레코드를 삭제하기 위해 아래 쿼리 실행
DELETE FROM `스키마`.`테이블`;
위 쿼리는 조건 없이 모든 레코드를 삭제하는 쿼리이므로, 일반적으로 사용하지 않는다.
주로 아래와 같이 WHERE 키워드를 사용하여 삭제하고자 하는 레코드를 제한한다.DELETE FROM `스키마`.`테이블` WHERE [조건]; DELETE FROM `world`.`countries` WHERE `code` = 'JP';
728x90반응형'DBMS > MariaDB' 카테고리의 다른 글
MariaDB 함수 (0) 2024.02.25 MariaDB 연산자 (0) 2024.02.23 MariaDB 스키마와 테이블 (0) 2024.02.23 MariaDB 기본 개념, 사용자와 권한 (0) 2024.02.23