본문 바로가기

MySQL

(14)
[mysql] UPDATE vs REPLACE [1. 개요] Table 내 특정 row 들에 대해서 어떤 값을 변경해야 할 때, 사용할 수 있는 방법을 정리한다. UPDATE 는 수정할 row 가 미리 존재해야 한다. REPLACE 는 Primary key 나 Unique key 를 기준으로 명시한 column 에 해당 하는 값들을 수정한다. pk 나 unique key 가 없으면 insert 로 동작한다. update 가 아니라 해당 row 삭제 후, 다시 insert 하는 형태로 동작한다. [2. UPDATE] 가장 기본적인 방법, 조건에 부합하는 row 들에 대해서 해당 column 에 저장된 값을 수정한다. UPDATE 'Table1' SET 'Table1'.'Col' = 'your_value' WHERE 'any condition'; 다른 ..
mysql. st_bearing funtion [1. 개요] mysql 로 geometry 중, 특히 point 를 다룰 때 두 점의 bearing 을 구해야 할 때가 있음. => 두 bearing 을 이용해서 회전 각도 구할 때도, [2. 코드] # input # pt1, pt2 : POINT # pt1 -> pt2 의 bearing 을 반환. # st_bearing BEGIN SET @lon2 = ST_X(pt2); SET @lon1 = ST_X(pt1); SET @lat2 = ST_Y(pt2); SET @lat1 = ST_Y(pt1); RETURN (360.0 + DEGREES(ATAN2( SIN(RADIANS(@lon2-@lon1))*COS(RADIANS(@lat2)), COS(RADIANS(@lat1))*SIN(RADIANS(@lat2))-..
mysql. haversine_distnace function [1. 개요] mysql 로 geometry 중, 특히 point 를 다룰 때, 가끔 두 점간의 거리가 필요할 때가 있다. 그러나, 기본 함수로 제공하지 않는 것으로 보임. (있나?, 버전에 따라서?) 함수로 작성해서 필요할 때 사용하기 위해 정리 [2. 코드] POINT 를 입력으로 받아서 두 점간 거리를 meter 단위로 반환. # input # pt1, pt2 : POINT # st_distance_sphere BEGIN RETURN 6371000 * 2 * ASIN(SQRT( POWER(SIN((ST_Y(pt2) - ST_Y(pt1)) * pi()/180 / 2), 2) + COS(ST_Y(pt1) * pi()/180 ) * COS(ST_Y(pt2) * pi()/180) * POWER(SIN((S..
wgs84 좌표 관련 연산 (거리, bearing) [1. 개요] wgs84 좌표를 이용한 몇가지 연산에 대한 내용 정리 두 점간의 거리 구하기 두 점의 bearing 구하기 [2. haversine distance] 주어진 지점에 대해 구 (Sphere) 의 두 지점 사이의 최단거리(great-circle distance) 를 구하는 공식. wgs84 는 평면 좌표가 아니므로, 일반적인 거리 공식으로 두 점간의 거리를 구할 수 없다. haversine formula 는 두 점간의 거리가 최단 거리가 되는 것을 보장한다. [2.1 파이썬으로 구현하기] https://testkernelv2.tistory.com/676 [2.2 golang 으로 구현하기] https://testkernelv2.tistory.com/678 [2.3 mysql 로 구현하기] h..
[작성해야 됨] mysql. 유용한 함수 [1. 개요] [2. GROUP_CONCAT] [3. TRIM] [4. CONVERT_TZ] SELECT CONVERT_TZ('2024-02-08 10:38:22', @@session.time, '+00:00'); # 현재 세션의 시간대에서, UTC 로 시간대 변경.
[좀 부족한데] mysql 공간 쿼리 사용하기 [1. 개요] mysql 에서 공간 연산을 사용하기 위한 첫번째 단계 Point, Polyline, Polygon 등을 생성하여 table 에 insert 하는 방법 정리 [2. WKT 로 geometry 작성하기] Point ST_GEOMFROMTEXT('Point(127.123456 36.654321)', 4326) X, Y 순으로 적는다. ## (경도, 위도) or (Lon, Lat) X, Y 사이에 comma 가 없어야 한다. Polyline ST_GEOMFROMTEXT('LINESTRING(X Y, X Y, ..., X Y)', 4326) Polygon ST_GEOMFROMTEXT('Polygon( (X Y, X Y, X Y, ..., X Y))', 4326) Polyline 과 비슷한 방식으로..
MySQL. 테이블 용량 관리 [1. 개요] 운영중인 MySQL 서버에서 디스크 용량이 부족할 경우 조치 할 수 있는 방법을 정리한다. 테이블을 DROP 하거나 TRUNCATE 테이블에 파티션이 설정 된 경우, 사용하지 않는 파티션을 TRUNCATE DELETE 쿼리 수행 후 OPTIMIZE 필요한 데이터만을 table dump 후 재복구 [2. DROP / TRUNCATE] 가장 단순한 방법으로 테이블 자체를 삭제하거나 데이터를 테이블에서 전부 제거하면 된다. 단, 모든 데이터가 삭제되므로 앞으로 절대 사용 할 일이 없는 테이블(혹은 백업되있는) 을 대상으로만 진행하도록 한다. DROP TABLE 'any_table' TRUNCATE TABLE 'any_table' [3. PARTITON] 테이블 생성 시 파티션을 같이 설정한 경우..
MySQL. unique key [1. 개요] unique key 의미와 사용 방법 정리 [2. 의미] 기본적으로 중복 데이터 저장을 방지하기 위함. 이미 이런 역할을 하는 Primary key 가 있고, PK 와의 차이점 PK 와 달리 NULL 을 허용한다. 테이블 당 하나만 존재 할 수 있는 PK 와 달리, 여러 개 존재 할 수 있다. [3. 생성 방법] 테이블 생성 시 CREATE TABLE `tmp`.`Message` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `user_id` integer NOT NULL, `user_to` integer NOT NULL, `top_num` integer NOT NULL, `priority` smallint NOT NULL, `error` va..
MySQL, innodb_autoinc_lock_mode [1. 개요] innodb_autoinc_lock_mode 와 auto_increment 동작 방식에 대해 정리한다. auto_increment INT 형 자료형을 대상으로 설정 가능하다. NULL 이 올 수 없으므로, NOT NULL 인 column 을 대상으로 설정 가능하다. Table 생성 시, auto_increment 의 시작 값을 특정 값으로 초기화 할 수 있다. 반드시 pk 나 unique key 가 될 필요는 없지만, 중복이 있어선 안된다. innodb_autoinc_lock_mode 아래 query 로 현재 설정 된 값을 확인 할 수 있다. # show variables like 'innodb_autoinc_lock_mode' 아래 query 로 설정 값을 바꿀 수 있다. # set gl..
MySQL, SQL_SAFE_UPDATES [1. 개요] table 에 대한 update 혹은 delete 작업 시 where 절이 없거나, where 절에 index 가 걸린 column 이 없는 경우 update / delete 구문을 실패 시킨다. 이러한 동작은 SQL_SAFE_UPDATES 값이 1인 경우 발생하고, 0으로 설정한 경우 update / delete 구문을 정상 동작하게 할 수 있다. [2. 확인 방법] show variables like 'sql_safe_updates' [3. 변경 방법] off set sql_safe_updates = 0; on set sql_safe_updates = 1;