반응형

[MYSQL] update ...select 구문. 삽질하다가 OK

#mysql #database #update #select

아래처럼 해야함.

update wp_moa_bible_mcheyne m

  join wp_moa_bible_sort s on s.name_short = m.sort_name

   set m.ever_seq_no = s.ever_seq_no

;

아래처럼 계속 하면 삽질만 한다. 

update wp_moa_bible_mcheyne a

set ever_seq_no = (

    select ever_seq_no

      from wp_moa_bible_sort b

    where a.sort_name = b.name_short

);



update wp_moa_bible_mcheyne m,

        wp_moa_bible_sort s

    set m.ever_seq_no = s.ever_seq_no

  where m.sort_name = s.sort_name

;
반응형
반응형

Mysql 자음 초성 추출 함수, 자음으로 검색, 초성 검색

함수를 만들어서 추출해보자. 

CREATE DEFINER=`gn`@`%` FUNCTION `fn_choSearch`(`str` varchar(20)) RETURNS varchar(20) CHARSET utf8 
 
BEGIN 
     declare returnStr varchar(100); 
     declare cnt int; 
     declare i int; 
     declare j int; 
     declare tmpStr varchar(10); 
 
     if str is null then 
         return ''; 
     end if; 
 
     set cnt = length(str)/3; 
     set i = 1; 
     set j = 1; 
 
     while i <=cnt DO 
           set tmpStr = substring(str,i,j); 
           set returnStr = concat(ifnull(returnStr,''), 
 
            case when tmpStr rlike '^(ㄱ|ㄲ)' OR ( tmpStr >= '가' AND tmpStr < '나' ) then 'ㄱ' 
                 when tmpStr rlike '^ㄴ' OR ( tmpStr >= '나' AND tmpStr < '다' ) then 'ㄴ' 
                 when tmpStr rlike '^(ㄷ|ㄸ)' OR ( tmpStr >= '다' AND tmpStr < '라' ) then 'ㄷ' 
                 when tmpStr rlike '^ㄹ' OR ( tmpStr >= '라' AND tmpStr < '마' ) then 'ㄹ' 
                 when tmpStr rlike '^ㅁ' OR ( tmpStr >= '마' AND tmpStr < '바' ) then 'ㅁ' 
                 when tmpStr rlike '^ㅂ' OR ( tmpStr >= '바' AND tmpStr < '사' ) then 'ㅂ' 
                 when tmpStr rlike '^(ㅅ|ㅆ)' OR ( tmpStr >= '사' AND tmpStr < '아' ) then 'ㅅ' 
                 when tmpStr rlike '^ㅇ' OR ( tmpStr >= '아' AND tmpStr < '자' ) then 'ㅇ' 
                 when tmpStr rlike '^(ㅈ|ㅉ)' OR ( tmpStr >= '자' AND tmpStr < '차' ) then 'ㅈ' 
                 when tmpStr rlike '^ㅊ' OR ( tmpStr >= '차' AND tmpStr < '카' ) then 'ㅊ' 
                 when tmpStr rlike '^ㅋ' OR ( tmpStr >= '카' AND tmpStr < '타' ) then 'ㅋ' 
                 when tmpStr rlike '^ㅌ' OR ( tmpStr >= '타' AND tmpStr < '파' ) then 'ㅌ' 
                 when tmpStr rlike '^ㅍ' OR ( tmpStr >= '파' AND tmpStr < '하' ) then 'ㅍ' 
            else 'ㅎ' end); 
           set i=i+1; 
     end while; 
  RETURN returnStr; 
END;

 

자바스크립트로 검색어가 초성인지 아닌지 체크

var keyword = $("#keyword").val().toUpperCase(); 
var choKeyword = choHangul($("#keyword").val()); 
 
//초성검색 구분 
 
if (keyword!="" && choKeyword==""){ 
    choDiv = 'Y'; 
}else{ 
    choDiv = 'N'; 
} 

