일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- JPQL
- 이진탐색
- 일대다
- execute
- 비관적락
- 다대일
- 연관관계
- 즉시로딩
- PS
- 데코레이터
- FetchType
- dfs
- 스프링 폼
- 동적sql
- BOJ
- exclusive lock
- querydsl
- 힙
- eager
- 백트래킹
- shared lock
- 지연로딩
- 유니크제약조건
- 연결리스트
- 스토어드 프로시저
- 낙관적락
- CHECK OPTION
- fetch
- SQL프로그래밍
- 다대다
- Today
- Total
목록All (557)
흰 스타렉스에서 내가 내리지
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ssTyR/btsGznsM1Iy/gGprKqiqOrxt2JK3hN7ork/img.png)
# 스토어드 프로시저 DELIMITER $$ CREATE PROCEDURE myProcedure() BEGIN END $$ DELIMITER ; CALL myProcedure(); 세미콜론 (;) 으로는 SQL 의 끝인지, 스토어드 프로시저의 끝인지 구별할 수 없어서 $$ 를 사용한다. * 스토어드 프로시저 매개변수 # 1. IN - 프로시저에 값을 전달한다. DELIMITER $$ CREATE PROCEDURE myProc(IN name VARCHAR(255)) BEGIN SELECT * FROM Member m WHERE m.name = name; END $$ DELIMITER ; -- CALL myProc('홍길동'); # 2. OUT - 프로시저의 값을 반환한다. - 초기값은 프로시저 내에서 NU..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bqhfrC/btsGwz87B2o/SXP8bM54C1n4TlKzYxSbQ1/img.png)
https://school.programmers.co.kr/learn/courses/30/lessons/42576 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.completion의 길이는 participant의 길이보다 1 작습니다.참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.참가자 중에는 동명이인이 있을 수..
# 고아 객체 JPA 는 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하는 기능을 제공하는데, 이것을 고아 객체 제거라 한다. @OneToMany(mappedBy = "parent", orphanRemoval = true) private List children = new ArrayList(); 이제 컬렉션에서 제거한 엔티티는 자동으로 삭제된다. parent.getChildren().remove(0);// 자식 엔티티를 컬렉션에서 제거 DELETE FROM CHILD WHERE ID = ? orphanRemoval = true 옵션으로 인해 컬렉션에서 엔티티를 제거하면 데이터베이스의 데이터도 삭제된다. * 정리 고아 객체 제거는 참조가 제거된 엔티티는 다른 곳에서 참조하지 않는 고아 객체로..
# 내부 조인 두 테이블에 모두 있는 내용만 조인되는 방식이다. 만약, 양쪽 중에 한 곳이라도 내용이 있을 때 조인하려면 외부 조인을 사용해야 한다. SELECT * FROM member m INNER JOIN article a ON m.id = a.mem_id WHERE a.title='~~' INNER JOIN 에서 INNER 를 생략하고 JOIN 만 써도 INNER JOIN 으로 인식한다. # 외부 조인 한 쪽에만 데이터가 있어도 결과가 나온다. SELECT FROM OUTER JOIN ON [WHERE 검색 조건]; LEFT OUTER JOIN 왼쪽 테이블의 내용이 모두 출력된다. LEFT JOIN 이라고 써도 된다. RIGHT OUTER JOIN 오른쪾 테이블의 내용이 모두 출력된다. FULL ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dzub3I/btsGwQBUWoq/S8YlF24dT5TqDK5Ekqyxv1/img.png)
# 함수를 이용한 명시적인 변환 (explicit conversion) 데이터 형식을 변환하는 함수는 CAST(), CONVERT() 이다. CAST ( 값 AS 데이터_형식 [ (길이) ] ) --- CONVERT ( 값, 데이터_형식 [ (길이) ] ) CAST() 나 CONVERT() 함수 안에 올 수 있는 데이터 형식은 CHAR, SIGNED, UNSIGNED, DATE, TIME, DATETIME 등이다. SIGNED 는 부호가 있는 정수, UNSIGNED 는 부호가 없는 정수이다. * 예제 SELECT AVG(price) AS '평균 가격' FROM buy; 가격을 실수보다는 정수로 보고 싶을 때, 데이터 형 변환을 사용한다. SELECT CAST(AVG(price) AS SIGNED) '평균..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b3cL2u/btsGwDprENi/EtC02cVcQnsKTFxqRkWeTk/img.png)
# SQL 에서의 변수 SQL 도 다른 일반적인 프로그래밍 언어처럼 변수를 선언하고 사용할 수 있다. 변수는 MySQL 워크벤치를 재시작할 때까지는 유지되만, 종료하면 없어진다. SET @txt = '도시 이름 : '; SET @population = 8000000; SELECT @txt, Name, Population FROM city WHERE Population >= @population; # LIMIT 에는 사용할 수 없다 이 SQL 은 SELECT 문에서 오류가 발생한다. LIMIT 에는 변수를 사용할 수 없기 때문이다. # LIMIT 에 변수를 사용할 수 있게 하는 편법 → PREPARE 와 EXECUTE SET @txt = '도시 이름 : '; SET @population = 8000000;..
만약 몇억 거느이 데이터가 있는 대용량의 테이블이 더 이상 필요 없다면 어떻게 삭제하는 것이 좋을까? 1. DELETE - 삭제가 오래 걸린다. 2. DROP - 테이블 자체가 삭제된다. - 따라서 순식간에 모두 삭제된다. 3. TRUNCATE - DELETE 와 동일한 효과를 내지만 속도가 매우 빠르다. DROP 은 테이블이 아예 없어지지만, DELETE 와 TRUNCATE 는 빈 테이블을 남긴다. TRUNCATE 는 DELETE 와 달리 WHERE 문을 사용할 수 없다. 그러므로 TRUNCATE 는 조건 없이 전체 행을 삭제할 때만 사용된다. # 결론 대용량 테이블의 전체 내용을 삭제할 때 테이블 자체가 필요 없을 경우에는 DROP 으로 삭제하고, 테이블의 구조는 남겨놓고 싶다면 TRUNCATE 로 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cSjuLx/btsGuZzKcw5/HaBJK7DhOLlikfLDt7xKVk/img.png)
예제 테이블로, MySQL 에서 제공하는 world 데이터베이스를 이용한다. CREATE TABLE city_popul (city_name CHAR(35), population INT); INSERT INTO city_popul SELECT Name, Population FROM world.city; 주의할 점은 SELECT 문의 열의 개수가 INSERT 할 테이블의 열 개수와 같아야 한다는 점이다. DESC 명령으로 테이블 구조를 확인하여 새로운 테이블을 만든다
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dtkPHG/btsGuq5DTn9/SOkN2nZ1ZCOijdI6tv9NKk/img.png)
# 자동으로 증가하는 AUTO_INCREMENT AUTO_INCREMENT 는 열을 정의할 때 1부터 증가하는 값을 입력해준다. 단, AUTO_INCREMENT 로 지정하는 열은 꼭 PRIMARY KEY 로 지정해줘야 한다. CREATE TABLE member ( member_id INT AUTO_INCREMENT PRIMARY KEY ); # AUTO_INCREMENT 로 입력되는 다음 값을 100 부터 시작하게 하기 ALTER TABLE MEMBER AUTO_INCREMENT=100; INSERT INTO member VALUES (NULL); SELECT * FROM member; # AUTO_INCREMENT 로 입력되는 다음 값을 1003, 1006, 1009, ... 로 3씩 증가하도록 설정하..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/lNVrs/btsGtUSjVoB/GpwNMKw9UWPsahdbmM2fC1/img.png)
# 프록시 # 1 Member member = memberRepository.findById(1L).or(...); System.out.println(member.getTeam()); # 2 Member member = memberRepository.findById(1L).or(...); System.out.println(member.getUsername()); # 1 에서는, 회원은 물론이고, 회원과 연관된 팀의 이름도 출력한다. # 2 에서는, 회원 엔티티만 사용하고 팀 엔티티는 전혀 사용하지 않는다. # 2에서 회원 엔티티만 사용하므로, 그와 연관된 팀 엔티티까지 DB 에서 함께 조회해 두는 것은 비효율적이다. JPA 는 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공하는데, 이것을 지..