Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/5월
22. 05. 17 - 트랜잭션(COMMIT, ROLLBACK), DDL, DCL, 연산자
giggs
2022. 5. 18. 10:27
트랜잭션
- 쪼갤 수 없는 업무 처리의 최소 단위
- EX) 계좌이체 상황 –
- -1번~4번 작업 중 하나라도 이루어지지 않으면 계좌이체 작업이 아니다.
- -1번~4번이 합쳐진 계좌이체 작업이 하나의 트랜잭션!
- 쪼갤 수 없는 단위이다. - 둘 중에 하나라도 이루어지지 않으면 안 된다.
COMMIT / ROLLBACK
>COMMIT
- 1~4번 성공하면 – 계좌이체 작업 성공 – 트랜잭션 작업 성공 – 결과 반영해라 - COMMIT
>ROLLBACK
- -중간에 하나라도 실패하면 – 계좌이체 작업 실패 - 트랜잭션 작업 실패
- 3번작업에서 실패시 -> 1번, 2번 작업도 취소해 주어야 한다. - 1,2번 작업 - ROLLBACK 해주어야 한다.
- ROOLBACK 은 마지막 COMMIT 부분이나 SAVEPOINT로 되돌아가는 작업!
### 어제 실습했던 DML 작업들
- INSERT 한다고 DB에 반영된 것이 아니다!
- 작업 중인 내 컴퓨터에서는 보이지만, 다른 컴퓨터에서는 안 보인다..
- WHY?
- 내 컴퓨터에서 INSERT까지만 작업한 것이고 DB에 반영 안 했다.
- DB에 반영해주는 작업이 COMMIT !
### DDL 애들은 < CREATE, DROP, ALTER, TRUNCATE >
- COMMIT이 자동으로 들어간다고 생각하면 된다..
- ROLLBACK 해도 테이블이 삭제되진 않는다. - 작업이 취소되진 않는다.
- 보통 DML 애들< INSERT, DELETE, UPDATE, SELCET > 작업한 후 COMMIT / ROLLBACK 해준다.
- 마지막 ROLLBACK하면 DB에는 유저 몇번 까지 저장?
- 유저 3번까지 남아있다.
- 마지막 커밋 지점으로 돌아가는 것!
진도
DDL < CREATE, DROP, ALTER >
1. 테이블 생성 – CREATE TABLE KH_MEMBER(....);
2. 칼럼 채워주기
- 공백을 포함하게 만들어 주고 싶으면“ ” 로 묶어서 만들어주면 됨
- 예약어를 칼럼명으로 사용하고 싶으면 “ ” 로 묶어주면 사용 가능
3. 칼럼 추가해주기 – ALTER TABLE .. ADD ..
4. 칼럼 삭제해주기 – ALTER TABLE .. DROP COLUMN ...;
5. 칼럼 수정하기 – ALTER TABLE ... MODIFY ...
6. 데이터 넣어보기 – INSERT INTO ... VALUES ... +@ COMMIT
7. 칼럼 수정하기 ALTER TABLE .. MODIFT ..
- 조건에 맞지 않는 데이터가 이미 들어있다면, 수정이 불가능함
- 1번예시 ))) MODIFY NAME NUMBER ==>
- 숫자가 들어있었으면 NUMBER로 바꿔도 괜찮을 텐데
- 문자가 들어가 있는데 숫자로 바꾸려고 하니 안돼서 오류 났다.
- 2번예시 ))) MODIFY VARCHAR(2) ==>
- 변경하려는 사이즈보다
- 이미 들어있는 값의 사이즈가 더 커서 에러 났다.
8. 테이블 삭제하기 – DROP TABLE ....
- DROP 은 테이블의 스키마(속성)까지 날려버리는 명령어 – 테이블 자체를 없애는 것
- TRUNCATE 는 스키마는 살려놓고 – 테이블을 삭제하는 명령어
- ( DELETE는 TRUNCATE와 같은 효과 )
모델링
- 테이블 만들 것인데 - 이 테이블에 이 속성이 있는 것이 맞을까? 생각하며 만들기
IF) 학원과 관련된 프로젝트 만드는 경우 테이블 만들기 상황
1. 테이블 명 정하기
2. 속성 정하기 (해마다 바뀌는, 수정이 계속 바뀌는 AGE 같은 속성은 -> BIRTHDAY로 수정)
3. 출석이란 테이블 따로 만들어서 관리 – 출석 테이블 속성 정하기
- 따로 테이블 생성 방법이 아니라 칼럼(속성) 추가하는 방식으로도 해결 가능
- 매번 확인해야 하는 속성에 대해서
- 따로 테이블 생성 시– 매번 2개의 테이블 조회해야 한다. - 속도 오래 걸릴 수도
- 칼럼 추가로 해줄 시– 속도 UP
- 이 상황에서 문제점은?
- NAME을 중심으로 짠 프로젝트. - NAME 값 중복 가능성 존재한다.
- 여기에 심원용 2000.1.1 추가되면? 동명이인.
- 이름 하나로 구별하는 프로젝트에서 큰일이 난다.
- 누구의 출석/조 가져올지 모른다.
- 학번과 같은 고유의 키가 필요하다! - 기본키(PK) 필요
- 중복되지 않는 값으로 구별되도록 프로젝트를 짜야한다.
- UNIQUE 한 값으로, NOT NULL 한 값을 중심으로 짜자!
추가 수정
- NO 넘버를 알면 – 이름을 알 필요가 없다.
- 이름이 궁금하다? = NO넘버로 MEMBER테이블 가서 이름을 보면 된다.
테이블 구성을 잘하려면?
- DB 자체에 대한 공부도 필요하고
- SQL에 대한 공부도 필요하고
- 업무 자체, 사용하는 업무의 관한 지식, 업무 분석 능력도 필요할 것이다.
- 전문적으로 하는 사람이 DA.DDA
- 우리는 업무 분석 능력은 필수! 여기에
- SQL 다루는 능력을 키워서 DB의 데이터를 가지고 놀 줄 알아야 한다..
- DB를 전문적으로 팔 필요는 아직은 없다.
정규화란?
- 릴레이션(테이블) 설계하기 위해 정해진 규칙
- 1 정규 2 정규 3 정규 BCNP4 정규 5 정규
- 1 정규형 - 도메인이 원자 값으로 구성 ( [3,4,5] x -> [3] [4] [5] O)
### 1정규형의 조건 : 도메인이 원자값
- BIRTHDAY – 2002.2.2. => 원자값? 경우에따라서 이런것도 원자값이라고 쳐준다.
- PHONE – 010-1234-124 => 원자값? 경우에따라서 이런것도 원자값이라고 쳐준다.
진도~
DML 연산자 다루기
- PART 1
- + : 더하기 연산자
- PART 2
- = : 같다
- !=, ^=, <> : 같지 않다.
- > , <, <=, >= : 대소 비교
- PART 3
- IN NULL : NULL인지 확인
- IS NOT NULL : NULL이 아닌지 확인 –
- (+ NULL은 등호로는 연산 안된다. (= NULL 안된다))
- PART 4
- NOT : 부정 연산자
- AND : 그리고( && )
- OR : 또는 ( || )
- BETWEEN A AND B : A<= ?? <=B 인지 확인
- PART 5
- IN, NOT IN : 포함 여부 확인
- ( OR연산자 여러번 사용하는 경우 - OR 대신 사용 )
- PART 6
- LIKE, NOT LIKE : 문자열 비교 (- %와 세트로 많이 사용)
- % : 0개 이상의 문자열 ( 대체 – 어떤 글자인지 상관 X, 몇 글자인지 상관 X)
- _ : 한 글자 ( 대체- 어떤 글자인지는 상관 X, 1글자만 대체)
## CHECK POINT
### 여러 연산의 결과가 결과 집합 RESULT SET 화면에서만 이렇게 보여주는 것이다.
- > 실제 테이블에 , DB에 변경되는 것이 아니다.
- > 나중에 이 RESULT SET을 - JDBC를 이용 - 자바로 전달
- > 한 줄 한 줄 읽어서 사용할 수 있다.
### ORACLE
- 숫자는 오른쪽 정렬
- 문자는 왼쪽 정렬
- [ ‘ ’ ]와 [ “ ” ]는 구분 없이 다 문자열 취급 – 표시는 [ ‘ ’ ]로 해준다.
- 더하기 + 연산자와 콘캣 연산자 || 의 차이를 알아야 한다.
- 더하기 + 연산자는 좌변과 우변을 숫자로 바꿔서 처리 –> NAME + 1 = 실패
- 콘캣 || 연산자는 좌변과 우변을 문자열로 바꿔서 처리 –> NAME || 1 = 성공
### 3개의 ROW 나오는 이유?
- 어떤 칼럼에 대한 것이 아니라 – 어떤 값을 그냥 가져오는 것이다.
- FROM 뒤의 테이블에 접근해서 행 (ROW) 하나하나 접근해서 가져오는 것이다.
- 테이블의 ROW 수만큼 출력됨.
## DUAL 테이블
- 나는 그냥 123+1 이것만 테스트해보고 싶은데 테스트를 위해 어떤 TABLE이 반드시 필요하다.
- 불필요한 행이 나오기도 하고. 임시 테이블 만들어서 테스트하기도 번거롭다.
- DUAL이라는 더미 테이블 사용해서 하자.
- DUAL 테이블 활용해서 테스트보다 수월하게 진행 가능!
REVIEW
트랜잭션
DB의 변경을 주는 하나의 논리적인 작업 단위
기억이 속속 나네. ㅎㅎㅎ
COMMIT, ROLLBACK을 비롯한
여러가지 연산자들
이론으로만 공부했던 내용들을
직접 실습해보니 재미있었다.
새롭게 알게된 연산자는 || , _
|| (CONCAT)연산자
_ (한 글자대체) 연산자
새롭게 알게된 개념은
1 || 1 = 2 (문자 결과 : 왼쪽 정렬)
1 + '1' = 2 (숫자 결과:오른쪽 정렬)
1 + 'A' = 불가능
1 || A = 1A (문자결과 : 왼쪽 정렬)
올바른 연산자와 조건을 이용하여
RESULT SET을 잘 뽑아내야지
잘못된 정보를 가지고 돌아가면
모든 것이 엉망이 될듯...
실수하지 않도록 복습복습!