일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- db
- Gradle
- jsp
- devops
- jenkins
- elasticsearch
- php
- linux
- Web Server
- java
- springboot
- javascript
- Spring
- ReactJS
- 맛집
- MySQL
- tool
- IntelliJ
- Oracle
- Spring Boot
- JPA
- ubuntu
- it
- docker
- Git
- laravel
- redis
- Design Patterns
- 요리
- AWS
- Today
- Total
목록MySQL (23)
아무거나
UPDATE ~ SELECT: JOIN을 통하여 조건에 맞게 SELECT 한 후 UPDATE 실행 Desc - 1번 코드는 조건에 맞게 SELECT 한 후 UPDATE를 시킨것이다. - 2번 코드는 1번에서 b에서 null경우에 update가 되지 않을 때, 이러한 경우에 LEFT JOIN을 걸어주는 예제이다. Example Query1 UPDATE table1 a, ( SELECT column1, column2 FROM table2 WHERE column1 = 1 ) b SET a.column1 = b.column2 a.column2 = b.column2 WHERE a.column1 = 111 Example Query2 UPDATE table1 a, LEFT JOIN ( SELECT column1, c..
동일한 조건으로 update시에 처음 실행만 반영되고 그 다음부터는 반영이 안되는 현상 작업 중 다량의 데이터를 Update 쿼리를 실행할 과정이 필요하였습니다. 한번의 많은 양의 데이터를 Update 한다면 DB의 커넥션이 끊어진다거나. 메모리 이슈가 생겨 증분으로 업데이트 시도하였습니다. 코드는 아래와 같습니다. [method] int changeCntSum = 0; // 업데이트된 데이터의 총 개수 while (true) { int changCnt = 0; // 업데이트된 데이터 개수 changeCnt = updateMapper.updateData(...매개변수..); changeCntSum += changeCnt; // 업데이트할 데이터의 개수가 없을 때 while문 break if (change..
BINARY: 데이터 조회 시 대소문자 구분(VARCHAR 기준) // AS-IS (대소문자 구분 안하는 조회) SELECT * FROM test_table WHERE searchField = 'test'; // TO-BE (대소문자 구분 조회) SELECT * FROM test_table WHERE searchField = BINARY('test');
UPDATE ~ CASE 문: 한번의 UPDATE로 여러 작업을 할 수 있다. Desc - WHEN과 THEN은 하나의 조건이다. - WHEN과 THEN은 다수가 존재할 수 있습니다. - ELSE는 모든 조건에 부합하지 않을경우가 조건이다. Example Query 아래 그림과 같은 데이터를 기준으로 쿼리를 날려봅니다. UPDATE recursive_test_table SET parent_id = CASE WHEN parent_id = 1 THEN 10 WHEN parent_id = 2 THEN 20 WHEN parent_id = 3 THEN 30 WHEN parent_id = 6 THEN 60 ELSE parent_id END; 위의 3 Line을 예로 들면 parent_id가 1일 때 10으로 변경하..
비트연산자 비트 연산자는 논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 수행합니다. 또한, 비트 단위로 전체 비트를 좌측이나 우측으로 이동시킬 때도 사용합니다. (연산자 우선순위대로 나열 &가 우선순위 1등) & (AND 연산): 대응되는 비트가 모두 1이면 1을 반환함. | (OR 연산): 대응되는 비트 중에서 하나라도 1이면 1을 반환함. ^ (XOR 연산): 대응되는 비트가 서로 다르면 1을 반환함. ~ (NOT 연산): 비트를 1이면 0으로, 0이면 1로 반전시킴. (Right Shift 연산): 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. [Example] MySql에서 제공하는 필드의 수는 제한이 있고 필드가 너무 많아지면 관리비용이 늘어납니다. 또한 특정 ..
삭제(DELETE) 하나의 쿼리로 여러 테이블의 데이터 삭제 Table Schema(Table Name: example_table) [user] [user_role] Example Code // user테이블의 user_id와 user_role의 user_id를 조인하여 삭제하자 DELETE u, ur FROM user AS u INNER JOIN user_role AS ur ON u.user_id = ur.user_id WHERE u.user_id = #{userId}
GROUP BY로 GROUPING한 필드말고 중복이 안되는 문자열들을 가진 필드의 문자열들을 합칠땐 GROUP_CONCAT을 사용 Table Schema(Table Name: example_table) Table Sample Data SELECT * FROM test_example; 콤마를 구분자로 한 결과값으로 합쳐져있는 문자열 도출(group_concat 기본 구분자는 콤마) SELECT name, GROUP_CONCAT(value) FROM test_example GROUP BY name; 임의의 구분자로 한 결과값으로 합쳐져있는 문자열 도출 SELECT name, GROUP_CONCAT(value SEPARATOR '|') FROM test_example GROUP BY name; 임의의 구분자로..
GROUPING을 하면서 다른 필드의 종류별 개수와 또 다른 필드의 숫자값을 모두 더한 값의 리스트를 도출하는 쿼리 Table Schema(Table Name: example_table) Table Sample Data SELECT * FROM example_table WHERE brand = '4엑스알'; brand 필드 기준으로 해당 필드를 grouping 하면서 mall_id의 count와 require_cnt의 값을 더한 총 count의 리스트를 구한다. SELECT wbmr.brand, wbmr.mall_cnt, wbmr.require_total_cnt FROM ( SELECT brand, COUNT(mall_id) AS mall_cnt , SUM(require_cnt) AS require_to..
hierarchy 구조에서 recursive 쿼리의 사용 Desc hierarchy: 계층 recursive: 재귀 Example hierarchy 구조의 샘플 데이터 생성 CREATE TABLE recursive_test_table ( id INTEGER NOT NULL, name VARCHAR(128) NULL, parent_id INTEGER NULL, CONSTRAINT pk_recursive PRIMARY KEY (id) ); INSERT INTO recursive_test_table (id, name, parent_id) VALUES (1, '봉근', NULL); INSERT INTO recursive_test_table (id, name, parent_id) VALUES (2, '봉근 A',..
UPSERT(INSERT ON DUPLICATE KEY UPDATE): 동일한 key값이 존재한다면 UPDATE를 하고 존재하지 않는다면 INSERT를 한다. (단, INSERT 구문이므로 AUTO_INCREMENT 값은 증가한다) Table Sample Data Example Code // UNIQUE 값: login_id // login_id인 jbk값이 존재하므로 아래 코드는 update가 실행된다. INSERT INTO user (active, login_id, user_name, `password`) VALUES (3, 'jbk', 'insert_name', 'insert_$2a$10$2Rbln4H8JGnnQnqKwvNBEAlX6') ON DUPLICATE KEY UPDATE active=4, ..