RDBMS(DB에 관계가 추가된 것)인 MySQL
을 이용해서 데이터 베이스에 대해 학습했다.
DB에 대해 파일 시스템(ex. Excel)의 단점과 비교해서 왜 DB를 사용하는 지 설명해 주셨다.
"파일 시스템"은 데이터 중복이 생길 수 있고, 데이터 공유에 제한이 있고, 데이터 중복이나 불일치가 발생할 수 있고, 구현과 유지보수에 시간이 오래걸린다는 단점이 있다. 이를 보완하기 위해 "데이터 베이스"가 등장했다.
DB 용어
타입 | 바이트 수 | 범위 | 설명 |
---|---|---|---|
TINYINT | 1 | -128 ~ 127 | 정수 |
SAMLLINT | 2 | -32768 ~ 32767 | 정수 |
INT | 4 | 약 -21억 ~ 21억 | 정수 |
BIGINT | 8 | 약 -900경 ~ 900경 | 정수 |
FLOAT | 4 | -3.40E+38 ~ -1.17E-38 | 소수점아래 7자리까지 표현 |
타입 | 바이트 수 | 설명 |
---|---|---|
CHAR(N) | 1 ~ 255 | 고정길이 문자형, n을 1부터 255까지 지정 |
VARCHAR(N) | 1 ~ 65535 | 가변길이 문자형, n을 1부터 65535까지 지정 |
TEXT | 1 ~ 65535 | 65535 크기의 TEXT 데이터 값 |
MEDIUMTEXT | 1 ~ 16777215 | 16777215 크기의 TEXT 데이터 값 |
타입 | 바이트 수 | 설명 |
---|---|---|
DATE | 3 | 날짜 저장(YYYY-MM-DD) |
TIME | 3 | 시간 저장(HH:MM:SS) |
DATETIME | 8 | 날짜, 시간 저장(YYYY-MM-DD HH:MM:SS) |
기타 명령어
SHOW DATABASES; -- DB 조회 USE [DB명]; -- 사용 할 DB 선언 SHOW TABLES; -- TABLE 조회 DESC [TABLE명]; -- TABLE 상세 조회 (속성까지)
-- 한글 인코딩 (utf8)
CREATE DATABASE mydatabase CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
-- 한글 인코딩(utf8mb4 : *이모지*까지 저장 가능)
CREATE DATABASE mydatabase CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
/*
CREATE TABLE products(
속성1 자료형 제약조건,
속성2 자료형 제약조건
);
-- 제약조건
- NOT NULL : NULL 허용 X
- AUTO_INCREMENT : 자동 숫자 증가
- PRIMARY KEY : 기본키 설정 (중복, NULL값 허용 안함)
- DEFAULT : 기본 값 설정
- UNIQUE : 중복 허용 안함 (NULL은 허용), 한 테이블에 여러개 가능
*/
CREATE TABLE products (
-> id int not null auto_increment primary key,
-> name varchar(50) not null,
-> model_number varchar(15) not null,
-> series varchar(30) not null
-> );
ALTER TABLE [TABLE명] ADD [속성명] [데이터 타입]; -- 속성 새로 추가
ALTER TABLE [TABLE명] DROP (COLUMN) [속성명]; -- 기존 속성 삭제
ALTER TABLE [TABLE명] MODIFY [속성명] [데이터 타입] -- 기존 속성 수정
DROP TABLE [TABLE명];
참고) DROP vs. TRUNCATE
DROP TABLE [TABLE명]; -- 테이블 삭제 TRUNCATE TABLE [TABLE명]; -- 테이블 초기화 (테이블 구조는 남음)
데이터베이스의 내부 데이터를 관리하기 위한 언어
쿼리 키워드 작성 순서
SELECT
>>FROM
>>WHERE
>>GROUP BY
>>HAVING
>>ORDER BY
>>LIMIT
-- SELECT 속성,... FROM [TABLE명] [WHERE 조건];
SELECT * FROM user WHERE id=1;
[ WHERE 조건 ]
- 연산자
연산자 타입 종류 비교 연산자 =, >, >=, <, <= 부정 연산자 !=, ^=, <>, NOT [COL명]= 논리 연산자 AND, OR, NOT
- 범위, 집합, 패턴, NULL
-- BETWEEN A AND B : A와 B의 사이값 조회 (A, B 포함) SELECT * FROM user where age BETWEEN 25 and 30; -- IN(리스트) : 리스트의 요소와 일치하면 참 SELECT * FROM user WHERE age IN (20, 21, 22, 23); -- LIKE : 문자열 패턴 조회 (WHERE와 함께 쓰임) -- '서울로 시작하는 주소 찾기' SELECT * FROM user WHERE address LIKE '서울%'; -- 주소에 '광역시'가 들어가는 사람 SELECT * FROM user WHERE address LIKE '%광역시%'; -- IS NULL / IS NOT NULL SELECT * FROM user WHERE address is null; SELECT name, address FROM user WHERE address is NOT NULL;
와일드 문자
와일드 문자 의미 예시 % 정해지지 않은 길이 나타냄 '%서울%' : 서울을 포함하는 문자열 _ 특정 위치의 1개 문자 '_민%' : 두 번째 글자가 '민'인 문자열
- ORDER BY
정렬, WHERE절과 함께 사용
- ASC(Ascending) : 오름차순 (defualt, 생략 가능)
- DESC(Descending) : 내림차순
SELECT * FROM user ORDER BY age ASC; SELECT * FROM user WHERE id > 6 ORDER BY age DESC;
- DISTINCT : 중복 제거
SELECT DISTINCT age FROM user;
- LIMIT : 출력 개수 제한
SELECT * FROM user LIMIT 3; SELECT * FROM user WHERE address LIKE '서울%' LIMIT 2;
-- INSERT INTO [TABLE명] (필드1, 필드2,...,필드n) VALUES (값1, 값2, ..., 값n);
INSERT INTO user (name, age, address) VALUES('김민정',20,'서울특별시 마포구');
-- UPDATE [TABLE명] SET 필드1 = 값1(바꿀 데이터) WHERE 조건(target);
UPDATE user SET name="김민지" WHERE id=1;
-- DELETE FROM [TABLE명] WHERE 조건;
DELETE FROM user WHERE id=1;
DELETE FROM user; -- 테이블 전체 삭제