/* 초성추출 */ 
function choHangul(str) { 
  cho = ["ㄱ","ㄲ","ㄴ","ㄷ","ㄸ","ㄹ","ㅁ","ㅂ","ㅃ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"]; 
  result = ""; 
  for(i=0;i<str.length;i++) { 
      code = str.charCodeAt(i)-44032; 
    if(code>-1 && code<11172) result += cho[Math.floor(code/588)]; 
  } 
  return result; 
} 

 

 

쿼리에서 초성 추출하자.

WHERE 1=1 
<isEqual prepend='AND' property="choDiv" compareValue="N" > 
    S1.STOP_NAME LIKE concat('%',#keyword#,'%') OR S1.STOP_ID LIKE concat('%',#keyword#,'%') 
</isEqual> 
<isEqual prepend='AND' property="choDiv" compareValue="Y" > 
    fn_choSearch(S1.stop_name) LIKE concat('%',#keyword#,'%') OR S1.STOP_ID LIKE concat('%',#keyword#,'%') 
</isEqual> 

 

choDiv 값이 N 일 경우 일반검색
choDiv 값이 Y 일 경우 위의 oracle함수를 사용하여 초성검색


예를 들어
이렇게 구현을 하면 'ㄱㄴㄷ' 으로 검색을 하면
가나다
간난단
갇낟닫
...
등 초성이 ㄱ,ㄴ,ㄷ 인 데이터가 검색된다.

출처 : https://aljjabaegi.tistory.com/220

 

Mysql 자음 초성 추출 함수, 자음으로 검색, 초성 검색

Mysql 자음 초성 추출 함수, 자음으로 검색, 초성 검색 개발을 하다보면 자음으로만 검색할 수 있게 해달라는 요청이 들어오곤 한다. 그럴때마다 유용하게 사용하는 것이 아래의 함수이다. 그냥 복사 붙여넣고 실..

aljjabaegi.tistory.com

 

반응형
반응형

MYSQL 특수문자 치환, 특수문자 치환 찾기MYSQL 특수문자 치환, 특수문자 치환 찾기. CHAR()

SELECT char(63);
SELECT ASCII('?') FROM DUAL;
SELECT CONCAT('http://naver.com/Mobile.dm',char(63),'123') MOBILE_URL

 

반응형
반응형
qdPM™Free Web-Based Project Management Software (PHP/MySql)

http://qdpm.net/

...
반응형
반응형

Amazon LinuxLAMP 웹 서버 설치

http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/install-LAMP.html


다음 절차를 통해 Amazon Linux 인스턴스에 PHP 및 MySQL을 지원하는 Apache 웹 서버를 설치할 수 있습니다. 이 웹 서버를 LAMP 웹 서버 또는 LAMP 스택이라고도 합니다. 이 서버를 사용해서 고정 웹사이트를 호스팅하거나 데이터베이스에서 정보를 읽고 쓰는 동적 PHP 애플리케이션을 배포할 수 있습니다.

중요

LAMP 웹 서버를 Ubuntu 인스턴스에서 설치하려는 경우는 본 자습서를 이용할 수 없습니다. 이 절차는 Amazon Linux에서 사용하기 위한 것입니다. 기타 배포에 대한 자세한 내용은 해당 배포의 특정 문서를 참조하십시오. Ubuntu의 LAMP 웹 서버에 대한 자세한 내용은 Ubuntu 커뮤니티 문서 ApacheMySQLPHP 항목을 참조하십시오.

사전 조건

본 자습서는 사용자가 인터넷에서 접근할 수 있는 퍼블릭 DNS 이름을 가진 새 인스턴스를 이미 실행한 것으로 가정하고 있습니다. 자세한 내용은 1단계: 인스턴스 시작 단원을 참조하십시오. SSH(포트 22), HTTP(포트 80), HTTPS(포트 443) 연결을 허용할 수 있도록 보안 그룹을 구성해야 합니다. 이 사전 요구 사항에 대한 자세한 내용은 Amazon EC2로 설정 단원을 참조하십시오.


[ec2-user ~]$ sudo yum update -y
[ec2-user ~]$ sudo yum install -y httpd24 php56 mysql56-server php56-mysqlnd
[ec2-user ~]$ sudo service httpd start
Starting httpd:                                            [  OK  ]
[ec2-user ~]$ sudo chkconfig httpd on
[ec2-user ~]$ chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
Security Groups associated with i-1234567890abcdef0
Ports Protocol Source launch-wizard-N 22 tcp 0.0.0.0/0 ✔

보안 그룹에 규칙 추가의 절차를 사용하여 다음 값으로 새로운 인바운드 보안 규칙을 추가합니다.

  • Type - HTTP

  • Protocol - TCP

  • Port Range - 80

  • Source - Custom

Apache 테스트 페이지를 볼 수 없는 경우, 사용 중인 보안 그룹에 HTTP(포트 80) 트래픽을 허용하는 규칙이 있는지 확인하십시오. 


[ec2-user ~]$ ls -l /var/www
total 16
drwxr-xr-x 2 root root 4096 Jul 12 01:00 cgi-bin
drwxr-xr-x 3 root root 4096 Aug  7 00:02 error
drwxr-xr-x 2 root root 4096 Jan  6  2012 html
drwxr-xr-x 3 root root 4096 Aug  7 00:02 icons
drwxr-xr-x 2 root root 4096 Aug  7 21:17 noindex
[ec2-user ~]$ sudo usermod -a -G apache ec2-user
[ec2-user ~]$ exit
[ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
[ec2-user ~]$ sudo chmod 2775 /var/www
[ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
[ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
[ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
http://my.public.dns.amazonaws.com/phpinfo.php

[ec2-user ~]$ sudo yum list installed httpd24 php56 mysql56-server php56-mysqlnd

Loaded plugins: priorities, update-motd, upgrade-helper
Installed Packages
httpd24.x86_64                          2.4.25-1.68.amzn1                    @amzn-updates
mysql56-server.x86_64                   5.6.35-1.23.amzn1                    @amzn-updates
php70.x86_64                            7.0.14-1.20.amzn1                    @amzn-updates
php70-mysqlnd.x86_64                    7.0.14-1.20.amzn1                    @amzn-updates
[ec2-user ~]$ rm /var/www/html/phpinfo.php

Mysql 서버보안 유지

[ec2-user ~]$ sudo service mysqld start
Initializing MySQL database:  
...

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
...

Starting mysqld:                                           [  OK  ]
[ec2-user ~]$ sudo mysql_secure_installation
  1. 암호를 입력하라는 메시지가 표시되면 루트 계정의 암호를 입력합니다.

    1. 현재 루트 암호를 입력합니다. 기본적으로 root 계정에는 암호가 없습니다. Enter를 누릅니다.

    2. 암호를 설정하려면 Y를 누른 후 안전한 암호를 두 번 입력합니다. 안전한 암호 생성에 대한 자세한 내용은 http://www.pctools.com/guides/password/ 단원을 참조하십시오. 이 암호를 안전한 장소에 보관하시기 바랍니다.

      참고

      MySQL에 대한 루트 암호를 설정하는 것은 데이터베이스를 보호하는 가장 기초적인 방법일 뿐입니다. 데이터베이스 기반 애플리케이션을 빌드하거나 설치할 때, 일반적으로 그 애플리케이션의 데이터베이스 서비스 사용자를 만들고 데이터베이스 관리 이외의 어떤 목적으로도 루트 계정을 사용하지 못하게 합니다.

  2. Y를 입력하여 익명 사용자 계정을 제거합니다.

  3. Y를 입력하여 원격 루트 로그인을 비활성화합니다.

  4. Y를 입력하여 테스트 데이터베이스를 제거합니다.

  5. Y를 입력하여 권한 테이블을 다시 로드하고 변경 내용을 저장합니다.

[ec2-user ~]$ sudo service mysqld stop
Stopping mysqld:                                           [  OK  ]
[ec2-user ~]$ sudo chkconfig mysqld on








...

반응형
반응형

[Mac] Mac에서 APM 설치하기 - MAMP


https://www.mamp.info/en/ 


Mac에서 간단하게 테스트 할 정도이면 Free 버전을 설치해서 사용하면된다. 


ChatScript 를 Mac 에서 구현하려니 PHP구동이 필요해서 설치 해보았다. 





...

반응형
반응형

APM setpu시 80포트가 열려있다고 설치 안될때. 


제어판 > 관리 도구 > 서비스 > 아래의 서비스를 중지시킨다.



World Wide Web Publishing Service

SQL Server Integration Services 10.0

SQL Server Reporting Services(MSSQLSERVER)





APMsetup download :  http://kldp.net/apmsetup/release/


...

반응형
반응형

MySQL 클론의 역습 – 1 (MariaDB 편)  https://mariadb.org/


https://embian.wordpress.com/2013/06/26/mysql-%ED%81%B4%EB%A1%A0%EC%9D%98-%EC%97%AD%EC%8A%B5-1-mariadb-%ED%8E%B8/


사실 이 글의 제목을 처음에는 “MySQL의 형제들” 이었다.


source가 fork된것이니 형제보다는 부모 자식 관계가 더 맞지 않을까 생각되서, “MySQL의 자식들”이라고 제목을 바꾸었다가 어감이 좋지 않아서 MySQL의 창시자가 자신의 첫째딸 이름을 따서 MySQL이라고 작명한 것에 착안해 “MySQL의 딸들”이라고 바꾸었다.


그런데, 그만 코드가 복제되서 다시 분화된 것인데 이것을 부모 자식간이라고 해야 하나 형제간이라고 해야 하나 쓸데없는 고민에 빠져버렸다.


결국, 장고 끝에 제목은 “MySQL 클론의 역습”이라고 결정했다. (그런데 실제로 MySQL과 클론들끼리 정말 싸우지는 않는다. 심지어 그들 간은 사이가 좋아 보이기 까지 한다.)


헛소리는 여기까지 하고 본문으로 들어가 보자. ^^;


우리나라에서 DB라고 하면 Oracle 아니면, MySQL이다. 특히 웹서비스 환경은 MySQL이 현재까지도 대세라고 할 수 있다.


최근들어 NoSQL이니 BigData니 하는 새로운 페러다임과 프로그램들이 등장하면서 광풍의 조짐이 보이고는 있지만, 여전히 사용함에 있어서는 제한적이고 진입장벽이 만만치가 않다.


아직까지 DB의 메인스트림은 RDBMS이고, 새로운 웹 프로젝트가 진행되면, 당연하듯 DBMS로는 MySQL이 거론되곤 한다.


사실 좀 지루했었다.


뭔가 MySQL이 아닌 새로운 것을 만지고 싶었을 뿐이었다.


그래서 어떤 프로젝트에서 Postfix를 도입해 볼까 하다가 MySQL에 익숙한 엔지니어들과 개발자들의 반대에 부딛혀야 했고,  본인 스스로도 딱히 그 프로젝트에서 Postfix를 써야 할 당위성을 찾기도 힘들어서 포기한적이 있다.


최근 모바일 게임 관련 프로젝트를 진행하면서 MySQL에서 fork된 몇가지 DBMS들을 만져볼 수 있게 되었다. 이해 당사자도 적고, 약간 도전적인 프로젝트이다 보니 아무런 태클 없이 혼자서 자유롭게 DBMS를 선택할 수 있는 기회였다.


이 글은  그 때 research 했던 MySQL fork program 들에 대한 간단한 소개 글이다.


MySQL이 Oracle에 편입된 후, MySQL의 향후 운명에 대한 우려의 목소리가 많아졌다.


이러한 우려 속에서 MySQL의 대안을 찾으려는 움직임이 많아지고 있는데, 그것들 중 대표적인 것으로 MySQL에서 fork된 프로젝트들을 꼽고 싶다.


이 글에서는 MySQL fork 프로젝트들 중 가장 많이 알려진 세가지 프로젝트에 대해서 정리 하려고 한다.


1. MariaDB


MariaDB 의 주요 개발자는 Michael Monty Widenius라는 사람으로 MySQL을 개발했던 사람이고, 그 MySQL을 Sun에 10억 달러(약 1조원)에 매각하면서 핀란드 10대 부자중 한 명이 된 사람이기도 하다.


하지만 MySQL을 인수했던 Sun이 다시 Oracle로 인수되자, Monty Program AB이라는 회사를 설립하고 MySQL의 소스를 기반으로 MySQL과 완벽하게 호환이 되는 DBMS를 개발 하는데, 이것이 MariaDB이다.


MySQL, MariaDB 둘 다 Monty의 딸 이름을 따서 만들었는데 MySQL은 첫째 딸, MariaDB는 둘째딸의 이름에서 따론 것이라고 한다.(딸바보인가보다)


MariaDB는 MySQL의 소스를 가져다 만들기도 했지만, 목표자체가 MySQL을 완벽하게 대체하는 것이다 보니, 기존 MySQL과 완벽하게 호환이 된다.


프로그램의 룩앤필도 거의 똑같고 지원하는 함수들도 모두 일치하며 심지어 파일 이름들도 그대로 MySQL의 것을 가져다 쓰고 있다.


개발자들이 그냥 보기에는 이게 MariaDB인지 MySQL인지 모를 정도이다. (Client의 프롬프트가 “MariaDB” 로 뜨는 것 말고는 정말 똑같다.)


당연히 php-mysql 이라던지, jdbc-mysql-connector같은 기존 db connection library도 그대로 사용할 수 있기 때문에 실제로 개발자들은 MySQL에서 MariaDB로 DB 서버가 바뀐다고 해도 전혀 소스코드 수정이 필요없으며, 추가적인 DBMS에 대한 학습도 거의 필요가 없다.


즉, MySQL을 다룰줄 아는 개발자라면 MariaDB의 진입장벽은 거의 없는 수준이라고 할 수 있다.


하지만, MySQL을 완벽하게 대체한다는 사실만으로 기존에 MySQL을 잘 사용하던 사람들이 막연한 불안감이나 새로운 프로그램에 대한 단순한 호기심만으로 MariaDB로 갈아타지는 않을 것이다.


그럼 MySQL 대신 MariaDB를 썼을 때 얻을 수 있는 잇점들은 어떤 것이 있을까?


첫번째 장점은 월등히(?) 빠른 쿼리 타임을 들 수 있다.


인터넷이 돌아다니는 다양한 퍼포먼스 테스트 결과를 보면 전반적인 쿼리 성능이 MySQL에 비해 좋은 것을 알 수 있다.


특히, sub query나 join query 같은 경우 따로 MariaDB의 특징으로 소개할 만큼 성능 향상이 있다.


그리고 본인이 직접 테스트한 결과에서는 Partitioning table에 대한 select 쿼리 결과가 특히 눈길을 끌었는데, 자세한 테스트한 결과는 따로 추가 글을 작성할 예정이다.


두번째 장점은 다양한 추가 기능들이다.


이 글에서는 다양한 추가 기능들중 몇가지만 소개하고자 한다.


1. Microseconds in MariaDB


테이블을 생성할 때 시간관련 자료형에 정밀도를 설정 할 수 있다.


CREATE TABLE example(


col_microsec DATETIME(6),


col_millisec TIME(3)


);


정밀도는 0부터 6까지 설정할 수 있으며, 설정된 값만큼의 microseconds가 출력된다.


SELECT CURTIME(4);


–>10:11:12.3456


2. Microseconds Precision Processlist


INFORMATION_SCHEMA.PROCESSLIST 테이블에 TIME_MS 컬럼이 추가 되었다.


processlist를 볼때 MySQL에서는 실행타임이 초단위까지 밖에 나오지 않았다면 MariaDB에서는 microseconds 단위까지 확인 할 수 있다.


3. Table Elimination


여러개의 table 조인으로 구성된 쿼리의 경우, 사용하기 편하기 view table을 따로 구성하기도 하는데, view table에서 특정 컬럼을 select할 경우 실제로 조인된 table들중 쿼리에 필요 없는 테이블이 발생할 수 있다.


MariaDB는 이런 경우 자동으로 쿼리에 필요 없는 테이블을 조인쿼리에서 제거해주는 기능을 가지고 있다. (이 특징은 성능 향상쪽에 가까운것 같기도 하다.)


4. Virtual Column


다음의 테이블 스키마를 보자.


create table table1 (


-> a int not null,


-> b varchar(32),


-> c int as (a mod 10) virtual,


-> d varchar(5) as (left(b,5)) persistent);


table1의 c 컬럼은 가상컬럼이다. 실제로 storage에 저장되지 않고 query 실행시간에 계산되어 출력된다.


table1의 d 컬럼은 실제로 storage에 저장이 되는 가상컬럼으로, insert나 update 때 계산되어 저장 되는 컬럼이다.


더 많은 추가 기능들이 있는데, 추가기능에 대한 설명은 여기에서 확인 할 수 있다.


한가지 주의할 점은 MariaDB의 추가 기능들을 사용할 경우 혹시라도 부득이하게 MySQL로 돌아가야 될 경우 호환이 안될 수도 있다는 점을 유의해야 한다.


마지막으로 MariaDB는 다양한 Storage Engine을 지원한다.


1. Aria


Aria 엔진은 MyISAM과 호환되면서 추가적으로 Transactional기능이 추가된 Engine이다.


2. XtraDB


InnoDB의 대체 Engine으로 다음에 설명할 Percona사에서 개발한 Storage Engine이다.


3. PBXT


일반적인 목적의 transactional storage engine으로 현재 더이상 maintaine 되지 않고 있어서 MariaDB에 기본 탑제되어 있지 않지만, 필요한 경우 재컴파일을 통해 사용할 수 있다.


4. FederatedX


Federated Storage Engine의 fork engine으로 Federated engine은 원격 서버의 table에 접근해서 Insert, Update, Delete, Select 를 할 수 있도록 해주는 engine이다.


5. OQGRAPH


Open Query Graph storage engine의 약자로 트리나 그래프 형태로 출력될 수 있도록 데이터를 저장하는 engine이다.


6. IBMDB2I


MySQL 5.1.55에서 빠졌던 엔진인데, MariaDB에서는 아직까지 지원하고 있다.


7. SphinxSE


Full Text Search Engine 으로 Full Text Search가 필요한 경우 사용할 수 있을 듯 하다.


8. Cassandra in MariaDB-10.0


NoSQL DBMS인 Cassandra cluster에 MariaDB를 통해 접근 할 수 있도록 10.0 버전에 추가되었다.


3가지 측면에서 MariaDB의 장점에 대해서 설명했는데, 개인적으로는 첫번째 장점인 성능 향상 만으로도 MariaDB를 쓰는 이유는 충분한 것 같다.


본인 입장에서는 추가 기능의 필요성은 아직까지 피부로 와닿지 않았고, 추후 MySQL이나 Percona로 전환해야 될지도 모르는 이슈 때문에 전혀 고려대상이 되지는 못했다.



.

반응형

+ Recent posts