● 어제 했던 방법 응용
뭐가 좋고 나쁘다의 개념이 아님 강사님 선호방식
------------------------ 여기까지가 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 |
댓글