Database/SQL 42

Boolean 컬럼 이름 짓기 (Flag naming convention)

Boolean 명명 관례 Boolean 변수는 자바 등 각종 프로그래밍 언어 뿐만 아니라, 데이터 베이스에서도 많이 쓰입니다. Boolean 변수, 컬럼, 필드 등 이름은 어떻게 정하면 좋을까요? prefix 사용 의미에 따른 prefix를 활용합니다. (Is, Has, Can, Allows, should) is_activated is_available allows_booking 예시 1. 모든 경우가 참인지 확인하는 Boolean 값 (모든 유저들이 로그인을 했는지 여부) isUsersLoggedIn 🤨 문법이 틀림 areUsersLoggedIn 🤔 are보다는 is isEveryUserLoggedIn 👍 적절함 isEachUserLoggedIn 🥰 가장 적합함 2. 모든 경우 중 하나가 참인지 확인하..

Database/SQL 2021.11.24

MySQL - 파티션(Partition), 테이블 분할

파티션(Partition)이란 ? 크기가 큰 테이블에 쿼리를 수행할 때, 인덱스를 사용한다 하더라도, 테이블의 크기가 매우 크다면 MySQL에 상당한 부하가 걸리게 될 것입니다. MySQL은 크기가 큰 테이블을 물리적으로 여러 개로 분할하는 파티션(Partition) 기능을 제공합니다. 파티션은 실무에서도 MySQL의 부하를 줄이기 위해서(성능 향상) 유용하게 사용되며 적극 권장됩니다. 예시로 유저의 지역(시)나 나이(10대, 20대, 30대) 별로 유저 테이블을 분할하거나, 주문 년도 별로 주문 기록 테이블을 분할하는데 사용할 수 있습니다. * 파티션을 많이 나누는 경우에는 시스템 변수 open_file_limit(동시에 열 수 있는 파일 수의 Max)를 높게 수정해야 합니다. 파티션 형식 MySQL의..

Database/SQL 2020.12.31

MySQL - 전체 텍스트 인덱스

전체 텍스트 인덱스(FULLTEXT Index)란 ? 전체 텍스트 인덱스(FULLTEXT Index)란 텍스트로 구성된 문자열 데이터의 내용을 가지고 생성한 인덱스입니다. 예를 들어, 텍스트로된 자기소개나 신문기사, 레시피, 포털 사이트 데이터 같은 경우에 텍스트 내용의 일부만 가지고 검색을 한다고 가정하면, 일반 인덱스로는 적절하지 않을 것 이고, SELECT할 때 전체 페이지를 전부 검색한다면 시간이 굉장히 오래 걸릴 것입니다. 그래서 MySQL은 전체 텍스트 인덱스를 제공합니다. MySQL에서 전체 텍스트 인덱스와 일반적인 인덱스의 차이점은 아래와 같습니다. InnoDB와 MyISAM 테이블만 지원한다. 자료형이 CHAR, VARCHAR, TEXT인 열에만 생성이 가능하다. 여러개의 열에 FULLT..

Database/SQL 2020.12.31

MySQL - 트리거

트리거 란? 트리거(Trigger)는 사전적 의미로 '방아쇠'라는 뜻입니다. MySQL에서 트리거는 테이블에서 어떤 이벤트가 발생했을 때 자동으로 실행됩니다. 즉, 어떤 테이블에서 특정한 이벤트가 발생했을 때, 실행시키고자 하는 작업들을 자동으로 수행할 수 있게끔 트리거를 미리 설정해 두는 것입니다. 예를 들어 A 테이블의 내용이 삭제 되었을 시에 백업 테이블에 삭제된 내용, 삭제한 사용자, 시간을 기록하게 할 수 있습니다. 직접 실행시킬 수 없고 해당 테이블에 해당 이벤트가 발생할 때 실행된다. 트리거를 사용해서 데이터 무결성을 유지할 수 있다. MySQL에서는 View에 부착할 수 없다. 트리거 형식 DROP TRIGGER IF EXISTS trig1 -- 트리거가 이미 있을 시 삭제 DELIMITE..

Database/SQL 2020.12.29

MySQL - 스토어드 함수

스토어드 함수는? DELIMITER $$ CREATE FUNCTION 스토어드 함수명(파라미터명) RETURNS 반환 자료형 BEGIN .. 프로그래밍 코딩 RETURN 반환값; END $$ DELIMITER ; -- SELECT 스토어드 함수명(); 기본적인 스토어드 함수의 형식입니다. 스토어드 함수는 스토어드 프로시저랑 상당히 유사하며 아래는 차이점입니다. 파라미터에 IN, OUT 등을 사용할 수 없고, 모두 입력 파라미터로 사용된다. RETURNS로 반환할 값의 데이터 형식을 지정해주고, BEGIN에서 하나의 값을 반환해야 한다. 프로시저는 CALL로 호출하고, 스토어드 함수는 SELECT 문장에서 호출한다. 스토어드 함수안에서는 SELECT(조회)할 수 없다. - SELECT INTO는 조회가 아..

Database/SQL 2020.12.29

MySQL - 스토어드 프로시저

