본문 바로가기
반응형

Back-End/Database14

재귀적 CTE(Common Table Expression) SQL 에서 반복적인 계산을 수행하거나 계층적 데이터를 쉽게 처리할 수 있도록 도와주는 기능이다.임시 결과 집합을 정의하는데, 재귀적 CTE는 자기 자신을 참조하여 반복적으로 확장할 수 있다. 수많은 테스트 더미 데이터를 추가할 때 효과적이다. 앵커 멤버: 재귀가 시작되는 기본 쿼리재귀 멤버: 앵커 멤버의 결과를 바탕으로 반복적으로 실행되는 쿼리WITH RECURSIVE cte_name AS ( -- 앵커 멤버 SELECT ... UNION ALL -- 재귀 멤버 SELECT ... FROM cte_name WHERE ...)SELECT * FROM cte_name; 예시로 유저 데이터를 10,000 개 삽입하는 쿼리를 재귀적 CTE 로 구현cte_max_resurs.. 2024. 8. 1.
Transaction ≣ 목차트랜잭션을 잘게 나누면 보정배치가 쉬워지고 트랜잭션이 왜 실패했는지 추적할 수 있다.충돌 횟수를 고려하여 락 종류를 선택한다.자기 자신만 접근하는 로직일 경우 충돌이 적을 확률이 높아진다.트랜잭션 작은 단위로 나눌 시, Manager (application 계층) 추가 또는 service 에서 필요한 repository 를 DI 받아서 하나의 메서드에서 처리한다.만약 연관 관계가 맺어져있다면?reservation.getUser().usePoint(amount)exception 이후에 코드가 실행되지 않는지 체크하고 테스트 할 필요성이 있다.트랜잭션 사용 논리적 흐름구분해서 고려할 필요가 있다.실제 비즈니스 기반의 로직시스템 입장에서의 로직동시성 제어트랜잭션공유락, 배타락 = 트랜잭션 동시성 제어 .. 2024. 7. 23.
MySQL root 계정 비밀번호 재설정 MySQL 서버 중지sudo launchctl unload -F /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plistHomebrew 를 통해 설치한 경우brew services stop mysql MySQL 서버를 안전 모드로 시작인증을 무시하고 안전 모드로 시작하면 비밀번호를 요구하지 않는다.sudo mysqld_safe --skip-grant-tablesERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)접속되어있지 않은 경우 MySQL 접속brew services listbrew services start mysql안전 모드로 접속 성공my.. 2024. 7. 9.
MySQL - Workbench, DB 종류 💡 MySQL Workbench 실행하기 ◾ 한글 데이터 저장을 위해 기본 character set 을 utf8로 설정한다. 💡 HeidiSQL 설치 https://www.heidisql.com/download.php#google_vignette Download HeidiSQL Ads were blocked - no problem. But keep in mind that developing HeidiSQL, user support and hosting takes time and money. You may want to send a donation instead. Download HeidiSQL 12.0, released on 12 Apr 2022 Please disable your adblocker an.. 2022. 7. 19.
MySQL - 실습문제 📃 회원 테이블 추가하기 앨리스 가게에서는 회원가입을 통해 구매한 가격만큼 마일리지 혜택을 주려고 합니다. 이를 위해 customer 테이블을 만들고자 합니다. 지시사항에 맞추어 customer 테이블을 완성하세요. 💬 지시사항 ◾ 고객의 정보는 (1, 'Elice', '2010-01-15', 100) (2, 'Cheshire', '2005-03-10', 100) (3, 'Dodo', '2010-04-30', 100) ◾ customer 테이블의 모든 컬럼을 출력할 것 create table customer( id int, -- id -- name varchar(10), -- 이름 -- birthday date, -- 생일 -- mileage int -- 마일리지 -- ); insert into cust.. 2022. 7. 18.
MySQL - group by, having, join 💡 group by 문 -- rental 테이블로부터 user_id별로 user_id를 조회한다. -- select user_id from rental group by user_id; -- user_id별로 개수 세기 -- select user_id, count(*) from rental group by user_id; 💡 having 조건문 select user_id, count(*) from rental group by user_id having count(user_id) > 1; select user_id, count(*) from rental group by user_id having count(user_id) < 1; select user_id, count(*) from rental group .. 2022. 7. 18.
MySQL - 사용자 생성 및 권한 부여 💡 사용자 생성 및 권한 부여 use mysql; -- mysql 데이터베이스 접속 -- show tables; -- 테이블 목록 확인 -- select host, user from user; -- user 테이블로부터 host, user를 조회한다. -- create user day18; -- 사용자 day18을 생성한다. -- select host, user from user; -- user테이블로부터 host, user를 조회한다. -- create user 'day18'@'localhost' identified by '1234'; -- day18 계정에 '1234' 비밀번호를 생성한다. -- grant all privileges on *.* to 'day18'@'localhost'; -- day1.. 2022. 7. 18.
MySQL - JAVA, DB 연결하기 자바파일 - lib - 붙여넣기 mysql을 실행시켜놓고 데이터베이스 연결하기. 컴파일, 실행! import java.sql.*; public class JDBCExampleToMysql { public static void main(String[] args) { if(args.length < 1) { System.err.println("Usage : "); System.err.println("java JDBCExample "); System.exit(1); } String serverName = args[0]; try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://" + serverName + ":3306/sample"; Co.. 2022. 7. 15.
MySQL - food 데이터베이스 만들기 📃 food 데이터베이스를 만들어보자 과자 제품 번호, 이름, 가격, 생산일, 유통기한, 회사, 맛, 칼로리 1. '20302849', '홈런볼', 1700, '2022-07-10', '2023-01-03, '해태', '초코', 270 2. '21904322', '매운 새우깡', 1200, '2022-04-01', '2022-11-14', '농심', '양념', 450 3. '21483229', '포카칩 어니언', 1500, '2022-04-27', '2022-11-25', '농심, '감자', 377 4. '22958228', '빼빼로 오리지널', 1500, '2022-05-12', '2022-12-02', '롯데', '초코', 225 5. '20132245', '에이스', 1000, '2021-02-02.. 2022. 7. 15.
728x90
반응형