0908 java

정혜지·2022년 10월 5일

2022.09.08

-- cmd mysql 실행 방법
/*
1. 환경변수 등록 : C:\Program Files\MySQL\MySQL Server 8.0\bin
2. 프롬프트 실행

	> mysql -u 유저명 -p 비밀번호
> show databases;
> use database명;

*/

-- IF, CASE
SELECT GRADE,
CASE
WHEN GRADE = 1 THEN '아이언'
WHEN GRADE = 2 THEN '브론즈'
WHEN GRADE = 3 THEN '실버'
WHEN GRADE = 4 THEN '골드'
WHEN GRADE = 5 THEN '플래티넘'
END AS 등급
FROM SALGRADE;

-- CASE문을 IF로 변환?
SELECT GRADE,
IF(GRADE = 1, '아이언',
IF(GRADE = 2, '브론즈',
IF(GRADE = 3, '실버',
IF(GRADE = 4, '골드',
IF(GRADE = 5, '플래티넘', '없는등급'))))) AS 등급
FROM SALGRADE;

-- 생성 및 사용
DROP PROCEDURE IF EXISTS firstProc;

DELIMITER $CREATE PROCEDURE firstProc() BEGIN SELECT * FROM EMP; END $
DELIMITER ;

CALL firstProc();

-- ifProc
DROP PROCEDURE IF EXISTS ifProc;

DELIMITER $$
CREATE PROCEDURE ifProc()
BEGIN
DECLARE var1 INT; -- VAR1 로컬변수 선언
SET VAR1 = 20;

IF var1 = 10 THEN
	SELECT '10이 맞습니다';
ELSEIF var1 = 20 THEN
	SELECT '20이 맞습니다';
ELSE 
	SELECT '이외값';
END IF;

END $$
DELIMITER ;

CALL ifProc();

--
-- 직원번호 7369 직원의 입사일이 5년 넘었다면? --> '5년 이상' / '5년 미만'
DROP PROCEDURE IF EXISTS ifProc2;

DELIMITER $$
CREATE PROCEDURE ifProc2()
BEGIN
DECLARE hiredate DATE;
DECLARE day INT;

SELECT e.hiredate INTO hiredate
FROM emp e
WHERE empno = 7369;

SET day = DATEDIFF(CURRENT_DATE(), hiredate);

IF (day / 365) >= 5 THEN
	SELECT '5년 이상';
ELSE 
	SELECT '5년 미만';
END IF;

END $$
DELIMITER ;

-- 출력값이 있는 프로시져(getLoc)
-- ? IN : EMPNO -> OUT : LOC
DROP PROCEDURE IF EXISTS getLoc;

DELIMITER $CREATE PROCEDURE getLoc(IN in_empno INT, OUT out_loc VARCHAR(20)) BEGIN SELECT D.LOC INTO out_loc FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND E.EMPNO = in_empno; END $
DELIMITER ;

CALL getLoc(7369, @out_loc);
SELECT @out_loc;

-- 사번으로 사원이름 검색하는 함수
SET GLOBAL log_bin_trust_function_creators = 1;

DROP FUNCTION IF EXISTS getName;

DELIMITER $$
CREATE FUNCTION getName(in_empno INT)
RETURNS VARCHAR(20)
BEGIN
DECLARE out_ename VARCHAR(20);

SELECT ename INTO out_ename
FROM emp
WHERE emp.empno = in_empno;

RETURN out_ename;

END $$
DELIMITER ;

SELECT getName(7369);

-- PROCEDURE VS FUNCTION
-- IN/OUT : O VS X
-- RETURNS/RETURN : X VS O

-- 트랜잭션 Transaction, TX
-- 더이상 쪼갤 수 없는 기능 단위
-- DB의 상태를 변경 시킬 수 있는 작업 단위

-- 하나의 트랜잭션의 예
-- 인출(돈이 줄어듬) SELECT, UPDATE -> 은행 검색 SELECT -> 계좌 체크 SELECT -> 입금(돈이 증가) SELECT, UPDATE

-- 게시글 : 작성 --> 메인페이지에서 내가 작성한 글 확인
-- SELECT -> INSERT -> SELECT

-- GIT COMMIT

-- 특징
-- 1. 원자성 : 하나의 트랜잭션의 결과가 모두 반영되거나 혹은 반영되지 않아야 한다!
-- 2. 일관성 : 결과가 동일한 결과를 출력할 수 있어야 한다!
-- 3. 영구성 : 결과가 DB에 영구적으로 남아야 한다!(COMMIT)
-- 4. 독립성 : 하나의 트랜잭션은 다른 트랜잭션에 영향을 주지 않는다!

-- COMMIT 확인
SHOW VARIABLES LIKE '%COMMIT%';
SET AUTOCOMMIT = 0;

-- 트랜잭션의 시작 ~ 종료 COMMIT --> @TRANSACTIONAL
START TRANSACTION;

SELECT *
FROM EMP01;

INSERT INTO EMP01 (EMPNO, ENAME, DEPTNO)
VALUES (9999, 'IT', 20);

SELECT *
FROM EMP01;

COMMIT;

ROLLBACK;

profile
오히려 좋아

0개의 댓글