스토어드 프로시저란? 스토어드 프로시저(Stored Procedure, 저장 프로시저)는 MySQL이 제공하는 프로그래밍 기능입니다. 테이블처럼 데이터베이스 개체 중의 한 가지이므로, 데이터베이스 내부에 저장됩니다. 주로 어떠한 동작들을 모아서 모듈화 시켜서, 필요할 때마다 호출만 하는 것으로 편리하게 MySQL을 운영할 수 있도록 합니다. MySQL의 성능을 향상시킬 수 있음 - 복잡하게 구현된 긴 코드를 전부 통신하지 않고, 프로시저를 한번 호출하는 SQL문만 통신하면 되기 때문에 네트워크에 부하를 줄일 수 있음 유지관리가 용이함 - SQL문을 직접 작성하지 않고, 프로시저명만 호출하면 되므로 일관된 유지보수를 할 수 있고, 직관적임. 보안이 강화됨 - 사용자에게 테이블의 접근 권한을 주지 않고, 프..

Database/SQL 2020.12.29

MySQL - 인덱스 정리! (클러스터 인덱스, 논 클러스터 인덱스)

인덱스는? 인덱스가 없더라도 데이터베이스를 '작동'하는데는 문제가 없습니다. 하지만 인덱스는 데이터베이스의 성능(속도)를 크게 좌우하는 요소입니다. 데이터베이스가 크면 클 수록, 인덱스가 반드시 필요해질 것입니다. (책이 두꺼울 수록 원하는 내용을 찾기 힘들고, 정렬이나 , 등이 필요해지는 원리) 인덱스를 사용하는 SQL을 만들어 효율적으로 사용한다면 매우 빠른 응답 속도를 얻을 수 있고, 쿼리의 부하가 줄어들기 때문에 시스템 전체 성능이 향상됩니다. 하지만 인덱스는 데이터베이스에 추가적인 공간을 할당해줘야 하고, 잘못 사용할 경우 성능이 오히려 크게 떨어질 수 있습니다. (ex. 변경 작업이 자주 일어나는 경우, 인덱스가 적절하지 않은 경우) 인덱스의 종류 MySQL에서 인덱스의 종류는 두 가지가 있습..

Database/SQL 2020.12.28

MYSQL - UNION / UNION ALL / IN / NOT IN 정리

UNION / UNION ALL UNION은 두 쿼리의 결과를 합치는 것을 말합니다. 이는 열의 개수가 일치하고 각 쌍의 데이터 타입들이 호환되는 두 쿼리에서만 작동합니다. 다음은 예시입니다. SELECT stdName, addr FROM mathClassTBL UNION ALL SELECT stdName, addr FROM engClassTBL; 두 쿼리는 열의 개수가 같아야 하고, 데이터 형식도 각 쌍이 같거나 호환되어야 합니다. 열 이름은 첫 번째 쿼리를 따릅니다. ALL을 붙히면 중복된 열까지 모두 출력되고, ALL을 제거하고 UNION만 사용하면 중복된 열은 제거됩니다. IN / NOT IN IN은 첫 번째 쿼리의 내용 중 두 번째 쿼리에 해당되는 것만 조회하는 구문입니다. SELECT * FR..

Database/SQL 2020.11.25

MySQL - JOIN 정리 (INNER, OUTER, CROSS, SELF JOIN)

조인이란 ? 조인(Join)은 SELECT와 더불어 가장 많이 사용하는 옵션 중 하나이고, 두 개 이상의 테이블을 묶어서 하나의 결과 집합으로 만들어 내는 것입니다. 즉, 서로 다른 테이블에서 데이터를 가져올 때 사용하는 것이 조인(Join)입니다. INNER JOIN(내부 조인) INNER JOIN은 조인 중 가장 많이 사용됩니다. 따라서 보통 JOIN을 얘기할 때는 INNER JOIN을 말하는 것입니다. 예를 들어, 쇼핑몰 사이트에서 사용자가 물건을 구매하기 위해서는 구매 테이블에 물품, 수량 등을 입력할 것이며, 외래키인 ID와 함께 삽입될 것입니다. 물품을 구매하고 배송을 할 때는 그 구매 테이블에 있는 정보 뿐만 아니라 사용자 테이블에 있는 배송 주소, 전화번호 등을 함께 알아야 합니다. 이 때..

Database/SQL 2020.11.25

MySQL - JSON 데이터 사용

JSON 데이터란 ? JSON(JavaScript Object Notation)은 현대의 웹과 모바일 애플리케이션 등과 데이터를 교환하기 위한 개방형 표준 포맷을 말합니다. JSON은 JSP(JavaScript)에서 파생되었지만 특정한 언어에 종속되어 있지 않은 독립적인 데이터 포맷입니다. 대부분의 프로그래밍 언어에서 쉽게 읽고 쓸 수 있고 용량이 작아서 최근에는 XML을 대체해서 데이터 전송에 많이 사용합니다. 즉, 간략히 설명하자면 JSON은 데이터 포맷(형식) 중 하나일 뿐이며, 주로 서버와 클라이언트 간의 교류에서 많이 사용됩니다. JSON 형식 { "id" : "kim0123" , "name" : "suhyeon" , "location" : "LA" "phone_number" : "0101234..

Database/SQL 2020.11.20