MySQL 스토어드 프로그램 (1) 프로시저
·
MySQL
스토어드 프로그램스토어드 프로시저스토어드 프로시저(이하 프로시저)는 여러개의 명령을 묶어서 실행할 수 있는 기능이다.복잡한 비즈니스 로직을 구현하고, 트랜잭션을 처리하는 목적을 가진다.그렇기 때문에 스토어드 함수와는 달리 비결정성을 허용한다.프로시저 목적복잡한 비즈니스 로직 구현데이터 변경자동화된 작업 수행CREATE PROCEDURE 프로시저 생성DELIMITER //CREATE PROCEDURE 프로시저명()BEGIN DECLARE var1 INT; SET var1 = 100; SELECT * FROM 테이블명1; SELECT * FROM 테이블명2;END //DELIMITER ;프로시저명 뒤에 오는 괄호 내부에 파라미터를 줄 수도 있다.파라미터 종류입력 파라미터IN 파라미터명 데이터형식출력 ..
MySQL SQL 프로그래밍(스토어드 프로그램)
·
MySQL
스토어드 프로그램스토어드 프로그램은 DB 내에서 실행되도록 작성된 SQL 코드 블록이다.복잡한 비즈니스 로직을 실행하거나 작업을 자동화하기 위해서 사용한다. 스토어드 프로그램 종류스토어드 프로그램은 실행 목적과 특징에 따라서 다음과 같이 구분된다.스토어드 프로시저스토어드 함수트리거이벤트DELIMITER 델리미터 지정SQL 코드 블록을 작성하기 위해서는 델리미터 지정이 필요하다.델리미터(DELIMETER)란 한 명령(문장)이 끝났음을 알리는 기호이다.기본 델리미터는 ';'이나, 필요에 따라서 델리미터를 변경 가능.DELIMITER //델리미터가 //으로 변경되었고, 이제 //이 입력되기 전까지는 한 문장이다. //이 입력되야만 실행된다.프로시저나 트리거의 BEGIN, END 구문 내부에서 사용되는 ;과 한..
MySQL Pivot, JSON
·
MySQL
Pivot피벗은 한 열에 포함된 여러 정보를 각각의 열 정보로 변환하는 것을 의미한다. ex) 계절 컬럼 -> 봄, 여름, 가을, 겨울 컬럼으로 변환집계함수 sum()과 if(조건, 참, 거짓)을 함께 사용하여 피벗을 구현계절 이름으로 pivot을 구현하는 경우-- season 컬럼의 계절 이름 정보를 각각의 column으로 분리select uname, sum(if(season = '봄', amount, 0)) as '봄', sum(if(season = '여름', amount, 0)) as '여름', sum(if(season = '가을', amount, 0)) as '가을', sum(if(season = '겨울', amount, 0)) as '겨울', sum(amount) as '합..
MySQL 대용량 데이터 업로드 / 다운로드
·
MySQL
MySQL 대용량 데이터 업로드INSERT INTO movietbl VALUES(1, '쉰들러 리스트', '스필버그', '리암 니슨', LOAD_FILE('C:/SQL/movies/Schindler.txt'), LOAD_FILE('C:/SQL/movies/Schindler.mp4'));LOAD_FILE(PATH) : 해당 경로의 파일을 업로드 문제 상황LONGTEXT, LONGBLOB의 대용량 데이터 INSERT 시 NULL 값 발생원인** LONGTEXT, LONGBLOG의 MAX 값 조정 필요**=> max_allowed_packetSHOW VARIABLES LIKE 'max_allowed_packet' 로 원래 값 확인 가능** LOAD_FILE(PATH) 사용시 해당 경로를 보안 폴더로..
MySQL 명령어 정리 (5) - MySQL 내장함수
·
MySQL
# MySQL 내장함수 ## 제어 흐름 함수 ### IF(수식, 참, 거짓) ``` sql SELECT IF(100>200, '참이다.', '거짓이다.'); ``` 수식이 거짓이므로 `거짓이다.`를 출력. ### IFNULL(수식1, 수식2) 수식1이 NULL인 경우 수식2를 출력. 수식1이 NULL이 아닌 경우 수식1을 출력. ``` sql SELECT IFNULL(NULL, 200); -- 200 SELECT IFNULL(NULL, '널입니다.'); -- 널입니다. SELECT IFNULL(100, 50); -- 100 ``` ### NULLIF(수식1, 수식2) 수식1과 수식2가 같으면 NULL을 반환. 다르면 수식1을 반환. ``` sql SELECT NULLIF(2*5, 5*2); -- NULL..
INSERT 중복키 문제 처리
·
MySQL
INSERT 중복키 문제 처리만약 INSERT를 할 때 삽입하는 데이터의 키가 중복키라면 삽입이 되지 않는다. 또한 오류가 발생한 쿼리 이후의 쿼리들도 실행되지 않는다.INSERT INTO 테이블명 VALUES(값1, 값2, 값3);INSERT INTO 테이블명 VALUES(값4, 값5, 값6);INSERT INTO 테이블명 VALUES(값7, 값8, 값9);만약 값1이라는 키가 이미 존재한다면, 첫번째 쿼리가 실행되지 않는다. 그리고 두번째, 세번째 쿼리까지 모두 실행이 되지 않을 것이다.이에 대한 핸들링 방법은 두가지가 있다.1. IGNOREINSERT IGNORE INTO 테이블명 VALUES(값1, 값2, 값3);INSERT IGNORE INTO 테이블명 VALUES(값4, 값5, 값6);INSE..
MySQL 명령어 정리 (4) 시스템 변수, AUTO_INCREMENT, 형변환
·
MySQL
시스템 변수변수명 앞에 참조 기호를 붙여서 참조. 참조 기호는 다음과 같다.세션은 클라이언트와 MySQL 서버 간의 연결을 의미한다. 세션 관련 변수들(세션 수준 시스템 변수, 사용자 정의 변수)의 설정 값은 세션이 종료되면 사라진다.시스템 변수는 데이터베이스 서버의 설정을 조정하는데 사용됨.사용자 정의 변수는 세션 내에서 임시 데이터를 저장하는 데 사용됨.@@, @@SESSION. : 세션 수준의 시스템 변수@GLOBAL. : 전역 수준의 시스템 변수@ : 사용자 정의 변수, 세션 수준에서만 유효-- 세션 시스템 변수 설정 (아래 2가지 명령은 같은 기능을 함)SET SESSION 변수명1 = 값1;SET @@변수명1 = 값1;-- 세션 시스템 변수 참조SELECT @@변수명1;-- 글로벌 시스템 변수..
MySQL 명령어 정리 (3) 다른 테이블 데이터 가져오기, 여러 데이터 입력
·
MySQL
다른 테이블 데이터 가져오기테이블을 만들고 데이터 가져오기CREATE TABLE 테이블명2(컬럼1 데이터타입1, 컬럼2 데이터타입2);INSERT INTO 테이블명2 SELECT 컬럼1, 컬럼2 FROM 테이블명1;만들면서 데이터 설정CREATE TABLE 테이블명2( SELECT 컬럼1, 컬럼2 FROM 테이블명1);CREATE TABLE에서 SELECT 문을 사용해 다른 테이블을 복사할 수 있다.필요한 컬럼들만 선택하거나, limit을 주어서 복사할 수도 있다. 컬럼, 데이터 타입, null 조건, 내부 데이터는 그대로 복사가 되지만,PK, FK 와 같은 제약 조건은 복사되지 않음에 주의해야 한다.한꺼번에 여러 데이터 입력INSERT INTO 테이블명VALUES(값1, 값2, ...), (값3,..