Database/RDBMS
[Mysql] 위도 경도 반경 구하기
1. 개요 지도에 관한 로직을 짤때 latitude, longitude 위도 경도 값을 구해서 radius, 위도 경도 값 기준으로 주변 5km, 10km의 위도 경도 리스트 또는 거리를 알고 싶을 때가 있습니다. 이러한 로직을 mysql에서 구현할 수 있을까 해서 찾아봤는데 stack over flow에서 친절하게도 작성된 sql이 있더군요. https://stackoverflow.com/questions/8850336/radius-of-40-kilometers-using-latitude-and-longitude Radius of 40 kilometers using latitude and longitude Possible Duplicate: Radius of multiple latitude/longit..
Maria DB cent os home 경로에 설치하기
현재 /home/database/mariadb 라는 절대 경로에 mariadb 10.3을 설치를 한다는 것을 배경으로 정리한다. 만약 yum 패키지를 이용해 mariadb를 설치했다면 아래 명령어를 따라 관련된 파일을 전부 삭제해준다. yum remove mariadb* mariadb-server rm -rf /etc/my.cnf rm -rf /var/log/mysql rm -rf /var/lib/mysql 해당 경로로 들어가서 mariadb, mysql과 비슷한 느낌의 파일이 있다면 전부 삭제해준다. 1. maria db tar gz 다운 받기 wget -O mariadb.tar.gz https://downloads.mariadb.com/MariaDB/mariadb-10.3.30/bintar-linux..
[MySQL] 파티셔닝 자동화 프로시저 코드
MySQL 데이터베이스 테이블을 파티셔닝 할 일이 생겨서 프로시저로 작성하고, 이벤트 스케쥴러를 통해 매일 매일 실행시키는 것으로 자동화를 진행해보았습니다. 완전한 자동화이긴한데 처음에 설정을 해주어야 하는 것이 있습니다. 프로시저 동작 조건 1. 파티셔닝할 테이블에서 PK를 DateTime 컬럼으로 설정해주어야 합니다.(추가적인 PK가 있어도 무관) 즉, 날짜를 기준으로 Range 파티셔닝을 진행하니 날짜 컬럼이 있어야 합니다. 2. 그리고 프로시저를 동작시키기 전에 pFuture라는 파티션이 있어야 합니다. ALTER TABLE `His_Ai` PARTITION BY RANGE( to_days(his_time)) ( PARTITION pFuture VALUES LESS THAN MAXVALUE ); ..
[MySQL] 파티셔닝 개념 및 사용법
MySQL 데이터베이스 파티셔닝 1. 개념 논리적인 데이터 element들을 다수의 entity로 쪼개는 행위이며, 큰 테이블이나 인덱스를 관리하기 쉬운 Partition이라는 작은 단위로 물리적으로 분할하는 것을 말합니다. 2. 성능 특정 DML과 Query의 성능을 향상시키고, 주로 데이터가 실시간으로 쌓이는 데이터베이스 환경에서 효율적이다. 특히 Full Scan에서 데이터의 접근 범위를 줄여 성능 향상을 가져올 수 있습니다. 물리적인 파티셔닝으로 인해 전체 데이터의 훼손 가능성이 줄어들며, 각 파티션 별로 독립적으로 백업하고 복구할 수 있습니다. 다만, 테이블 간 Join이 일어날 경우 비용이 증가하며 테이블과 인덱스를 별도로 파티셔닝 할 수는 없습니다. 3. 종류 기본적으로 파티셔닝은 수평 분할..
[오류해결] MySQL Read Only Table
오랜만에 MySQL을 만지게되면 가벼운 오류들이 발생하곤 하는데... 테이블을 생성하고 데이터를 수동으로 넣어서 확인하려고 하니 Read Only라는 느낌표가 떠있는 것을 확인할 수 있습니다. 이때 테이블에 PK가 한 개도 없기 때문에 발생하는 오류로 아래와 같이 적당하게 idx로 PK를 설정해주면 오류가 해결됩니다! *Tip: Index라는 이름은 컬럼으로 사용하지 마세요!
[오류해결] MariaDB errno: 150 "Foreign key constraint is incorrectly formed"
MariaDB에 외래키를 적용하다가 errno: 150 "Foreign key constraint is incorrectly formed" 이러한 오류가 날 경우가 있습니다. 오류가 나는 이유는 외래키와 메인키 컬럼의 설정이 제대로 일치하지 않아서 나는 경우입니다. 이때 확인해야 할 순서입니다. 1) 순서 1. 데이터에 타입이 같은지? 메인키가 INT면 외래키도 INT여야 합니다. 2. 메인키와 외래키 모두 NOT NULL 체크가 되어 있는지? 3. 참조하는 키(Reference Key)가 메인키 혹은 유니크 키로 되어 있는지? 여기까지하고 안되는 경우엔 문법이 틀리거나 올바르지 않은 테이블의 컬럼을 바라보는 경우가 많습니다! 2) 결과 LoadType을 정의한 LoadType이라는 테이블과 LoadTy..
[MySQL] jdbc Insert AutoIncrement 값 가져오기
[MySQL] jdbc Insert AutoIncrement 자동증가 값 가져오기 MySQL 데이터베이스에 jdbc를 이용해서 Insert하는 쿼리를 작성할 때, PK값이 AutoIncrement로 되어 있는데, 이 자동 증가된 값을 코드 상에서 사용해야 할 때가 있습니다. 이럴 때, PreparedStatement 객체에서 쿼리를 실행하고 난 후, getGeneratedKeys()함수로 ResultSet에 결과 키 값을 저장하면 AutoIncrement 값을 가져올 수가 있습니다. 1. 실행코드 public void RuleConvertDatabaseInit() { try { conn = DriverManager.getConnection( DatabaseConfig.driverTag + Database..
[MySQL] Workbench 다이어그램 그리는 방법(EER Diagram)
[MySQL] Workbench 다이어그램 그리는 방법(EER Diagram) MySQL 데이터베이스를 사용할 때 기본적으로 제공되는 GUI인 Workbench에서 자신이 생성한 데이터베이스의 다이어그램을 확인하고 싶을 때가 있습니다. 직관적이니깐요. WorkBench에서 이를 지원해주는데 EER Diagram을 보는 방법은 간단합니다. 1. Database - Reverse Engineer... 클릭 2. 현재 데이터베이스와 IP주소, Port, User를 확인하고 Next 데이터베이스에 로그인이 되어 있는 상태라면 자동적으로 입력 칸이 채워집니다. 혹시 비워져 있을 경우엔 데이터베이스의 정보와 알맞게 넣어주신 후 Next를 진행하면 됩니다. 3. Next DB 연결이 잘 되었으니 Next. 4. 스키..
[MSSQL] MSSQL 설치 오류 sqlncli.msi 올바른 설치 패키지 사본을 사용하여 설치를 다시 시도하십시오.
MSSQL Express 2017을 다운받고, MSSQL Management Studio는 2014를 다운받고 DB 테이블을 생성하려 했더니 Server 버전이 다르다고 편집 툴 측에서 오류가 발생했다. 하기야... 서버가 2017버전인데 편집툴이 2014버전이면 오류가 날 만하지. 그래서 MSSQL 2017을 삭제하고 2014를 설치하려 했는데 정말 불편하게도 한 번에 삭제가 다 안 됩니다. 할 수 없이 제어판을 통해서 Server, 편집 툴 모두 제거를 하고 2014버전으로 다시 설치를 하는데 "sqlncli.msi 올바른 설치 패키지 사본을 사용하여 설치를 다시 시도하십시오." 라는 오류가 발생할 경우가 있다. 해결 방법 => 제어판 - 프로그램 추가/제거에서 Microsoft SQL Native ..