본문 바로가기
IT/MYSQL

[7일차] MySQL2

by GWLEE 2022. 6. 28.

● 어제 했던 방법 응용

 

뭐가 좋고 나쁘다의 개념이 아님 강사님 선호방식

------------------------ 여기까지가 DML

 

--------------여기부터 각종 제약사항하는게 DDL

 

/* 여기서부터 DDL(Data Definition Language) */

# create . alter . drop . rename . truncate . comment 등등..

Mysql은 table 대문자를 구별한다.

# MySQL 대문자 주의

● Book  보여주기 

● 데이터가 들어있지 않음을 확인

 

● 값을 넣어준다.

● pk 지정 안해줘서 1이 들어가도 괜찮다.

● update 수정된 거 확인

● delete jkrowling3 삭제

● update 수정 1

 

● update 수정 2

● 다 날려버림 임시버퍼 X 날리면 끝임 truncate

● 임시 테이블 작성

● 현재 테이블

● 현재 테이블 pubs 추가로 넣어서 수정하기 alter

● 칼람 수정 varchar(50)에서 varchar(100)으로

●  작가 동명이인 -> 이름 변경 -> 무결성 문제로

● 작가 칼람 삭제

● pk 지정 -> 통틀어서 constraint 제약 조건이다.

● 어떤 테이블에 제약조건이 설정되어있는지 알 수 있다.

● 제약조건에 컬럼명 까지 나옴

● author 테이블 생성

●  desc author 테이블 보여주기

●  author 테이블 제약조건 + 컬럼명까지 보여주기

● author fk 넣기

● insert author

● insert book

● author 들어간 거 확인

● book 들어간거 확인

● author id가 1번인 것을 지울 수 없다.

● root에서 user, host

<< 트랜잭션 >>

잔액 + 100만원       잔액 -100만원

다수의 작업이 돌아갈 필요가 있을 때

묶어버릴 필요가 있는데 중간에 실패하면 ROLLBACK

다시 갱신해줄때가 COMMIT

 

2개이상의 작업들이 모여서 하나의 task를 실행

 

commit 안때리면 무조건 rollback

rollback하면 값은 바뀌나 root에서는 바뀌지 않는다.

 

● root에서 commit 하면 갱신된다. Rollback으로 하면 변경되지 않음.

● 사용자 함수 autocommit 으로 value 값 OFF -> ON으로 변경

● set global 1로 변경하니깐 value 도 ON으로 변경

● 사용자 함수 autocommit 으로 value 값 OFF -> ON으로 변경

select FN_GET_SALARY 7788 넣으면 3000

● db에 뭐가 있는지 확인

 

stored Procedure(내장된 프로시저) : 여러 값을 리턴해줄 수 있음. 훨씬 유연함

보안때문에 소스코드 상에 데이터 구조를 알려줄 수 있으므로

: 의미 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다

 

 delimiter : 구분 문자는 일반 텍스트 또는 데이터 스트림에서 별도의 독립적 영역 사이의 경계를 지정하는 데 사용하는 하나의 문자 혹은 문자들의 배열을 말한다.

 

▶ 필요한 이유 ? 만약 해당 명령어 없이 프로시저를 작성하면 세미콜론으로 끝나는 SQL 부분이 나눠져 서버로 보내집니다. 다시 말하면 Delimiter 없이 이렇게 프로시저를 짠다면 따로 보내져서 어디부터 어디까지가 프로시저인지 구문을 하지 못합니다.

 

사용 방법 ?  그렇기 떄문에 프로시저를 작성할때는 항상 첫줄에는 DELIMITER $$를 선언하고 END에는 $$으로 프로시저 끝나는 부분을 표시하고 마지막에는 구분문자가 끝나는 DELIMITER ;를 선언해서 사용

 

 

 

stored procedure 사용해서 call로 불러오기

장르가 여러개올 수 있으니 1 : N 복합 프라이머리 PK FK

여러명이 등장하니깐 1: N

Inventory 매장마다 보유하고 있는 영화

Store _id : 최초로 등록한

Payment - amount 비용

use sakila;

전부 english라서 1로만 나옴

전체 카테고리 찾기

카테고리 검색

 group by 함수써서 customer_id 묶어서 계산

: 고객 id, 사람의 지불 금액 계산

문제 응용하기 !!

group by 함수써서 customer_id 묶어서 계산

고객 id, 사람의 지불 금액 계산

오라클은 first_name, last_name으로 묶어야 에러 안남

 cusotmer_id 로 묶는 것보단 first_name, last_name으로 묶어야 ```

근데 동명이인 때문에 customer_id를 같이 묶기

 concat 이용해서 문자열 합치기 as

 

고객ID 대여수 계산 -> 고객id별로 레코드의 개수를 센다. count대여 많은 고객 = order by

 고객ID 대여수 계산 -> 이름까지 join 해서 출력

● /* #6. action 분야 영화의 다음 속성들을 출력하시오

필름번호, 제목, 설명, 카테고리명, 발매년도, 언어*/

 

# 1단계 : 필름에서 4개 뽑기

 

# 2단계:  어떤 language인지 언어 추가

Film이랑 language join

# 3단계 : 카테고리 추가 :

마지막으로 카테고리 찾기  action 분야 영화의 속성들을 출력

필름 - 필름 카테고리 join

카테고리 - 필름 카테고리 join

Where 조건 걸어서 action 분야

 

# 마지막으로 카테고리 찾기 
select F.film_id as 필름번호, F.title as 제목, description as 설명, F.release_year as 발매년도, L.name as 언어, CT.name as 카테고리명
from film F join language L
on F.language_id = L.language_id
join film_category FC on F.film_id = FC.film_id # 필름 - 필름 카테고리 테이블 조인
join category CT on FC.category_id = CT.category_id
where CT.name = 'action'; #조건 걸기 action만

 

 

'IT > MYSQL' 카테고리의 다른 글

[8일차] MySQL3  (0) 2022.06.29
[8일차] MySQL 환경변수 설정. use sakila.  (0) 2022.06.29
[6일차] MySQL  (0) 2022.06.27
[6일차] 쿼리 작성  (0) 2022.06.27
[6일차] DB . MYSQL 설치. 쿼리 작성  (0) 2022.06.27

댓글