본문 바로가기
728x90
반응형

database/mysql11

[MySQL] JAVA에서 INET_ATON, INET_NTOA 함수 사용 INET 함수는 ip를 정수로, 정수를 ip로 변환하는 함수입니다.자바에서 hibernate를 사용하게 되면 SQL을 직접 사용하지 않기 때문에, 자바에서 INET 함수를 사용하는 방법을 알아보겠습니다. INET_ATONIP 주소의 숫자 값을 반환합니다.IPv4 네트워크 주소가 점으로 구분된 쿼드 문자열로 표현될 때, 네트워크 바이트 순서(big endian)로 주소의 숫자 값을 나타내는 정수를 반환합니다. INET_ATON()은 인수를 이해하지 못하거나 expr이 NULL인 경우 NULL을 반환합니다.mysql> SELECT INET_ATON('10.0.5.9'); -> 167773449이 예제에서 반환 값은 (10×256)^3 + (0×256)^2 + 5×256 + 9로 계산됩니다.자바 .. 2023. 9. 6.
[MySQL] int(n)와 zerofill, varchar(n)와 sql_mode MySQL에서 VARCHAR는 문자열 타입 중 하나로 가변 길이의 문자열을 저장합니다. 필요한 만큼만 공간을 사용하기에 고정 길이 타입보다 저장 공간을 적게 사용하기도 합니다. VARCHAR의 default 크기는 255입니다. VARCHAR(255) 예를 들어 데이터 타입이 VARCHAR(4)인 컬럼에는 4byte까지만 데이터를 저장할 수 있습니다. 정수 타입 중 INT의 범위는 ~2147483648 ~ 2147483647 (signed), 0 ~ 4294967295 (unsigned) 인데, 처음에는 INT(N)에서 N에 들어가는 값이 VARCHAR처럼 길이인 줄 알았습니다. 그래서 두 자리 숫자를 저장하기 위해 INT(2)로 타입을 지정했는데, INT 범위의 숫자는 다 저장이 되었습니다. mysql.. 2022. 1. 10.
[MySQL] UTC PST PDT KST와 datetime vs timestamp UTC : 협정 세계시 Coordinated Universal Time/Universal Time Coordinated 국제 표준시. UTC는 그리니치 평균시(GMT)에 기반하므로 GMT로도 불리기도 하는데, UTC와 GMT는 초의 소수점 단위에서만 차이가 나기 때문에 일상에서는 혼용된다. 기술적인 표기에서는 UTC가 사용된다. PST : 태평양 표준시 Pacific Standard Time UTC-8:00 북미에서 관찰되는 시간대 중 하나로 PDT는 이 시간대의 변형이다. PDT : 태평양 일광 절약 시간 Pacific Daylight Time UTC-7:00 서머타임이 포함된다. KST : 한국 표준시 Korea Standard Time UTC+9:00 Mysql의 Time Zone을 확인해보겠습니다.. 2021. 12. 16.
[MySQL] User Level Lock (GET_LOCK, RELEASE_LOCK) MySQL에서 GET_LOCK과 RELEASE_LOCK으로 분산 락을 구현할 수 있습니다. GET_LOCK(str, timeout) Get a named lock 문자열 str에 해당하는 Lock을 획득하는 메소드 · return 1 - Lock 획득 성공 · return 0 - timeout 동안 Lock 획득 못한 경우 · return null - 에러 발생 IS_FREE_LOCK(str) Whether the named lock is free 문자열 str을 사용할 수 있는 상태인지 체크 · return 1 - Lock이 비어있는 경우 · return 0 - Lock이 비어있지 않은 경우 IS_USED_LOCK(str) Whether the named lock is in use; return con.. 2021. 11. 5.
[MySQL] 카디널리티 cardinality 카디널리티(Cardinality)를 간단하게 말하자면 해당 컬럼의 중복된 수치인데, ​ 중복도가 낮으면 카디널리티가 높다고 표현하고, 중복도가 높으면 카디널리티가 낮다고 표현합니다. ​ 예를 들어, 성별, 학년은 카디널리티가 낮고 주민번호, 계좌번호는 카디널리티가 높습니다. 주민번호와 계좌번호를 비교한다면 주민번호는 중복된 값이 없기 때문에 계좌번호는 주민번호에 비해 카디널리티가 낮다고 할 수 있습니다.(상대적) ​ ​ 여러 컬럼을 인덱스로 생성할 경우, 카디널리티가 높은 순에서 낮은 순으로 구성하는 것이 좋습니다. 예) CREATE INDEX 인덱스명 ON 테이블명(주민번호, 계좌번호, 학년, 성별); ​ 카디널리티가 높은 순으로 필터링하여 조회하기 때문입니다. ​ ​ MySQL에서 SHOW INDEX.. 2020. 11. 1.
[MySQL] Query 성능 확인 1. Explain : 쿼리 명령문을 어떻게 수행할 것인지 실행 계획에 대한 정보 2. Profiling : 현재 세션 과정 동안 실행 문에 대한 리소스 정보 3. Optimizer_trace : 실제 실행 시 바람직한 비용 기반으로 계획을 선택한 과정 정보 ​ ​Explain 쿼리 실행 플랜 정보를 optimizer에서 가져와서 출력. EXPLAIN SELECT Query; ​ ID 실행계획의 순서. 이 순서대로 select 문이 실행. select_type select 문의 유형 SIMPLE : 단순 select문 PRIMARY : 첫번째 쿼리 DERIVED : select문으로 추출된 테이블 ( from 절에서의 서브쿼리 또는 inline view) SUBQUERY : sub query 중 첫번째 .. 2020. 11. 1.
[MySQL] 특정 필드 ,(콤마)로 나열하여 조회하기 : GROUP_CONCAT SER_ROLE 테이블이 아래와 같은 데이터를 가지고있을때, emp_id role type moonsiri ROLE_USER A moonsiri ROLE_USER B moonsiri ROLE_USER C ... ... ... ​ 다음과 같은 결과 값을 구하려고 합니다. emp_id role type moonsiri ROLE_USER A, B, C ​ 이러한 경우, GROUP_CONCAT을 사용하면 위와같은 결과 값을 구할 수 있습니다. SELECT emp_id, role, GROUP_CONCAT(type) FROM user_role WHERE emp_id = 'moonsiri' AND role = 'ROLE_USER'; 2020. 11. 1.
[MySQL] insert ... on duplicate key update (upsert) INSERT ... ON DUPLICATE KEY UPDATE Statement ​insert 하려는 값이 존재하면 update 하는 쿼리입니다. ​ user라는 테이블에 insert를 하려고합니다. INSESRT INTO user (id, name, age) VALUES ('user1', '홍길동', 20); 그런데 이미 'user1'이 존재한다면 에러가 날것입니다. 여기서 'user1'에 새 값으로 수정 하고싶으면, update를 해야합니다. UPDATE user SET name='홍길동', age=20 WHERE id='user1'; 개발을 하다보면 데이터가 존재하는지 체크하고 없으면 insert하고 있으면 update하는 기능을 구현할때가 종종 있을것입니다. 그럴때 사용하는 것이 INSERT .... 2020. 11. 1.
[MySQL] 월별 Partition Table 생성, 수정, 삭제 MySQL에서 지원되는 Partition은 Range, List, Hash, Key의 4가지인데, 여기선 Range를 사용하겠습니다. ​ 통계 데이터나 로그 데이터처럼 데이터량이 많을 경우, 파티션 키 위주로 조회를 자주 하거나 대량의 과거 데이터를 삭제 시 사용합니다. ​ ​ 로그 테이블을 하나 생성하겠습니다. reg_ymdt 컬럼을 사용할 예정인데, Partition RANGE로 사용하려면 해당 테이블에 PK가 지정되어있지 않거나 PK가 지정되어있다면 reg_ymdt 컬럼이 PK로 등록되어야 합니다. 그리고 파티션 range key로 사용할 컬럼은 int 값 이어야 하는데, 날짜로 분리하기 위해 timestamp를 사용하겠습니다. CREATE TABLE audit_log ( id BIGINT(20) .. 2020. 10. 31.
[MyBatis] foreach로 배열 파라미터 삽입 IN으로 항목을 SELECT 해야 할 때 사용하는 방법입니다. SELECT * FROM table where id IN (${list_data}) 위 같은 실수를 하지 않길 바랍니다. 아래 코드처럼 foreach문을 사용하면 보안을 유지할 수 있습니다. SELECT * FROM table where id IN #{map} String[] array; SELECT * FROM table where id IN #{map[i]} ArrayList list = new ArrayList(); SELECT * FROM table id = #{map} 만약, ### Error querying database. Cause: java.sql.SQLException: ORA-56900: 바인드 변수는 피벗|피벗 해제 작업.. 2020. 10. 31.
728x90
반응형