
저번 게시글에 이어 mariaDB 문자 타입부터 살펴보자.
수업 시간에 진행한 실습 위주로 복습해보았다.
INSERT INTO author(id, email, profile_photo) VALUES(7, 'abc@test.com', LOAD_FILE('/Users/tte/tte-picture.png'));
💡 *macOS에서 경로 확인하는 법
파일 선택 후 Command + Option + C(⌘ + ⌥ + C)
-- enum : 삽인될 수 있는 데이터 종류를 한정하는 데이터 타입
-- role 컬럼 / not null 일 때 default를 지정해주지 않으면 자동으로 enum(1,2)의 1번이 값으로 지정된다!
ALTER TABLE author ADD COLUMN ROLE ENUM('admin', 'user') NOT NULL DEFAULT 'user';
-- enum 컬럼 실습
-- user1 을 insert => 에러
insert into author(id, email, role) values(8, 'test@test.com', 'user1');
-- user 또는 admin insert => 정상
insert into author(id, email, role) values(8, 'test@test.com', 'user');날짜와 시간
-- DATE / DATETIME 실습
-- author 테이블에 birth_day 컬럼을 date로 추가
-- 날짜 타입의 insert는 문자열 형식으로 insert
alter table author add column birth_day date;
insert into author(id, email, birth_day) values(9, 'tteia@test.com', '1996-04-30');
-- date 타입이 아닌 varchar 였어도 들어갈 값. 왜 date ? => +40을 한다면 40일이 더해짐. varchar 였으면 계산이 X
-- author, post 둘 다 datetime으로 created_time 컬럼 추가
alter table author add column created_time datetime;
alter table post add column created_time datetime;
insert into author(id, email, created_time) values(10, 'abc@abc.com', '1999-01-01 23:11:32');
insert into post(id, title, created_time) values(7, 'hello', '1999-01-01 23:11:32');alter table author modify column created_time datetime default current_timestamp;
insert into author(id, email) values(11, 'abc@abc.com');
검색 패턴
select * from post where title like '%o'; --o로 끝나는 title 검색
select * from post where title like 'h%'; --h로 시작하는 title 검색
select * from contents where title like '%orl%'; --단어 중간에 orl 이라는 키워드가 있는 경우 검색
select * from post where title not like '%o'; --o로 시작하지 않는 title 검색
-- REGEXP : 정규표현식을 활용한 조회
select * from author where name REGEXP '[a-z]';
select * from author where name REGEXP '[가-힣]';-- ifnull(a,b) : 만약에 a가 null이면 b 반환, null이 아니면 a반환.
select title, contents, author_id from post;
select title, contents, ifnull(author_id, '익명') as 저자 from post;
타입 변환
-- 날짜 변환 : 숫자 -> 날짜, 문자 -> 날짜
-- CAST / CONVERT
select CAST(20200101 AS DATE);
SELECT CAST('20200101' AS DATE);
select CONVERT(20200101, DATE);
SELECT CONVERT('20200101', DATE);
-- datetime 조회 방법
select * from post where created_time like '2024-05%';
select * from post where created_time <= '2024' and created_time >= '1999';
select * from post where created_time between '1999-01-01' and '2024-12-31';
-- date_format
select date_format(created_time, '%Y-%m') from post;
-- 실습 : post를 조회할 때 date_format 활용하여 2024년 데이터 조회
select * from post where date_format(created_time, '%Y') = '2024';
- 데이터를 입력받을 때 실행되는 검사 규칙
- CREATE 문으로 테이블을 생성 또는 ALTER 문으로 필드를 추가할 때 설정
- NOT NULL
- FOREIGN KEY
- UNIQUE
- PRIMARY KEY
NOT NULL
-- not null 조건 추가
alter table 테이블명 modify column 컬럼명 타입 not null;UUID (Universally Unique Identifier)
💡 UNIQUE, PK, FK ⇒ 자동으로 index가 생성된다. → 목차페이지(검색의 성능을 높일 수 있다.)
UNIQUE
PRIMARY KEY
FOREIGN KEY ⇒ 만들면 제약 조건 및 index(성능-목차) 기본 생성
-- on delete cascade 테스트 -> 부모 테이블의 id를 수정하면 수정이 안됨 ! 부모의 id가 수정되면 자식도 함께 변경되도록 해줌 : cascade;
-- delete : 삭제 가능 / update : 수정 가능
alter table post add constraint post_author_fk foreign key(author_id) references author(id) on delete cascade on update cascade;
-- 실습 delete => set null, update cascade;
alter table post drop foreign key post_author_fk;
alter table post add constraint post_author_fk foreign key(author_id) references author(id) on delete set null on update cascade;
-- 시간 세팅시 가장 많이 사용
ALTER TABLE author ADD column created_at DATETIME DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE post ADD column created_at DATETIME DEFAULT CURRENT_TIMESTAMP;
타입 파트에서는 어떤 언어로든 프로그래밍을 공부하거나, 알고리즘 개념을 마주하다보면 자주 만나는 개념들이어서 수업도 실습도 수월하게 따라갔다.
하지만 개념이 쌓이고, 타입변환과 제약 조건과 같은 여러가지 응용이 쌓여가면서 수업 시간 실습이나 프로그래머스 문제 풀이에 시간 소요가 생기면서 지체되는 문제가 발생했다.
수업 시간에는 강사님의 개념 설명에 최대한 집중하면서 정답 코드를 그대로 따라 치더라도 실습을 놓치지 않는 것에 집중하였고, 집에 돌아와 오늘 배운 개념을 꼼꼼하게 정리해보았다. (이 글 속에 있는 개념들을 이해하고 작성하는데에만 3시간이 걸렸다..)
시간은 오래 걸렸지만, 복습 시간을 가지면서 오늘 배운 개념을 다시 마주했을 때 처음 마주한 것과 같은 두려움은 느끼지 않을 수 있을 것 같다! 응용력이 100% 되는 그 순간까지 열심히 달려보겠다!