안녕세계
[SK고용디딤돌] MySQL (4/7) - 3주차 본문
[SK고용디딤돌] MySQL (4/7) - 3주차
Junhong Kim 2016. 7. 22. 18:05* Meta Data : 데이터의 데이터
* 열(Column) : 공통적인 데이터 특성 (길이, 타입, NULL 허용 유/무 등)
* 행(Row) : PK를 이용해 식별
(+) 클릭
Edit Schema
※ Collation : 문자 set 결정하는 것임
Add Diagram
물리 : 실제 데이터 베이스 반영
DB에서 메타데이터 대/소문자구분하지 않음
(short key)
press T : 테이블 만들기
INT1, INT2 .. : INT의 자리수
cdtime, udtime 컬럼[DATETIME]을 만들어서 최초 만들어진 시간, 최종 수정시간을 입력해 둬서 나중에 확인할 수 있도록 한다
SELECT [컬럼 목록] FROM [테이블 목록] WHERE [논리 표현식] → TRUE / FALSE 중에서, TRUE인 결과만 나옴
( '=, <, >' 는 PK 사용을 권장, exists , like)
※ predicate : DB에서 조건이라고 함
※ JOIN 연산은 성능을 떨어 뜨릴수 잇는 요인이 된다. JOIN을 빨리 하려면 INDEX가 필요하다.
SELECT current_timestamp(), now(), sysdate();
current_timestamp() : 함수
current_timestamp : 값
관계설정
- 참조하는 테이블을 먼저 선택 후, 참조할 테이블 선택
non-identifying-relationship : 점선(외래키가 속성이 됨)
identifying-relationship : 실선 (외래키가 키가 됨
인덱스/ 포리진 잘 되어있는지 확인하고 안된거는 다시해야함 -> 버그임.. 개오바..
※ where 조건절에 많이 쓰이는 것은 index로 만든다. -> 조금 더 빠르게 하기 위해
1) UNIQUE : 유일한 것
2) INDEX : 중복 가능한 것
[최종 설계]
[코드로 변환하기]
[내 AWS DB가서 SQL 파일 불러오면 됨]
CREATE INDEX `fk_menu_order_details_branch_menu1_idx` ON `menu_order_details` (`branch_menu_id` ASC);
CREATE INDEX `fk_menu_order_details_branch_order1_idx` ON `menu_order_details` (`menu_order_id` ASC);
[문법]
CREATE INDEX index_name ON table_name(column_name, colunm_name, ...); --
※ 코드를 보고 index 확인하고 안된거 다시 입력
[데이터 삽입]
※ EERD를 다시 코드화해야 반영 됨 (저장필수)
[Auto commit]
insert, update, delete 할 때 auto commit을 하지 않음 (체크 풀기
- DATE_FORMAT(): DATETIME → VARCHAR로 변환
- STR_TO_DATE(): VARCHAR → DATETIME로 변환
%m (1월 - 12월)
%d (1일 - 31일)
%H (24시간제)
%h (12시간제) + %p(오전오후)
%s (초)
%i (분)
%Y (4자리 년도)
%y (2자리 년도)
- now(): DATETIME type
select now() as 'NOW', date_format(now(), '%Y-%m-%d %H:%i:%s') as '현재시각';
select str_to_date('2015-03-01','%Y-%m-%d');
ㄴ 문자열을 읽어서 DATE TIME 타입으로 포맷, 시분초 정보 안주면 0시0분0초임
select now() as 'NOW', date_format(now(), '%Y-%m-%d %H:%i:%s') as '현재시각';
select str_to_date('2015-03-01','%Y-%m-%d');
select * from menu_order;
select * from menu_order_details;
insert into menu_order (order_dtime, ctime, utime)
values(str_to_date('2015-01-01', '%Y-%m-%d'),
str_to_date('2015-01-01', '%Y-%m-%d'),
str_to_date('2015-01-01', '%Y-%m-%d'));
insert into menu_order_details (menu_order_id, branch_menu_id, quantity, ctime, utime)
values (1, 1, 1, str_to_date('2015-01-01', '%Y-%m-%d'), str_to_date('2015-01-01', '%Y-%m-%d'));
insert into menu_order_details (menu_order_id, branch_menu_id, quantity, ctime, utime)
values (1, 7, 2, str_to_date('2015-01-01', '%Y-%m-%d'), str_to_date('2015-01-01', '%Y-%m-%d'));
insert into menu_order_details (menu_order_id, branch_menu_id, quantity, ctime, utime)
values (1, 9, 3, str_to_date('2015-01-01', '%Y-%m-%d'), str_to_date('2015-01-01', '%Y-%m-%d'));
select * from menu_order;
select * from menu_order_details;
select *
from menu_order o join menu_order_details d on (o.id = d.menu_order_id);
select o.id, o.order_dtime, d.branch_menu_id, d.quantity
from menu_order o join menu_order_details d on (o.id = d.menu_order_id);
select o.id, o.order_dtime, bm.branch_id, d.quantity, bm.menu_id
from menu_order o join menu_order_details d on (o.id = d.menu_order_id)
join branch_menu bm on (d.branch_menu_id = bm.id);
select o.id, o.order_dtime, bm.branch_id, b.name, bm.menu_id, m.name, d.quantity, bm.menu_id
from menu_order o join menu_order_details d on (o.id = d.menu_order_id)
join branch_menu bm on (d.branch_menu_id = bm.id)
join branch b on (bm.branch_id = b.id)
join menu m on (bm.menu_id = m.id);
-- 주문 데이터 생성
insert into menu_order(order_dtime, ctime, utime)
values(str_to_date('2015-01-01', '%Y-%m-%d'),
str_to_date('2015-01-01', '%Y-%m-%d'),
str_to_date('2015-01-01', '%Y-%m-%d'));
-- 주문 내역 데이터 생성
insert into menu_order_details(menu_order_id, branch_menu_id,quantity, ctime, utime)
values(1, 1, 1, str_to_date('2015-01-01', '%Y-%m-%d'), str_to_date('2015-01-01', '%Y-%m-%d'));
insert into menu_order_details(menu_order_id, branch_menu_id, quantity, ctime, utime)
values(1, 3, 2, str_to_date('2015-01-01', '%Y-%m-%d'), str_to_date('2015-01-01', '%Y-%m-%d'));
insert into menu_order_details(menu_order_id, branch_menu_id, quantity, ctime, utime)
values(1, 4, 3, str_to_date('2015-01-01', '%Y-%m-%d'), str_to_date('2015-01-01', '%Y-%m-%d'));
-- 주문 내역 조회
select *
from menu_order o join menu_order_details d on (o.id = d.menu_order_id);
select o.id, o.order_dtime, d.branch_menu_id, d.quantity
from menu_order o join menu_order_details d on (o.id = d.menu_order_id);
select o.id, o.order_dtime, bm.branch_id, bm.menu_id, d.quantity
from menu_order o join menu_order_details d on (o.id = d.menu_order_id)
join branch_menu bm on (d.branch_menu_id = bm.id);
select o.id, o.order_dtime, bm.branch_id, b.name, bm.menu_id, m.name, d.quantity
from menu_order o join menu_order_details d on (o.id = d.menu_order_id)
join branch_menu bm on (d.branch_menu_id = bm.id)
join branch b on (bm.branch_id = b.id)
join menu m on (bm.menu_id = m.id);
'My Trace > SK고용디딤돌2기' 카테고리의 다른 글
[SK고용디딤돌] MySQL (6/7) - 4주차 (0) | 2016.07.26 |
---|---|
[SK고용디딤돌] MySQL (5/7) - 4주차 (0) | 2016.07.25 |
[SK고용디딤돌] MySQL (3/7) - 3주차 (0) | 2016.07.21 |
[SK고용디딤돌] MySQL (2/7) - 3주차 (0) | 2016.07.18 |
[SK고용디딤돌] MySQL (1/7) - 2주차 (0) | 2016.07.15 |