SQL 19

[MariaDB] 외래키 생성/삭제 방법

1. foreign key 추가1-1. 테이블과 동시에 생성 예제이름 자동 생성CREATE TABLE comments( comment_id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, post_id INT NOT NULL, -- ... FOREIGN KEY(post_id) REFERENCES post(post_id)) 1-2. 테이블이 이미 있을 때 외래키 추가 예제ALTER TABLE commentsADD CONSTRAINT fk_post_idFOREIGN KEY (post_id) REFERENCES posts(post_id)ON DELETE CASCADE; 1-3. 외래키 삭제 옵션외래키 추가시 삭제 옵션을 지정할 수 있다.- ON DELETE CASCADE부..

SQL/RDBMS 2024.11.30

JDBC vs SQL Mapper vs ORM

JDBC, SQL Mapper, ORM은 모두 데이터베이스와 애플리케이션 간의 상호작용을 위해 사용되는 기술들이지만, 각기 다른 추상화 수준과 개발 방식이 적용됩니다. 간단한 코드 예시와 함께 이 세 가지의 차이점을 비교해보겠습니다. 1. JDBC (Java Database Connectivity)특징직접적인 SQL 사용: JDBC는 SQL 쿼리를 직접 작성하여 데이터베이스와 통신하는 방식입니다.낮은 추상화 수준: 데이터베이스와의 상호작용을 상세하게 제어할 수 있으며, 데이터베이스 특화된 기능을 쉽게 사용할 수 있습니다.장점제어력: 모든 SQL 쿼리와 연결 관리를 세밀하게 제어할 수 있습니다.성능 최적화: 성능에 민감한 작업에서 SQL 쿼리를 최적화하기 쉽습니다.단점반복 코드: 자주 사용하는 코드(예: ..

SQL 2024.09.25

쿼리 실행 속도 확인

1. SQL 실행 계획 확인MySQL에서는 `EXPLAIN` 키워드를 사용하여 쿼리의 실행 계획을 확인할 수 있습니다. 이 명령은 쿼리가 실행될 때 데이터베이스가 어떤 인덱스를 사용하고, 각 단계에서 얼마나 많은 행을 처리할지를 보여줍니다.EXPLAIN {QUERY};이 명령을 실행하면, 테이블 스캔 방식, 사용된 인덱스, 처리된 행 수 등의 정보를 포함한 실행 계획이 출력됩니다.2. 실제 실행 시간 측정쿼리의 실제 실행 시간을 측정하려면, SQL 콘솔 또는 프로그래밍 언어에서 직접 쿼리를 실행하고 SHOW PROFILE를 사용하여 시간을 측정할 수 있습니다.SET profiling = 1; -- 프로파일링 활성화-- 쿼리 실행{QUERY};SHOW PROFILES; -- 모든 실행된 쿼리의 프로파일..

SQL/RDBMS 2024.05.30

서브 쿼리 ORDER BY

문제 ORDER BY에서 ORA-00907: 누락된 우괄호라는 에러가 발생!! 검색 결과 아래와 같은 글을 찾았습니다. 서브쿼리에서는 ORDER BY 를 사용하지 못한다. ORDER BY는 SELECT 절에서 오직 한 개만 올 수 있기 때문에 메인쿼리 마지막 문장에 위치해야 한다. 그런데 LIMIT 1과 함께 사용해도 여전히 에러가 발생했습니다. 수정 방법 예시) - 테이블 생성 -- Table: Students CREATE TABLE Students ( StudentID INT PRIMARY KEY, StudentName VARCHAR(50) ); -- Table: Grades CREATE TABLE Grades ( GradeID INT PRIMARY KEY, StudentID INT, ExamDate..

SQL/RDBMS 2023.10.23

[MongoDB] Database, Collection, Document 개념, 예제

Database, Collection 및 Document는 NoSQL 데이터베이스에서 일반적으로 사용되는 개념이며, 이러한 개념은 관계형 데이터베이스 시스템에서 테이블, 행 및 열과 유사한 역할을 합니다. Database (데이터베이스) 데이터베이스는 데이터의 논리적인 컨테이너입니다. 데이터베이스는 하나 이상의 컬렉션을 포함하며, 관련된 데이터를 논리적으로 그룹화합니다. 각 데이터베이스는 고유한 이름을 가지며, MongoDB에서는 이를 "DB"라는 명령어로 생성하고 선택합니다. 예를 들어, 여러 종류의 데이터를 저장하기 위해 "사용자", "제품" 및 "주문"과 같은 여러 데이터베이스를 만들 수 있습니다. // 데이터베이스 생성 use mydatabase // 현재 사용 중인 데이터베이스 확인 db // ..

SQL/NoSQL 2023.09.06

RDBMS NoSQL 비교 (CRUD 예시)

Databse, DBMS, SQL 개념 - Databse 컴퓨터 시스템에 전자 방식으로 저장된 구조화된 정보 또는 데이터의 체계적인 집합을 의미합니다. - DBMS (DataBase Management System) 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해 주고 데이터베이스를 관리해 주는 소프트웨어입니다. - SQL (Strucured Query Language) 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이며 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었습니다. RDBMS와 NoSQL - RDBMS (Relational Database ..

SQL/NoSQL 2023.09.06

[MongoDB] 설치 (Tool 사용법)

- 설치 방법 1. 사이트 접속 https://www.mongodb.com/ MongoDB: 애플리케이션 데이터 플랫폼 업계 최고의 최신 데이터베이스를 토대로 구축된 애플리케이션 데이터 플랫폼을 사용해 아이디어를 더욱 빠르게 실현하세요. MongoDB는 데이터를 손쉽게 처리할 수 있도록 지원합니다. www.mongodb.com 2. 다운로드 product > Community Sever (무료 버전) msi (설치파일) 다운로드 3. msi 설치 파일 실행 installer에서 다른건 다 next 하고 custom에서 설치 경로만 D드라이브로 바꿔줌. *여기서 mongo compass라고 MongoDB GUI Client도 같이 설치하는데 이게 거의 한 시간이 걸려서 필요없으면 체크해제. 나중에 따로 설..

SQL/NoSQL 2023.09.05

[MariaDB] RECURSIVE 계층 메뉴 구성

- 목적 MENU 테이블에 저장되어 있는 메뉴를 MENULEVEL과 PARENTMENUID를 이용하여 순서대로 들고온다. - 문제 현재 4단계 계층만 표현 -> 단계제약을 없애고 싶음. MENUID와 PARENTMENUID가 같을 때 무한루프 CONCAT이 잘림 WITH RECURSIVE CTE AS ( SELECT PROJECTID, MENUID, MENUTYPE, PARENTMENUID, MENULEVEL, POSITION, POSITION AS X FROM MENU WHERE PARENTMENUID = 'root' AND PROJECTID = #{projectId} UNION ALL SELECT B.PROJECTID, B.MENUID, B.PARENTMENUID, B.MENULEVEL, B.POSI..

SQL/RDBMS 2023.08.14

[MariaDB] 중복 파일명 처리(이름 뒤에 seq 붙이기)

가장 간단하게는 파일명이 중복되지 않을 때 까지 반복문을 사용하여 확인 할 수 있다. 예시 코드입니다. //java String orgName = fileObj.getFileName(); String newName = NewNameService.getNewName(fileObj); int idx = 1; while(newName != null){ fileObj.setFileName(orgName + "(" + (idx+1).toString() + ")"); newName = NewNameService.getNewName(fileObj); } 하지만 저는 아래와 같은 생각 때문에 쿼리한번으로 처리 하고자 했습니다. 1. 성능: 반복문을 사용하는 경우: 각각의 fileName를 가져와서 (idx)를 붙여서 ..

SQL/RDBMS 2023.07.03