일반적으로 DB에서 특정 단어가 포함된 레코드를 찾기 위해서 LIKE 를 주로 사용한다. 그러나 LIKE는 '%단어%'와 같이 사용할 때, 인덱스를 사용하지 않기 때문에 속도가 느려진다. 또한 LIKE를 여러 필드 (예를 들어, title과 keyword 등)에 동시에 적용하면서 여러 단어를 검색어로 전달하면 쿼리가 복잡해지기도 한다. > select * from board > where (title like '%학교%' or body like '%학교%') > and (title like '%취업%' or body like '%취업%'); 이를 대체하기 위해서 정규표현식을 적용할 수도 있다. 그러나 정규표현식도 마찬가지로 인덱스를 거치지 않고 풀 스캔(Full Scan)이 일어나기 때문에 느리다. > ..
Mac에서 MySQL 설치 후, 삭제하는 방법에 대한 정리입니다. 한번에 삭제하는 명령이 없으니 콘솔에서 아래 명령어를 하나씩 실행하면 됩니다. sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm -rf /Library/StartupItems/MySQLCOM sudo rm -rf /Library/PreferencePanes/My* rm -rf ~/Library/PreferencePanes/My* sudo rm -rf /Library/Receipts/mysql* sudo rm -rf /Library/Receipts/MySQL* sudo rm -rf /var/db/receipts/com.mysql.* sudo vi /etc/hostconfig ->..
MySQL Workbench 5.2.42 버전을 사용하고 있는데요. update나 delete 쿼리를 전달하니 다음과 같은 오류가 발생했습니다. Error Code: 1175 You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column safe mode로 설정되어 있어서 key 칼럼을 사용하지 않을 경우, 업데이트를 못한다는 것인데요. 관련 내용을 검색해 보니 설정을 바꾸면 된다고 하네요. http://mysqlblog.fivefarmers.com/2010/09/01/workbench-called-me-a-dummy/ Go to Edit -> PreferencesSelect the S..
MySQL에서 Index를 설정할 경우, 오라클처럼 Hint를 활용해서 사용자가 지정하는 Index를 실행하도록 구성할 수 있습니다. 인덱스를 잘 설정하려면 사용할 쿼리에 대한 실행계획을 볼 줄 알아야 합니다. MySQL에서 실행계획을 살펴보는 명령어는 explain 입니다. > explain > select ~~ 이런 형태로 사용하면 쿼리 결과가 아니라 다음과 같은 실행 계획이라는 것이 나타납니다. +----+-------------+----------------+------+---------------+------+---------+------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref ..
MySQL의 설정이 어떻게 되어 있는지 확인하는 명령어를 간단하게 한번 정리합니다. 가끔 언어 설정이나 버전 등의 정보가 궁금한 경우가 있더라구요. MySQL 상태 확인 mysql> status -------------- /usr/local/mysql/bin/mysql Ver 14.14 Distrib 5.1.45, for apple-darwin10.2.0 (i386) using readline 5.1 Connection id: 34 Current database: campus114 Current user: root@MINI SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.5.14 MySQ..
요즘 App을 개발하다보면 지도를 활용하는 어플이 많습니다. 특히 현재 위치에서 다른 위치 사이의 거리를 계산해야 하는 경우가 있는데요.. Google API를 사용할 경우, distanceBetween과 같은 메소드를 활용할 수도 있을 겁니다. 오늘 정리할 내용은 MySQL 쿼리를 활용해서 두 위치 사이의 거리를 계산하는 겁니다. 오랜만에 보는 몇가지 수학함수를 사용하면 간단히 결과가 나오네요.. 다음과 같이 가정하고 쿼리를 만들어 보도록 하겠습니다. 현재 위치 위도 : nowLat 경도 : nowLng 지정 위치 위도: setLat 경도: setLng > select (6371 * acos( cos( radians(nowLat) ) * cos( radians( setLat ) ) * cos( radi..
PHP와 MySQL을 사용하는 웹 호스팅에서 데이터베이스의 모든 테이블을 지우려고 할 경우, Drop Database 문을 활용하지 못하는 경우가 많습니다. 그렇다고 수많은 테이블을 하나씩 지우는 것도 방법이 아닐 듯 하네요.. 그래서 다음과 같은 PHP 프로그램을 통해서 처리할 수 있을 것 같습니다. 먼저 "show table"을 사용해서 전체 테이블 정보를 가져오고 이어서 "drop table" 명령으로 하나씩 지우면 되겠죠. 다음 소스를 참고하세요~
MySQL 쿼리 결과를 파일로 저장할 필요가 가끔 있습니다. ,를 구분자로 한 CSV 파일로 저장하면 엑셀에서 열어서 편집도 가능하죠.. 간략하게 구문을 정리해 봅니다. SELECT col1, col2, col3 INTO OUTFile '저장할파일명' FIELDS TERMINATED BY ',' FROM 테이블명; INTO OUTFILE '저장할파일명' : SELECT 쿼리 결과를 저장할 파일을 지정합니다. FIELDS TERMINATED BY '구분자': 각 Column을 구분할 구분자를 지정합니다. 예를 들어서 다음과 같이 쿼리하면 저장이 됩니다. member 테이블에서 userid, name, email, status 필드 값을 추출해서 mini.csv로 저장합니다. > select userid, ..
MySQL의 DB 백업 및 복구에 대해서 간단하게 정리해 봅니다. MySQL 데이터 백업 백업: mysqldump -u DB계정 -p DB명 > 저장할파일명 복구: mysql -u DB계정 -p DB명 mysqldump -u root -p mini > mini.sql Enter password: DB 생성 예제 > mysqladmin -u root -p create mini Enter password: DB 복구 예제 > mysql -u root -p mini mysqldump -u root -p mini member > mini_member.s..