<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>Tommy's KnowledgeBase</title>
	<link>http://tommylee.egloos.com</link>
	<description>신은 역경을 이겨낼수 있는자에게만 시련을 준다..고로 우리는 신에게 선택받은자들이다. 자 이제 보여주자 우리가 얼마나 대단한사람들이고 멋진사람들인지를</description>
	<language>ko</language>
	<pubDate>Fri, 07 Aug 2009 07:02:01 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>Tommy's KnowledgeBase</title>
		<url>http://pds13.egloos.com/logo/200902/09/75/f0084475.jpg</url>
		<link>http://tommylee.egloos.com</link>
		<width>80</width>
		<height>56</height>
		<description>신은 역경을 이겨낼수 있는자에게만 시련을 준다..고로 우리는 신에게 선택받은자들이다. 자 이제 보여주자 우리가 얼마나 대단한사람들이고 멋진사람들인지를</description>
	</image>
  	<item>
		<title><![CDATA[ Mysql 속도에 영향을 미치는 컴파일/링크 방법 ]]> </title>
		<link>http://tommylee.egloos.com/1583580</link>
		<guid>http://tommylee.egloos.com/1583580</guid>
		<description>
			<![CDATA[ 
  <br>1) 컴파일러를 gcc 대신 pgg를 이용하고 -O6 옵션을 주어 컴파일 하면 MySQL 서버<br>는 약 11%정도 빨라진다.<br>2) 공유라이브러리를 사용하는 대신 컴파일시 -static 옵션을 주면 속도는 빠르지만 <br>많은 메모리를 사용하게 된다.<br><br>2. 디스크와 심볼릭 링크<br>1) 스카시 하드를 달고 하드 디스크가 여러개일 경우 심볼릭 링크를 이용하여 데이터 파<br>일과 인덱스 파일을 서로 다른 디스크에 위치시키는 것이 좋다.<br><br>3. 버퍼 크기 조정<br>1) $ mysqladmin variables //현재 옵션이 어떤값을 가지고 있는지 보는 명령<br>이때 서버 성능과 관련 있는 옵션들<br>key_buffer_size : 인덱스를 저장하는 버퍼의 크기<br>max_connections : MySQL에 접속하는 클라이언트의 최대수<br>table_cache : 테이블 캐시의 크기<br>record_buffer : 테이블을 순차적으로 탐색할 경우 사용하는 버퍼의 크기<br>sort_vuffer : 정렬에 관련된 버퍼 크기<br>-- 바꿀때 사용하는 방법..<br>1&gt; safe_mysqld --set-variable table-cache=256 &amp;<br>2&gt; safe_mysqld -O table-cache=256 <br>둘중에 하나를 사용하면 된다.<br>-- key_buffer_size는 인덱스를 저장하는 버퍼의 크기이다. 인덱스는 검색을 빠르게<br>하므로 이 값을 크게 하면 인덱스를 하드디스크에서 읽지 않고 메모리에서 읽게 하여<br>메모리에서 읽게 하여 속도를 더욱 빠르게 할수 있다.(단 메모리가 많이 소모)<br>-- max_connections는 MySQL 서버에 접속할 수 있는 클라이언트의 최대 수이다.<br>사용자가 많은 사이트라면 이 값을 크게 늘려야한다.<br>-- max_connections와 table_cache의 값을 증가시키면 속도는 향상되지만 주의할 점<br>이 있다. 운영체제마다 다르지만 리눅스의 경우 한 프로세서에서 1024개 이상의 파일<br>을 동시에 사용할수 없다. 이것먼저 늘려주면 된다.<br><br>메모리가 256M 이상이고 테이블수가 많을때<br>$ safe_mysqld -O key_buffer=64M -O table_cache=256 -O sort_buffer=4M -O record_buffer=1M &amp;<br>메모리가 128M 정도이고, 테이블 수가 작고 정렬을 많이 사용할때<br>$ safe_mysqld -O key_buffer=16M -O sort_buffer=1M<br>메모리가 작고, 클라이언트의 연결이 많을때<br>$ safe_mysqld -O key_buffer=512k-O sort_buffer=16k -O table_cache=32 -O record_buffer=8k -O net_buffer=1k &amp;<br><br>일일이 기억하기 힘드므로 Mysql 소스 디렉토리에서 support-files라는 디렉토리를 보<br>면 각 시스템의 메모리 양이나 시스템에서 MySQL의 중요도에 따라 옵션을 설정해놓은<br>팡리이 있다. 이 옵션을 보고 적당하게 선택해서 사용하면 된다.<br><br>4. 기타 MySQL을 빠르게 하는 방법<br>1) 클라이언트가 서버에 연결할때는 Persistent한 연결을 해라<br>2) SELECT문을 쓸때는 인덱스를 사용하는지 확인해라<br>3) 메모리가 충분히 있다면 스왑메모리를 사용하지 말라<br>4) 컬럼에 Default value를 사용해라<br>5) User Defined Function을 사용해라<br>6) 컬럼에 유일한 값을 저장할 때는 AUTO_INCREMENT를 사용해라<br><br>참고 : MySQL을 정적으로 컴파일 하는방법<br>shell&gt; ./configure --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static<br><br>			 ]]> 
		</description>
		<category>SQL(MySQL)</category>

		<comments>http://tommylee.egloos.com/1583580#comments</comments>
		<pubDate>Fri, 07 Aug 2009 07:02:01 GMT</pubDate>
		<dc:creator>TommyLee</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 아휴....안타까운.. 현실아.... ]]> </title>
		<link>http://tommylee.egloos.com/1543964</link>
		<guid>http://tommylee.egloos.com/1543964</guid>
		<description>
			<![CDATA[ 
  그래 색안경끼고 보는사람 많아서 나까지 그렇게 보기는 싫다. 잘하는거 있으면 칭찬해주고 못하는것 있으면 잘되게 하면 되는거지 그렇게 생각하고 살았다.. 내가 좌파? 우파? 난 내파다.. 어떤파도 아니란 말이다..!!!<br>우리 국민중 대다수가 그럴것이다..<br><br>영국 인권 관련 협회인가? 오늘 아침 뉴스를 들어보니 한국의 인권은 심각하게 퇴보하고 있다고 한다..<br>밖에서 잠시들어와 조사만 하고 간사람이 한말인데도 그렇단다..<br>앉아서 눌리워지는 우린 어떨까..?<br>현직 판사가 말한다..~ "사이버 모욕죄" ... 말도 안되는 거라고... 혹 사이비 모욕죄 아닐까?? -정치 사이비들..-<br>난 그다지 유식하지 못하다.. 정치에 머 일가견이 있어 패널로 나설만한 인물도 못된다..<br>말도 그렇게 잘하지도 못한다..<br>하지만 지금 보면..<br>...<br><br>저기 위에 분들은 귀를 아예 닫고 사나보다..<br>그게 모잘라서 자기들이 사랑한다고 하는 국민들 입을 닫으려 하는건가 보다..<br>왜 못듣지?<br>안에서도 그럼 안된다고.. 좋은길로 가보자고 ...밖에서도 뉘들 그러면 안된다고 하는데..<br>왜그런거지?<br>일종의 리더쉽인가? <br>난 만용과 리더십을 구분할수 있는 사람이 지도자로 올랐으면 좋겠다..<br>법안은 시행되어봐야 알수 있는 것도 있지만 절대 아닌것도 있는것인데..<br>절대 안되는것에 무리수를 너무 두는것 같다..<br><br>이에 그게 잘못되었다고 말하는 사람들에겐 이꼬투리 저꼬투리 잡아서 살수 없게 만들고 <br>그걸 본보기라 말하듯 여기저기 보수 언론에 흘려 현혹하고..<br>그래 악법도 법이지.. 하지만 그건 만들어진 법이니 지키라는 뜻에서 나온거고 악법인지 알면서 만드는건 좀 아니잖아..<br>정말 안타까울 뿐이다..<br>난 우리 애들에게 무얼 보여주어야 할까?<br>지들 스스로 극우파라고 하는 그 사람들로 부터 아름다운것들을 지켜낼 자신이 솔직히 없다..<br><br>참...<br>나라 꼬라지가 이래서야..<br>답답해서 어찌 살겠는가?<br>4대강 살리면 모하노? 윗물부터 이렇게 냄새나서 못살겠는데...<br>목욕이나 갔다 오시고 과유불급과 그렇게 외치던 중도(중용)이 정말 무얼 뜻하는 것인지 한번 생각이라도 해보시길 ..<br>정말 진심으로 바라고 바래본다...<br/><br/>tag : <a href="/tag/미디어법" rel="tag">미디어법</a>,&nbsp;<a href="/tag/2mb" rel="tag">2mb</a>,&nbsp;<a href="/tag/이명박" rel="tag">이명박</a>,&nbsp;<a href="/tag/악법" rel="tag">악법</a>			 ]]> 
		</description>
		<category>미디어법</category>
		<category>2mb</category>
		<category>이명박</category>
		<category>악법</category>

		<comments>http://tommylee.egloos.com/1543964#comments</comments>
		<pubDate>Thu, 02 Jul 2009 09:55:15 GMT</pubDate>
		<dc:creator>TommyLee</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 입을 막는다고 눈을 가린다고 용서받을수 있을까? ]]> </title>
		<link>http://tommylee.egloos.com/1508873</link>
		<guid>http://tommylee.egloos.com/1508873</guid>
		<description>
			<![CDATA[ 
  많은 사람들의 눈물을 봤다..<br>누가 때렸나 물으면 모두들 우리나라의 대통령이라고 한다..<br>너무 노골적으로 티는거지...<br>없는 법 있는법 자기 맘대로 적용해서 .. 80먹은 할아버지도 두들겨 팬다..<br>김동길인지 뭔지..난 몰랐고 관심도 없었는데.. 우리 학교 선생이라드라..<br>친일은 현대 말로&nbsp;친권력을 의미한다.. 그 사람이&nbsp;이런 말을 하드라.. 노망났다 그러니 버르장머리 없다고 자기 제자중엔 그런애들없다고.. 만약 경찰에게 맞는 80먹은 할아버지가 김동길 교수 였어도 그런말 했을까?<br>친권력이다.. 너무 빤하지 않은가... 천신일.. 모 그럴수 있다 기업인들 권력에 안붙으면 어떻게 살아남아 우리나란데..<br>근데 넘 노골적으로 봐준다.. 웃기잖아..<br>길 잘 가던 아빠를 애들 아빠를 애 앞에서 잡아가고..<br>엄마와 애기가 닭장차 앞에서 울어도 안놓아준다...<br>왜 해필 거길 걸아갔냔다.. <br>집에가는 거였는데..<br>웃긴다.. 명동 4000명 경찰 봤나?<br>난 지난 인천 조폭 집단 혈투가 나오는 뉴스를 본적있다...<br>지금 경찰이 그것과 무엇이 다르리...<br>난 솔직히 더 무섭드라..<br>조폭들 싸움은 지들끼리나 싸우지...<br><br>경찰이 뭔죄겠나.. 얼마안되는 월급... (비리빼면..) 경찰 때려치우면 정말 할것 없는 직업..<br>나쁘다는 판단이 들어도 시키는 일 슬근슬근 해서야 잘리기 십상..하란대로 열심히 해야 그나마 자리를 유지할수 있으니..<br>전경이든 의경이든.. 걔네들은 무슨 죄겠나...<br>스무살 갓 넘겨 이리저리 감정적으로 흔들릴 나이에 직원 경찰이 적군으로 생각하도록 이야기하고..<br>안치면 니들이 다친고 &nbsp;위협하고 그러니... 마치 전쟁에 나와있는듯 했겠지..<br>엄마 아빠 할아버지 벌 되보여도 그땐 잠시 정신줄놓고 닥치는 대로 휘둘렀던 거겠지...<br><br>백프로 공감가는 얘기하나 할까??<br>전의경 나온 애들.. 제대하면 자기들 전의경나왔다 이야가 안한다?<br>그리고 100% 부끄러워하고 쪽 팔려한다..<br>돌아보면 정말 부끄럽거든..<br>근데 이놈에 정권이 안그래도 부끄러워 죽겠는데 더 부끄러운일 시킨다..<br>그러지 마소 .. 이친구들 제대하면 친구 다 떨어짐더..<br><br>현 정권 이해는 된다..<br>우리나라 대통령이 정말 유능한 기업인이었고 투자와 분배를 잘 운영하고 모혐수도 기꺼이 받아들이는 사람이기에..<br>젊은날 맨주먹으로 세상과 싸워 이만큼 이룬거 아니겠나..<br>내 생각엔 그런 사람은 대통령하면 안된다..돈이나 재물은 안되면 폐기하고 포기하고 경쟁사 대응해서 전략적으로 이런저런 수 쓰고 하기에.. 똑같은 논리로 적용하는 오류를 범할 우려가 있는 것이다..<br><br>이해는 되어도 이렇게 흘러가면 눈물흘리는 사람이 한사람 그리고 또한사람..<br>몇몇 특권층 빼고 , 권력층 가족 친구들 빼고... 대부분이 눈물을 흘리게 될지도 모른다..<br>그럼 이게 정말 좌빨 아닌가?<br>평등과 공동의 이익을 지향 하면서 특수 권력만 지배하는 .. 그래서 국민은 울고만 있는...<br><br>'우리나라' 대통령은 쇼맨십을 그만하고 보이는것을 직접 체험해서 보고 ..<br>누가 어디서 어떤이유로 눈물을 흘리는지..살펴야 하지 않을까..<br>우리 나라 대통령의 인격이 어쩌고 , 예전 비비케이?? 모 어쩌고.. 난 모르겠다...<br>다만 지금 현재..<br>국민과 함께하는 친구같은 대통령이 필요할 뿐이다..<br>오래전 공사판에서 막걸리 한잔 하며 십장들을 달래던 그 사람 처럼 말이다..<br><br>지금 이꼬라지대로 그대로 가다간...<br>주댕이 잔치 빚잔치 로 5년 보내고..&nbsp;민주주의 롤백하고 &nbsp;최악의 비평만 잔뜩안고 끝나버릴까 두려울 뿐이다..<br>그렇게 지금 정권이 원했던 발전이.. 역사에 죄악이 될수도 있다는 뜻이다..<br/><br/>tag : <a href="/tag/민주주의" rel="tag">민주주의</a>,&nbsp;<a href="/tag/행복추구권" rel="tag">행복추구권</a>			 ]]> 
		</description>
		<category>민주주의</category>
		<category>행복추구권</category>

		<comments>http://tommylee.egloos.com/1508873#comments</comments>
		<pubDate>Tue, 02 Jun 2009 19:46:50 GMT</pubDate>
		<dc:creator>TommyLee</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 가슴뭉클한 만화... ]]> </title>
		<link>http://tommylee.egloos.com/1503188</link>
		<guid>http://tommylee.egloos.com/1503188</guid>
		<description>
			<![CDATA[ 
  <p>&nbsp;</p><p>언제나 기억될 그이름 석자 노 무 현&nbsp; 우린 영원히 기억할겁니다 부디 편안하게 재내시길..</p><p><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds11.egloos.com/pds/200905/29/75/f0084475_4a1f75aad6437.jpg" width="480" height="8196" onclick="Control.Modal.openDialog(this, event, 'http://pds11.egloos.com/pds/200905/29/75/f0084475_4a1f75aad6437.jpg');" /></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -출처는 인터넷상에 계속돌길래 너무 감동적이라 게시판에 썻습니다-</p><br/><br/>tag : <a href="/tag/노무현" rel="tag">노무현</a>			 ]]> 
		</description>
		<category>노무현</category>

		<comments>http://tommylee.egloos.com/1503188#comments</comments>
		<pubDate>Fri, 29 May 2009 05:42:57 GMT</pubDate>
		<dc:creator>TommyLee</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 내 마음속에 유일한 대통령을 보내며.. ]]> </title>
		<link>http://tommylee.egloos.com/1501950</link>
		<guid>http://tommylee.egloos.com/1501950</guid>
		<description>
			<![CDATA[ 
  느끼는대로 그대로 들이받아 볼란다..<br>난 소위 대학다닐때 운동권도 아니다.. 아니 그때는 좋게 할수 있는 방법이 있지 않을까 하는 이쪽도 저쪽도 아닌 그냥 우유부단한 인간일 뿐이었다..<br>군부독재 그리고 이어지는 군사주의적인 정치가 우리나라 정치를 더디 진행하게 하였다는것에는 어느누구도 반론할 사람이 없다. 다만 박정희씨가 일궈(?)놓은 발전은 물질적인 일부 발전을 이루면서 나이좀 지긋하신 분들께는 향수로 작용하기도 한것같다..<br>하지만 이게 박정희에 의해 발전한 것일까? 한국인의 특징상 어려울때 더 강해지고 후대를 위해 자신을 기꺼이 던지는 습성때문만은 아니었을까? 그 향수는 적절한시기에 정권을 잡은 한 인물의 타이밍이라는 생각이 머리가 굵어지면서 더 든다.<br>내가 말하고자 하는 것은 이것이 아니다..<br>현재 지금 살고 있는 현재..를 말하고자 한다.<br>군부는 규칙이라도 있었다. 자기네들끼리 정하고 공표한 규칙이고 악법이지만 그래도 있었다.<br>하지만 지금은 법의 테두리내에서 교묘히 사기를 치는 잡범들과같은 행동을 공권력들이 하고 있는 형세가 아닌가 싶다.<br>현 정부나 권력이 나에게 뭐라할만큼 한가하지도 않고 나에게 특별히 해끼친것없는데 왜그러나 라고 물을지 모르겠지만...<br>지금 형세는 정치를 더디 진행시키는것이 아니라 더디지만 조금씩 발전해왔던 정치를 암울했고 가슴답답한 시절로 되돌리고 있다는 느낌을 지울수 없다.<br>물론 이것은 막대한 손해이다. 먹먹한가슴 안고 일이 잘될리도 없고 답답한 마음으로 세상을 올곧게 볼리 없다..<br>그네들이 말하는 대로 나나 항변하는 모든이들이 감정적으로 대해 놓치고 있는게 있을수도 있지만..그건 정말 소소하고 어느 사회든 있을수 있는 일이다. 중요한것은&nbsp; '사람'들의 입을 막고 그래도 말하려는 사람은 몸을 구속한다. <br>모든것이 위선적이고 거짓투성이가 아니라고 해도 이젠 그렇게 보여지는것에는 신뢰의 문제가 존재하기 때문이다.<br>이러다 다음정권 패하려고 하나? 이렇게 울분을 토하며 협박(?)을하는 국민들도 있지만 이건 비단 정권의 존속문제를 넘어 대한민국인이 더이상 대한민국인임을 부끄러워하는 사람이 많아지게 된다는 문제이다.<br>우리나라는 아무것도 없는 폐허에서 이나라를 이만큼 끌어올린 민족이다. 이런민족이 자기 조국을 부끄러이 생각하게 된다면 그 나라의 미래는 참담하기 이를데 없을 것이다.<br><br>현정부는 발전을위한 소수 희생 , 마무리가 좋으면 과정은 그다지 크게 생각지 않는 위험한 발상을 하고 있다.<br>교육 건설 인사 행정등등 성과에 귀속되는 물질적인 국수주의로 흘러가고 있다.<br>이러다보니 소위 '딸랑이'가 될수 밖에 없는 공권력은 자연스레 국민을 억업할것이고 이것이 몇년을 지속하여 잘못이 아닌것처럼 만연해버린다면 우리국민은 다시 그것을 찾기위해 얼마를 또 돌아가서 기다려야 할지 아무도 모른다.<br><br>그리고 소수의패해가 점점 다수의 피해로 가고 있는 지금 세상에서 고인이되신 노 전 대통령은 당신이 하려고 했던 중요한 일들을 정권내 이루어내지 못하셨음에 통탄했으리라.<br>자진을 택함에 있어 보통은 무 책임하다지만 노 전대통령의 자진은 무책임이 아니라 무한 책임이다.<br>당신의 힘으로 어떠한 사람의 마음도 움직일수 없게 되어버린 그 때에 , 대화의 창구를 닫아버릴수 밖에 없게 만든 그런 때에 딸랑이들과 현정부 그리고 방관자로 지내던 우리에게 경종을 울릴수 있는 유일한 커뮤니케이션 방법이었다고 생각한다.<br><br>그의 죽음은 많은 면을 깨닫게 한다. 현정부가 몰아서 그랬느니 , 인간이기때문에 몰리어서 죽었느니...<br>노 대통령의 마지막 '강수'를 너무 몰라주고 하는 말이다.<br>어떠한 이유를 들어서도 그의 죽음을 한 인간의 죽음으로 내몰리 않았으면 한다. 눈에 보이는 것만 보는 일부 사람들이 하는 말중에 한나라의 대통령이 자신의 안위만 걱정하고 측근들만 걱정하여 자진을 선택했다고 하는 말을 하곤 하는데..<br>그분이 운명이다라고 적었던건 어쩔수 없을을 이야기하며 피하려 했던것이 아니라 오래된 생각이었다고 말씀하신것처럼 말그대로 마지막 '강수' 라고 생각해 주는 사람이 많을때 비로소 그 곳에서 웃으실수 있을꺼라 생각한다.<br><br><br/><br/>tag : <a href="/tag/노무현" rel="tag">노무현</a>,&nbsp;<a href="/tag/사람" rel="tag">사람</a>,&nbsp;<a href="/tag/신뢰" rel="tag">신뢰</a>			 ]]> 
		</description>
		<category>노무현</category>
		<category>사람</category>
		<category>신뢰</category>

		<comments>http://tommylee.egloos.com/1501950#comments</comments>
		<pubDate>Thu, 28 May 2009 03:36:36 GMT</pubDate>
		<dc:creator>TommyLee</dc:creator>
	</item>
	<item>
		<title><![CDATA[ FULLTEXT 검색 ]]> </title>
		<link>http://tommylee.egloos.com/1481409</link>
		<guid>http://tommylee.egloos.com/1481409</guid>
		<description>
			<![CDATA[ 
  <table class="zv3_viewform" cellspacing="0" cellpadding="0" width="95%"><tbody><tr><td style="WORD-BREAK: break-all" bgcolor="white"><p align="center"><strong></strong>&nbsp;</p></td></tr><tr><td bgcolor="white" height="1" colspan="2"><img border="0" src="http://dbakorea.pe.kr/bbs/skin/nzeo_ver3/t.gif" height="1"></td></tr></tbody></table><img border="0" src="http://dbakorea.pe.kr/bbs/skin/nzeo_ver3/t.gif" height="2"><br><table style="TABLE-LAYOUT: fixed" cellspacing="0" cellpadding="3" width="95%" bgcolor="#efefef" height="100"><tbody><tr bgcolor="white"><td style="PADDING-BOTTOM: 10px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; WORD-BREAK: break-all; PADDING-TOP: 10px"><table style="TABLE-LAYOUT: fixed" border="0" cellspacing="0" cellpadding="0" width="100%"><colgroup><col width="100%"></col><tbody><tr><td valign="top">OS: Microsoft Windows 2000 5.00.2195 Service Pack 3 <br>MySQL: 4.0.7-gamma-nt <br>CPU: x86 Family 6 Model 8 Stepping 10 <br>RAM: 512MB <br>작성자: 강명규(kang@dbakorea.pe.kr) <br><br><br>FULLTEXT search<br><br>fulltext검색은 쉬운 말로 자연어 검색(natural language search)이다.<br><br>FULLTEXT 인덱스는 MyISAM table type을 가진 테이블에서만 지원되고,<br>CHAR, VARCHAR, TEXT column type을 가진 컬럼에서만 생성될 수 있다.<br>char는 언급되어 있으나, 직접 확인하진 못했으므로 함 해보기 바란다.<br><br>Feature&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Version<br>Basic FULLTEXT searching&nbsp;&nbsp;&nbsp;&nbsp;3.23.23<br>Configurable parameters&nbsp;&nbsp;&nbsp;&nbsp; 4.0.0<br>Boolean searches&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.0.1<br>Phrase searches&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.0.2<br><br>Server variables<br>길이가 ft_min_word_len ~ ft_max_word_len 의 범위에 있는 것들만 검색 대상이 됨.<br>ft_min_word_len : (디폴트:4)<br>ft_max_word_len : (디폴트:254)<br><br><br>서버변수 변경<br>1. C:\WINNT\my.ini변경후 서버 restart(UNIX: /etc/my.cnf)<br>[mysqld]<br>set-variable = ft_min_word_len=5<br><br>2. 기존 fulltext인덱스 변경<br>REPAIR TABLE 테이블명 USE_FRM;<br><br><br>FULLTEXT 인덱스는 테이블 생성후, 대량의 데이터를 로드한 다음에 생성해주는 것이 좋다.<br>이 방식은 fulltext인덱스만이 아닌 다른 인덱스에도 동일하게 적용된다.<br><br>CREATE TABLE articles (<br>id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,<br>title VARCHAR(200),<br>body TEXT,<br>FULLTEXT (title,body)<br>);<br><br>INSERT INTO articles VALUES<br>(0,'MySQL Tutorial', 'DBMS stands for DataBase ...'),<br>(0,'How To Use MySQL Efficiently', 'After you went through a ...'),<br>(0,'Optimising MySQL','In this tutorial we will show ...'),<br>(0,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),<br>(0,'MySQL vs. YourSQL', 'In the following database comparison ...'),<br>(0,'MySQL Security', 'When configured properly, MySQL ...');<br><br><br>mysql&gt; select * from articles;<br>+----+------------------------------+------------------------------------------+<br>| id | title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| body&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>+----+------------------------------+------------------------------------------+<br>|&nbsp;&nbsp;1 | MySQL Tutorial&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | DBMS stands for DataBase ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>|&nbsp;&nbsp;2 | How To Use MySQL Efficiently | After you went through a ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>|&nbsp;&nbsp;3 | Optimising MySQL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | In this tutorial we will show ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>|&nbsp;&nbsp;4 | 1001 MySQL Tricks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 1. Never run mysqld as root. 2. ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>|&nbsp;&nbsp;5 | MySQL vs. YourSQL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| In the following database comparison ... |<br>|&nbsp;&nbsp;6 | MySQL Security&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | When configured properly, MySQL ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>+----+------------------------------+------------------------------------------+<br>6 rows in set (0.00 sec)<br><br><br>match에는 검색될 컬럼(들)을 적고, against에는 검색할 단어를 적는다.<br>match에 컬럼순서는 상관없고, against는 대소문자 관계없이 검색된다.<br><br>mysql&gt; SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database');<br>+----+-------------------+------------------------------------------+<br>| id | title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | body&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>+----+-------------------+------------------------------------------+<br>|&nbsp;&nbsp;5 | MySQL vs. YourSQL | In the following database comparison ... |<br>|&nbsp;&nbsp;1 | MySQL Tutorial&nbsp;&nbsp;&nbsp;&nbsp;| DBMS stands for DataBase ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>+----+-------------------+------------------------------------------+<br>2 rows in set (0.00 sec)<br><br><br>검색된 결과는 Relevance values 라는 값에 의해 정렬되는데 이것은 검색결과의 정확도를 의미한다고 보면 되겠다.<br>0의 값은 아무런 관련이 없다는 뜻이고, 계산기준은 다음과 같다.<br>row내에 단어의 수, 해당 row내의 unique한 단어수, collection내의 총단어수, 특정 단어를 포함하는 문서(rows)의 수.<br>번역하긴 했는데 정확히 무슨 말이라는 건지.. --;<br><br>위의 결과에 대해 Relevance values를 알아보면 다음과 같다.<br>id=5가 가장 큰 값이므로, 위에서 제일 처음에 표시 되었음을 알 수 있다. 0은 관련없는 것들이므로 검색결과에서<br>제외되었음도 봐두자.<br><br>mysql&gt; SELECT id, MATCH (title,body) AGAINST ('database') from articles;<br>+----+-----------------------------------------+<br>| id | MATCH (title,body) AGAINST ('database') |<br>+----+-----------------------------------------+<br>|&nbsp;&nbsp;1 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.65545834044456 |<br>|&nbsp;&nbsp;2 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 |<br>|&nbsp;&nbsp;3 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 |<br>|&nbsp;&nbsp;4 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 |<br>|&nbsp;&nbsp;5 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.66266459031789 |<br>|&nbsp;&nbsp;6 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 |<br>+----+-----------------------------------------+<br>6 rows in set (0.00 sec)<br><br><br>검색에 사용되는 단어는 문자,숫자,', _ 이다.<br>검색에서 제외되는 단어(stopword)는 너무 짧은 단어(디폴트로 3단어이하, 서버변수 ft_min_word_len에서 지정)<br>이거나, stopword list에 포함된 단어들(the,..)이다.<br>자주 사용되는 단어나 문법적인 관계에 쓰이는 단어는 검색시 비중이 낮고,<br>드물게 사용되는 단어(용어, 학술어, ...)는 높은 비중을 가진다. 이 비중(weight)은 Relevance계산시 이용된다.<br><br><br>mysql&gt; SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('MySQL');<br>Empty set (0.00 sec)<br><br>분명히 mysql이라는 단어가 존재함에도 불구하고, 위의 질의는 아무런 결과를 리턴하지 않는다.<br>이유는 MySQL이라는 단어가 너무 많이 존재하기 때문이다. 검색어가 rows에 반이 넘게 존재하면, <br>stopword로 취급된다.(50% threshold)<br><br><br>4.0.1이상부터는 in boolean mode 를 사용하면 50% threshold가 적용되지 않으며 다음과 같이 검색결과를 얻을 수 있다.<br>boolean mode에서는 FULLTEXT인덱스가 걸린 컬럼이 아니더라도 검색할 수 있다. 하지만 느려진다.<br>또한, 검색결과는 Relevance values에 의한 정렬이 이루어지지 않는다.<br><br>mysql&gt; SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('MySQL' IN BOOLEAN MODE);<br>+----+------------------------------+------------------------------------------+<br>| id | title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| body&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>+----+------------------------------+------------------------------------------+<br>|&nbsp;&nbsp;1 | MySQL Tutorial&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | DBMS stands for DataBase ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>|&nbsp;&nbsp;2 | How To Use MySQL Efficiently | After you went through a ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>|&nbsp;&nbsp;3 | Optimising MySQL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | In this tutorial we will show ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>|&nbsp;&nbsp;4 | 1001 MySQL Tricks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 1. Never run mysqld as root. 2. ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>|&nbsp;&nbsp;5 | MySQL vs. YourSQL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| In the following database comparison ... |<br>|&nbsp;&nbsp;6 | MySQL Security&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | When configured properly, MySQL ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>+----+------------------------------+------------------------------------------+<br>6 rows in set (0.00 sec)<br><br><br>boolean mode에서는, 검색에서 제외할 단어는 -로, 검색에 포함될 단어는 +로 지정할 수도 있다.<br>mysql&gt; SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+mysql -tutorial' in boolean mode);<br><br>+----+------------------------------+------------------------------------------+<br>| id | title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| body&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>+----+------------------------------+------------------------------------------+<br>|&nbsp;&nbsp;2 | How To Use MySQL Efficiently | After you went through a ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>|&nbsp;&nbsp;4 | 1001 MySQL Tricks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 1. Never run mysqld as root. 2. ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>|&nbsp;&nbsp;5 | MySQL vs. YourSQL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| In the following database comparison ... |<br>|&nbsp;&nbsp;6 | MySQL Security&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | When configured properly, MySQL ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>+----+------------------------------+------------------------------------------+<br>4 rows in set (0.00 sec)<br><br><br>+,- 와 더불어 다음의 operator도 사용할 수 있다.<br>+ : 검색시 반드시 포함될 단어<br>- : 검색시 제외될 단어<br>&lt; : 단어의 검색능력에 대한 기여도(contribution)를 감소시킴<br>&gt; : 단어의 검색능력에 대한 기여도(contribution)를 감소시킴<br>(): 검색 단어들을 subexpressions으로 그룹화시킴<br>~ : negative 오퍼레이터로 작용. 검색능력에 대한 기여도를 음수로 만듬.<br>&nbsp;&nbsp;&nbsp;&nbsp;-와 유사하지만 제외되지는 않음. noise word를 의미할때 사용될 수 있다.<br>* : 일반적인 유닉스 쉘상의 기능과 동일(truncation operator)<br>" : ""로 쌓인 순서대로 있는 것만 검색됨.<br><br>예)<br>apple banana <br>find rows that contain at least one of these words. <br><br>+apple +juice <br>... both words. <br><br>+apple macintosh <br>... word ``apple'', but rank it higher if it also contain ``macintosh''. <br><br>+apple -macintosh <br>... word ``apple'' but not ``macintosh''. <br><br>+apple +(&gt;pie &lt;strudel) <br>... ``apple'' and ``pie'', or ``apple'' and ``strudel'' (in any order), but rank ``apple pie'' higher than ``apple strudel''. <br><br>apple* <br>... ``apple'', ``apples'', ``applesauce'', and ``applet''. <br><br>"some words" <br>... ``some words of wisdom'', but not ``some noise words''. <br><br><br>개인적인 견해<br>multi-byte문자인 한글을 사용하는 우리나라에서는 이 기능이 필요없다.<br>자연어검색이 안된다. MS-SQL에서도 한글의 자연어검색은 안되는 것으로 알고 있는데 지금도 그러려나..<br>암튼 영어가 아니라면, 사용하지 않는 것이 좋을 것이다. 당연히 성능도 떨어지는 것은 자명한 것이고..<br>stopword라는 검색시 제외되는 단어는 현재 소스의 변경을 통해서만 가능했다.<br>별도의 list file을 유지하는 것이 어떨까 싶네..<br><br><br>Reference:<br>MySQL By Paul Dubois. Published by Sams. <br>MySQL Online Manuals.<br><!--"<--></td></tr></tbody></table><br>This article comes from dbakorea.pe.kr (Leave this line as is) <br><br></td></tr></tbody></table>			 ]]> 
		</description>
		<category>SQL(MySQL)</category>

		<comments>http://tommylee.egloos.com/1481409#comments</comments>
		<pubDate>Mon, 11 May 2009 10:59:33 GMT</pubDate>
		<dc:creator>TommyLee</dc:creator>
	</item>
	<item>
		<title><![CDATA[ D.3. Restrictions on Subqueries ]]> </title>
		<link>http://tommylee.egloos.com/1476671</link>
		<guid>http://tommylee.egloos.com/1476671</guid>
		<description>
			<![CDATA[ 
  <div lang="en" class="section"><div class="titlepage"><div><div><h2 class="title"><a name="subquery-restrictions"></a>&nbsp;</h2></div></div></div><a class="indexterm" name="id4456956"></a><a class="indexterm" name="id4456964"></a><div class="itemizedlist"><ul><li><p>In MySQL 5.1 before 5.1.16, if you compare a <code class="literal">NULL</code> value to a subquery using <code class="literal">ALL</code>, <code class="literal">ANY</code>, or <code class="literal">SOME</code>, and the subquery returns an empty result, the comparison might evaluate to the non-standard result of <code class="literal">NULL</code> rather than to <code class="literal">TRUE</code> or <code class="literal">FALSE</code>. As of 5.1.16, the comparison evaluates to <code class="literal">TRUE</code> or <code class="literal">FALSE</code> except for subqueries inside <code class="literal">IS NULL</code>, such as this: </p><pre class="programlisting">SELECT ... WHERE NULL IN (SELECT ...) IS NULL</pre><p>As of 5.1.32, the <code class="literal">IS NULL</code> limitation is removed and the comparison evaluates to <code class="literal">TRUE</code> or <code class="literal">FALSE</code>. </p></li><li><p>A subquery's outer statement can be any one of: <a title="12.2.8.&nbsp;SELECT Syntax" href="http://dev.mysql.com/doc/refman/5.1/en/select.html"><code class="literal">SELECT</code></a>, <a title="12.2.5.&nbsp;INSERT Syntax" href="http://dev.mysql.com/doc/refman/5.1/en/insert.html"><code class="literal">INSERT</code></a>, <a title="12.2.11.&nbsp;UPDATE Syntax" href="http://dev.mysql.com/doc/refman/5.1/en/update.html"><code class="literal">UPDATE</code></a>, <a title="12.2.2.&nbsp;DELETE Syntax" href="http://dev.mysql.com/doc/refman/5.1/en/delete.html"><code class="literal">DELETE</code></a>, <a title="12.5.4.&nbsp;SET Syntax" href="http://dev.mysql.com/doc/refman/5.1/en/set-option.html"><code class="literal">SET</code></a>, or <a title="12.2.3.&nbsp;DO Syntax" href="http://dev.mysql.com/doc/refman/5.1/en/do.html"><code class="literal">DO</code></a>. </p></li><li><p>Subquery optimization for <code class="literal">IN</code> is not as effective as for the <code class="literal">=</code> operator or for the <a href="http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_in"><code class="literal">IN(<em class="replaceable"><code>value_list</code></em>)</code></a> operator. </p><p>A typical case for poor <code class="literal">IN</code> subquery performance is when the subquery returns a small number of rows but the outer query returns a large number of rows to be compared to the subquery result. </p><p>The problem is that, for a statement that uses an <code class="literal">IN</code> subquery, the optimizer rewrites it as a correlated subquery. Consider the following statement that uses an uncorrelated subquery: </p><pre class="programlisting">SELECT ... FROM t1 WHERE t1.a IN (SELECT b FROM t2);</pre><p>The optimizer rewrites the statement to a correlated subquery: </p><pre class="programlisting">SELECT ... FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.b = t1.a);</pre><p>If the inner and outer queries return <em class="replaceable"><code>M</code></em> and <em class="replaceable"><code>N</code></em> rows, respectively, the execution time becomes on the order of <code class="literal">O(<em class="replaceable"><code>M</code></em>×<em class="replaceable"><code>N</code></em>)</code>, rather than <code class="literal">O(<em class="replaceable"><code>M</code></em>+<em class="replaceable"><code>N</code></em>)</code> as it would be for an uncorrelated subquery. </p><p>An implication is that an <code class="literal">IN</code> subquery can be much slower than a query written using an <a href="http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_in"><code class="literal">IN(<em class="replaceable"><code>value_list</code></em>)</code></a> operator that lists the same values that the subquery would return. </p></li><li><p>In general, you cannot modify a table and select from the same table in a subquery. For example, this limitation applies to statements of the following forms: </p><pre class="programlisting">DELETE FROM t WHERE ... (SELECT ... FROM t ...);UPDATE t ... WHERE col = (SELECT ... FROM t ...);{INSERT|REPLACE} INTO t (SELECT ... FROM t ...);</pre><p>Exception: The preceding prohibition does not apply if you are using a subquery for the modified table in the <code class="literal">FROM</code> clause. Example: </p><pre class="programlisting">UPDATE t ... WHERE col = (SELECT * FROM (SELECT ... FROM t...) AS _t ...);</pre><p>Here the prohibition does not apply because the result from a subquery in the <code class="literal">FROM</code> clause is stored as a temporary table, so the relevant rows in <code class="literal">t</code> have already been selected by the time the update to <code class="literal">t</code> takes place. </p></li><li><p>Row comparison operations are only partially supported: </p><div class="itemizedlist"><ul><li><p>For <code class="literal"><em class="replaceable"><code>expr</code></em> IN (<em class="replaceable"><code>subquery</code></em>)</code>, <em class="replaceable"><code>expr</code></em> can be an <em class="replaceable"><code>n</code></em>-tuple (specified via row constructor syntax) and the subquery can return rows of <em class="replaceable"><code>n</code></em>-tuples. </p></li><li><p>For <code class="literal"><em class="replaceable"><code>expr</code></em> <em class="replaceable"><code>op</code></em> {ALL|ANY|SOME} (<em class="replaceable"><code>subquery</code></em>)</code>, <em class="replaceable"><code>expr</code></em> must be a scalar value and the subquery must be a column subquery; it cannot return multiple-column rows. </p></li></ul></div><p>In other words, for a subquery that returns rows of <em class="replaceable"><code>n</code></em>-tuples, this is supported: </p><pre class="programlisting">(<em class="replaceable"><code>val_1</code></em>, ..., <em class="replaceable"><code>val_n</code></em>) IN (<em class="replaceable"><code>subquery</code></em>)</pre><p>But this is not supported: </p><pre class="programlisting">(<em class="replaceable"><code>val_1</code></em>, ..., <em class="replaceable"><code>val_n</code></em>) <em class="replaceable"><code>op</code></em> {ALL|ANY|SOME} (<em class="replaceable"><code>subquery</code></em>)</pre><p>The reason for supporting row comparisons for <code class="literal">IN</code> but not for the others is that <code class="literal">IN</code> is implemented by rewriting it as a sequence of <a href="http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#operator_equal"><code class="literal">=</code></a> comparisons and <a href="http://dev.mysql.com/doc/refman/5.1/en/logical-operators.html#operator_and"><code class="literal">AND</code></a> operations. This approach cannot be used for <code class="literal">ALL</code>, <code class="literal">ANY</code>, or <code class="literal">SOME</code>. </p></li><li><p>Row constructors are not well optimized. The following two expressions are equivalent, but only the second can be optimized: </p><pre class="programlisting">(col1, col2, ...) = (val1, val2, ...)col1 = val1 AND col2 = val2 AND ...</pre></li><li><p>Subqueries in the <code class="literal">FROM</code> clause cannot be correlated subqueries. They are materialized (executed to produce a result set) before evaluating the outer query, so they cannot be evaluated per row of the outer query. </p></li><li><p>The optimizer is more mature for joins than for subqueries, so in many cases a statement that uses a subquery can be executed more efficiently if you rewrite it as a join. </p><p>An exception occurs for the case where an <code class="literal">IN</code> subquery can be rewritten as a <code class="literal">SELECT DISTINCT</code> join. Example: </p><pre class="programlisting">SELECT col FROM t1 WHERE id_col IN (SELECT id_col2 FROM t2 WHERE <em class="replaceable"><code>condition</code></em>);</pre><p>That statement can be rewritten as follows: </p><pre class="programlisting">SELECT DISTINCT col FROM t1, t2 WHERE t1.id_col = t2.id_col AND <em class="replaceable"><code>condition</code></em>;</pre><p>But in this case, the join requires an extra <code class="literal">DISTINCT</code> operation and is not more efficient than the subquery. </p></li><li><p>Possible future optimization: MySQL does not rewrite the join order for subquery evaluation. In some cases, a subquery could be executed more efficiently if MySQL rewrote it as a join. This would give the optimizer a chance to choose between more execution plans. For example, it could decide whether to read one table or the other first. </p><p>Example: </p><pre class="programlisting">SELECT a FROM outer_table AS otWHERE a IN (SELECT a FROM inner_table AS it WHERE ot.b = it.b);</pre><p>For that query, MySQL always scans <code class="literal">outer_table</code> first and then executes the subquery on <code class="literal">inner_table</code> for each row. If <code class="literal">outer_table</code> has a lot of rows and <code class="literal">inner_table</code> has few rows, the query probably will not be as fast as it could be. </p><p>The preceding query could be rewritten like this: </p><pre class="programlisting">SELECT a FROM outer_table AS ot, inner_table AS itWHERE ot.a = it.a AND ot.b = it.b;</pre><p>In this case, we can scan the small table (<code class="literal">inner_table</code>) and look up rows in <code class="literal">outer_table</code>, which will be fast if there is an index on <code class="literal">(ot.a,ot.b)</code>. </p></li><li><p>Possible future optimization: A correlated subquery is evaluated for each row of the outer query. A better approach is that if the outer row values do not change from the previous row, do not evaluate the subquery again. Instead, use its previous result. </p></li><li><p>Possible future optimization: A subquery in the <code class="literal">FROM</code> clause is evaluated by materializing the result into a temporary table, and this table does not use indexes. This does not allow the use of indexes in comparison with other tables in the query, although that might be useful. </p></li><li><p>Possible future optimization: If a subquery in the <code class="literal">FROM</code> clause resembles a view to which the merge algorithm can be applied, rewrite the query and apply the merge algorithm so that indexes can be used. The following statement contains such a subquery: </p><pre class="programlisting">SELECT * FROM (SELECT * FROM t1 WHERE t1.t1_col)          AS _t1, t2 WHERE t2.t2_col;</pre><p>The statement can be rewritten as a join like this: </p><pre class="programlisting">SELECT * FROM t1, t2 WHERE t1.t1_col AND t2.t2_col;</pre><p>This type of rewriting would provide two benefits: </p><div class="itemizedlist"><ul><li><p>It avoids the use of a temporary table for which no indexes can be used. In the rewritten query, the optimizer can use indexes on <code class="literal">t1</code>. </p></li><li><p>It gives the optimizer more freedom to choose between different execution plans. For example, rewriting the query as a join allows the optimizer to use <code class="literal">t1</code> or <code class="literal">t2</code> first. </p></li></ul></div></li><li><p>Possible future optimization: For <code class="literal">IN</code>, <code class="literal">= ANY</code>, <code class="literal">&lt;&gt; ANY</code>, <code class="literal">= ALL</code>, and <code class="literal">&lt;&gt; ALL</code> with uncorrelated subqueries, use an in-memory hash for a result or a temporary table with an index for larger results. Example: </p><pre class="programlisting">SELECT a FROM big_table AS btWHERE non_key_field IN (SELECT non_key_field FROM <em class="replaceable"><code>table</code></em> WHERE <em class="replaceable"><code>condition</code></em>)</pre><p>In this case, we could create a temporary table: </p><pre class="programlisting">CREATE TABLE t (key (non_key_field))(SELECT non_key_field FROM <em class="replaceable"><code>table</code></em> WHERE <em class="replaceable"><code>condition</code></em>)</pre><p>Then, for each row in <code class="literal">big_table</code>, do a key lookup in <code class="literal">t</code> based on <code class="literal">bt.non_key_field</code>. </p></li></ul></div></div>			 ]]> 
		</description>
		<category>SQL(MySQL)</category>

		<comments>http://tommylee.egloos.com/1476671#comments</comments>
		<pubDate>Thu, 07 May 2009 10:52:44 GMT</pubDate>
		<dc:creator>TommyLee</dc:creator>
	</item>
	<item>
		<title><![CDATA[ MyODBC options ]]> </title>
		<link>http://tommylee.egloos.com/1476516</link>
		<guid>http://tommylee.egloos.com/1476516</guid>
		<description>
			<![CDATA[ 
  <p><b>MyODBC options (taken from the original MyODBC readme.win)</b></p><p>&nbsp;</p><p>MyODBC has a new nice interface to the different MyODBC options. (On Unix or when using DSN-Less connection strings in ASP or VB, the option is still a number.</p><p>&nbsp;</p><p>The Option argument is used to tell MyODBC that the client isn\t 100% ODBC compliant. The following options are listed in the same order as they appear in the MyODBC connect screen: </p><p>&nbsp;</p><p><b>1</b> The client can\t handle that MyODBC returns the real width of a column. </p><p><b>2</b> The client can\t handle that MySQL returns the true value of affected rows. If this flag is set then MySQL returns \found rows\ instead. One must have MySQL 3.21.14 or newer to get this to work. </p><p><b>4</b> Make a debug log in c:\myodbc.log. This is the same as putting</p><p>MYSQL_DEBUG=d:t:O,c::\myodbc.log in AUTOEXEC.BAT </p><p><b>8</b> Don\t set any packet limit for results and parameters. </p><p><b>16</b> Don\t prompt for questions even if driver would like to prompt </p><p>32 Simulate a ODBC 1.0 driver in some context. </p><p><b>64</b> Ignore use of database name in \database.table.column\. (MySQL 3.22) </p><p><b>128</b> Force use of ODBC manager cursors (experimental) </p><p><b>256</b> Remove use of extended fetch (experimental) </p><p><b>512</b> Pad CHAR fields to full column length. </p><p><b>1024</b> SQLDescribeCol() will return fully qualifed column names </p><p><b>2048</b> Use compressed protocol (if server supports it) </p><p><b>4096</b> Tell server to ignore space after function name and before \(\ (needed by PowerBuilder). This will make all function names keywords! </p><p><b>8192</b> Connect with named pipes to a mysqld server running on NT. </p><p><b>16384</b> Change LONGLONG columns to INT columns, as some applications can\t handle LONGLONG or BIGINT. </p><p><b>32768</b> Return \user\ as Table_qualifier and Table_owner from SQLTables (test) </p><p><b>65536</b> Read my.cnf </p><p><b>131072</b> Add some extra safety checks (should not bee needed but...) </p><p><b>262144</b> Disable the new transaction support (To avoid newly introduced bugs) </p><p>&nbsp;</p><p>If you want to have many options, you should add the above flags!</p><p>For example Option 12 (4+8) gives you debugging without package limits!</p><p>&nbsp;</p><p>Some clients that must set some MySQL options to work properly. On Win32 one have to check the specific option in the ODBC manager for the database connection.</p><p>&nbsp;</p><p><b>BDE applications: 1 or 3</b> (Don\t optimize column widths + Return matching rows) </p><p><b>Visual Objects: 1</b> (Don\t optimize column widths) </p><p>Vision: 2 (Return matching rows) </p><p><b>Active Server Pages (ASP): 2</b> (Return matching rows) </p><p><b>Access 7.0: 2</b> (Return matching rows) </p><p><b>Access 2.0: 2+32</b> (Return matching rows + Simulate ODBC 1.0) </p><p><b>ODBCETE32 + quiktest: 512+1</b> (Don\t optimize column widths + \Pad CHAR) </p><p><b>Visual Basic / ADO: 2+16384</b> (Return matching rows + Change BIGINT to INT) </p><p>&nbsp;</p><p>Based on my experience with ASP/MyODBC, I should advise to use :</p><p><b>OPTION=16387</b> for ASP/ADO with MyODBC 2.50 drivers,</p><p><b>OPTION=3</b> for ASP/ADO with MyODBC 3.51 drivers (which now supports BIGINT).</p><p>See below for connection strings examples.</p><p>&nbsp;</p><p>--------------------------------------------------------------------------------</p><p>&nbsp;</p><p>Here are many ways of connecting to MySQL databases through ASP</p><p>when you have MyODBC installed on the web server at least :</p><p>&nbsp;</p><p><b>javascript connection (ODBC DSN required)</b></p><p>&nbsp;</p><p>&lt;%@ LANGUAGE = JScript%&gt;</p><p>&lt;html&gt;</p><p>&lt;%</p><p>var conn,result;</p><p>conn = Server.CreateObject(\<span style="BACKGROUND-COLOR: yellow; COLOR: brown; FONT-WEIGHT: bold">ADODB.Connection</span>\);</p><p>conn.Open(\DSN=YOUR_DSN;User=YOUR_ID;Password=YOUR_PWD\);</p><p>result=conn.Execute(\SELECT * FROM table\);</p><p>while (!result.eof) {</p><p>Response.Write(result(\FIELD1\) + \ : \ + result(\FIELD2\) + \&amp;nbsp;\ + result(\FIELD3\) + \&lt;BR&gt;\);</p><p>result.MoveNext();</p><p>}</p><p>result.close();</p><p>%&gt;</p><p>&lt;/body&gt;</p><p>&lt;/html&gt;</p><p>&nbsp;</p><p>--------------------------------------------------------------------------------</p><p>&nbsp;</p><p><b>vbscript connection (ODBC DSN required)</b></p><p>&nbsp;</p><p>&lt;%@ LANGUAGE=\VBSCRIPT\ %&gt;</p><p>&lt;%</p><p>Set MyConn = Server.CreateObject(\<span style="BACKGROUND-COLOR: yellow; COLOR: brown; FONT-WEIGHT: bold">ADODB.Connection</span>\)</p><p>MyConn.Open \YOUR_DSN\</p><p>SQL_query = \SELECT * FROM your_table WHERE your_field LIKE \%abc%\;\</p><p>Set RS = MyConn.Execute(SQL_query)</p><p>%&gt;</p><p>&lt;HTML&gt;</p><p>&lt;HEAD&gt;</p><p>&lt;TITLE&gt;Document Title&lt;/TITLE&gt;</p><p>&lt;/HEAD&gt;</p><p>&lt;BASEFONT FACE=\arial\&gt;</p><p>&lt;BODY&gt;</p><p>&nbsp;</p><p>&lt;p&gt;&lt;b&gt;&lt;% Response.Write SQL_query %&gt;&lt;/b&gt;&lt;/p&gt;</p><p>&nbsp;</p><p>&lt;%while not RS.eof%&gt;</p><p>&lt;%=RS(\FIELD1\)%&gt;&amp;nbsp;&lt;%=RS(\FIELD2\)%&gt;&amp;nbsp;&lt;%=RS(\FIELD3\)%&gt;&lt;br&gt;</p><p>&lt;%RS.MoveNext%&gt;</p><p>&lt;%wend%&gt;</p><p>&nbsp;</p><p>&lt;%</p><p>RS.Close</p><p>MyConn.Close</p><p>%&gt;</p><p>&lt;/BODY&gt;</p><p>&lt;/HTML&gt;</p><p>&nbsp;</p><p>&nbsp;</p><p>--------------------------------------------------------------------------------</p><p>&nbsp;</p><p><b>vbscript connection (DSN LESS)</b></p><p>&nbsp;</p><p>&lt;%@ LANGUAGE=\VBSCRIPT\ %&gt;</p><p>&lt;% </p><p>strConnection = \driver={MySQL};server=212.155.113.2;uid=YOUR_ID;pwd=YOUR_PWD;database=YOUR_DB;option=NUM\</p><p>Set adoDataConn = Server.CreateObject(\<span style="BACKGROUND-COLOR: yellow; COLOR: brown; FONT-WEIGHT: bold">ADODB.Connection</span>\) </p><p>adoDataConn.Open strConnection </p><p>&nbsp;</p><p>strQuery = \SELECT * FROM your_table;\</p><p>Set RS = adoDataConn.Execute(strQuery) </p><p>%&gt; <div class="autosourcing-stub"><p style="PADDING-BOTTOM: 0px; FONT-STYLE: normal; MARGIN: 11px 0px 7px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: Dotum; FONT-SIZE: 12px; FONT-WEIGHT: normal; PADDING-TOP: 0px"><strong style="PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 7px; PADDING-TOP: 0px">[출처]</strong> <a href="http://blog.naver.com/luckyrockguy/40016352716" target="_blank">Using MySQL with ASP and MyODBC</a><span style="PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 7px; PADDING-TOP: 0px">|</span><strong style="PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 7px; PADDING-TOP: 0px">작성자</strong> <a href="http://blog.naver.com/luckyrockguy" target="_blank">후류샤인</a></p></div><p></p>			 ]]> 
		</description>
		<category>SQL(MySQL)</category>

		<comments>http://tommylee.egloos.com/1476516#comments</comments>
		<pubDate>Thu, 07 May 2009 06:57:20 GMT</pubDate>
		<dc:creator>TommyLee</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Declare ]]> </title>
		<link>http://tommylee.egloos.com/1468902</link>
		<guid>http://tommylee.egloos.com/1468902</guid>
		<description>
			<![CDATA[ 
  <pre><span style="FONT-FAMILY: 굴림; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="COLOR: #a1520f"><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN">DECLARE </span><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN">condition_name</span></em><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"> CONDITION FOR </span><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN">condition_value</span></em></pre><pre><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN"></span></em><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><?xml:namespace prefix = u1 /><u1:p></u1:p><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></span>&nbsp;</pre><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><u1:p>&nbsp;</u1:p></span><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN">condition_value</span></em><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN">:</span></pre><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"></span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span>&nbsp;</pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>SQLSTATE [VALUE] </span><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN">sqlstate_value</span></em></pre><pre><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN"></span></em><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><u1:p></u1:p><o:p></o:p></span>&nbsp;</pre><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>| </span><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN">mysql_error_code</span></em><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre></span></span></pre><div><span style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 9pt; mso-ansi-language: EN">이 명령문은 특정 핸들링을 필요로 하는 컨디션을 표시한다<span lang="EN">. </span>이것은 명기된 에러 컨디션이 <br>있는 이름과 관련을 갖는다<span lang="EN">. </span>그 이름은 </span><code><span style="FONT-FAMILY: 굴림; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="COLOR: #0e4075">DECLARE HANDLER</span></span></code><span style="FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"> </span><span style="FONT-SIZE: 9pt; mso-ansi-language: EN">명령문에서 순차적으로 사용<br>될 수 있다<span lang="EN">.<span style="mso-spacerun: yes">&nbsp; </span>Section&nbsp;17.2.8.2, “<code><span style="FONT-FAMILY: 굴림; mso-bidi-font-size: 9.0pt; mso-ansi-font-size: 9.0pt"><span style="COLOR: #0e4075">DECLARE</span></span></code> Handlers” </span>참조<span lang="EN">. <o:p></o:p></span></span></span></div><div><span style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN">A </span><em><span style="FONT-FAMILY: 굴림; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN">condition_value</span></em><span style="FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"> </span><span style="FONT-SIZE: 9pt; mso-ansi-language: EN">는 <span lang="EN">SQLSTATE </span>값 또는<span lang="EN"> MySQL </span>에러 코드가 될 수도 있다<span lang="EN">.<br><br>DECLARE handler_type HANDLER FOR condition_value[,...] statement handler_type:&nbsp;&nbsp;&nbsp;&nbsp; CONTINUE&nbsp;&nbsp; | EXIT&nbsp;&nbsp; | UNDO condition_value:&nbsp;&nbsp;&nbsp;&nbsp; SQLSTATE [VALUE] sqlstate_value&nbsp;&nbsp; | condition_name&nbsp;&nbsp; | SQLWARNING&nbsp;&nbsp; | NOT FOUND&nbsp;&nbsp; | SQLEXCEPTION&nbsp;&nbsp; | mysql_error_code DECLARE ... HANDLER 명령문은 핸들러를 지정하는데, 각 핸들러는 하나 또는 여러 개의 컨디션을 다루게 할 수 있다. 만일 이러한 컨디션 중에서 하나가 발생하면, 지정된 statement 가 실행된다. statement 는 단순 명령문이 될 수도 있고(예를 들어, SET var_name = value), 또는 BEGIN 과 END로 쓰여진 복합 명령문이 될 수도 있다. ( Section 17.2.5, “BEGIN ... END 복합 명령문 신텍스” 참조). <br>CONTINUE 핸들러의 경우, 현 루틴의 실행은 핸들러 명령문의 실행 이후에 진행된다.&nbsp; <br>EXIT 핸들러의 경우는, 핸들러가 선언된 곳의 BEGIN ... END 복합 명령문을 종료시킨다.<br>(이것은 컨디션이 내부의 블록에서 발생될 경우에도 해당된다.) UNDO 핸들러 타입 <br>명령문은 아직 지원되지 않는다.<br>만일 어떠한 핸들러도 선언되지 않은 상태에서 컨디션이 발생하면, 디폴트로 EXIT 핸들러가 <br>실행된다.<br>&nbsp;condition_value 는 아래의 값 중에서 한가지가 될 수 있다: <br>SQLSTATE 값 또는 MySQL 에러 코드. <br>DECLARE ... CONDITION 으로 이전에 표시된 컨디션 이름. Section 17.2.8.1, <br>“DECLARE Conditions” 참조. <br>SQLWARNING 은 01로 시작되는 모든 SQLSTATE 코드의 축약형임. <br>NOT FOUND 는 02로 시작되는 모든 SQLSTATE 코드의 축약형임. <br>SQLEXCEPTION 은 SQLWARNING 또는 NOT FOUND 가 찾지 못하는 모든 <br>SQLSTATE 코드에 대한 축약형임. <br>예제: <br>mysql&gt; CREATE TABLE test.t (s1 int,primary key (s1)); Query OK, 0 rows affected (0.00 sec) mysql&gt; delimiter // mysql&gt; CREATE PROCEDURE handlerdemo ()&nbsp;&nbsp;&nbsp;&nbsp; -&gt; BEGIN&nbsp;&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp; DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp; SET @x = 1;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp; INSERT INTO test.t VALUES (1);&nbsp;&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp; SET @x = 2;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp; INSERT INTO test.t VALUES (1);&nbsp;&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp; SET @x = 3;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; END;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; // Query OK, 0 rows affected (0.00 sec) mysql&gt; CALL handlerdemo()// Query OK, 0 rows affected (0.00 sec) mysql&gt; SELECT @x//&nbsp;&nbsp;&nbsp;&nbsp; +------+&nbsp;&nbsp;&nbsp;&nbsp; | @x&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; +------+&nbsp;&nbsp;&nbsp;&nbsp; | 3&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; +------+&nbsp;&nbsp;&nbsp;&nbsp; 1 row in set (0.00 sec) 위의 예제는 SQLSTATE 23000과 관련된 핸들러이며, 이것은 이중(double) 키 에러를 발생시킨다. @x 는 3이 되며, 이것은 MySQL이 프로시저의 마지막에 실행됨을 보여주는 것이다. 만일DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1; 이 표시되지 않으면, MySQL은 두 번째 INSERT가 PRIMARY KEY 의 제한으로 인해 실패한 후에 디폴트 경로(EXIT)을 실행하게 되며, SELECT @x는 2를 리턴하게 된다. <br>만일 컨디션을 무시하고자 하면, CONTINUE 핸들러를 빈 블록과 연결해서 선언하면 된다. <br>예를 들면: <br>DECLARE CONTINUE HANDLER FOR SQLWARNING BEGIN END;</span></span></span></div><span style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 9pt; mso-ansi-language: EN"><span lang="EN"><div><o:p></o:p></span></span></div></span><div>&nbsp;</div>			 ]]> 
		</description>
		<category>SQL(MySQL)</category>

		<comments>http://tommylee.egloos.com/1468902#comments</comments>
		<pubDate>Fri, 01 May 2009 06:11:19 GMT</pubDate>
		<dc:creator>TommyLee</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Cursor~~~야~~~~~~~~놀자 ]]> </title>
		<link>http://tommylee.egloos.com/1468899</link>
		<guid>http://tommylee.egloos.com/1468899</guid>
		<description>
			<![CDATA[ 
  <div><span style="FONT-SIZE: 9pt; mso-ansi-language: EN"><span style="FONT-FAMILY: 굴림">단순한 커서는 스토어드 프로시저 및 함수 내부에서 지원된다<span lang="EN">. </span>신텍스는 임베디드<span lang="EN"> SQL</span>와 같다<span lang="EN">. </span>커서는 현재까지 어센서티브<span lang="EN">(asensitive)</span>하며<span lang="EN">, </span>읽기 전용<span lang="EN">, </span>및 논<span lang="EN">-</span>스크롤링<span lang="EN">(non-scrolling)</span>하다<span lang="EN">. </span>어센서티브란 서버가 자신의 결과 테이블의 복사본을 만들 수 있거나 또는 만들지 못할 수도 있음을 의미하는 것이다<span lang="EN">. </span>커서는 핸들러를 선언하기 전에 선언되어야 하며<span lang="EN">, </span>변수와 컨디션은 커서 또는 핸들러를 선언하기 전에 선언되어야 한다<span lang="EN">. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></span></span></span></div><div><span style="FONT-SIZE: 9pt; mso-ansi-language: EN"><span style="FONT-FAMILY: 굴림">예제<span lang="EN">: <o:p></o:p></span></span></span></div><pre><span style="FONT-FAMILY: 굴림; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="COLOR: #a1520f"><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN">CREATE PROCEDURE curdemo()</span></pre><?xml:namespace prefix = u1 /><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN">BEGIN</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>DECLARE done INT DEFAULT 0;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>DECLARE a CHAR(16);</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>DECLARE b,c INT;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><u1:p>&nbsp;</u1:p></span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>OPEN cur1;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>OPEN cur2;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><u1:p>&nbsp;</u1:p></span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>REPEAT</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>FETCH cur1 INTO a, b;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>FETCH cur2 INTO c;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>IF NOT done THEN</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>IF b &lt; c THEN</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>INSERT INTO test.t3 VALUES (a,b);</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ELSE</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>INSERT INTO test.t3 VALUES (a,c);</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>END IF;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>END IF;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>UNTIL done END REPEAT;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><u1:p>&nbsp;</u1:p></span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>CLOSE cur1;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="mso-spacerun: yes">&nbsp; </span>CLOSE cur2;</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p></u1:p><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN">END</span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span></pre><u1:p>----------------------------------------------------------------------------<br><span style="FONT-FAMILY: 굴림; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="COLOR: #a1520f"><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN">DECLARE </span><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN">cursor_name</span></em><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"> CURSOR FOR </span><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN">select_statement</span></em></pre><pre><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN"></span></em><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><u1:p></u1:p><o:p></o:p></span>&nbsp;</pre><pre></pre></span><pre></span><span style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 9pt; mso-ansi-language: EN"><span style="COLOR: #000000">이 명령문은 커서를 선언하는 것이다<span lang="EN">. </span>다중 커서는 루틴 내에서 선언될 수도 있으나<span lang="EN">, </span></span></span></span></pre><pre><span style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 9pt; mso-ansi-language: EN"><span lang="EN"></span>주어진 블록내의 각 커서는 반드시 서로 다른 이름을 가져야 한다 <span lang="EN">. </span></span></span></pre><pre><span style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 9pt; mso-ansi-language: EN"><span lang="EN"></span></span><code><span style="FONT-FAMILY: 굴림; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="COLOR: #0e4075">SELECT</span></span></code><span style="FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"> </span><span style="FONT-SIZE: 9pt; mso-ansi-language: EN">명령문은 </span><code><span style="FONT-FAMILY: 굴림; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="COLOR: #0e4075">INTO</span></span></code><span style="FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"> </span><span style="FONT-SIZE: 9pt; mso-ansi-language: EN">구문을 가질 수 없다<span lang="EN">. <br><br>----------------------------------------------------------------------------<br><o:p><pre><span style="FONT-FAMILY: 굴림; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="COLOR: #a1520f">OPEN </span></span><em><span style="FONT-FAMILY: 굴림; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN">cursor_name</span></em><span style="FONT-FAMILY: 굴림; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><o:p></o:p></span></pre><div><span style="FONT-SIZE: 9pt; mso-ansi-language: EN"><span style="FONT-FAMILY: 굴림">이 명령문은 이전에 선언한 커서를 연다<span lang="EN">.<o:p></o:p></span></span></span></div><br>----------------------------------------------------------------------------<br><span style="FONT-FAMILY: 굴림; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"><span style="COLOR: #a1520f"><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN">FETCH </span><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN">cursor_name</span></em><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"> INTO </span><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN">var_name</span></em><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"> [, </span><em><span style="FONT-FAMILY: 돋움체; COLOR: #0e4075; FONT-SIZE: 9pt; mso-ansi-language: EN; mso-bidi-font-family: 굴림체" lang="EN">var_name</span></em><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN">] ...</span></pre><pre><span style="FONT-FAMILY: 돋움체; COLOR: #a1520f; FONT-SIZE: 9pt; mso-ansi-language: EN" lang="EN"></span><span style="FONT-FAMILY: 돋움체; COLOR: #222222" lang="EN-US"><o:p></o:p></span>&nbsp;</pre><pre><u1:p></u1:p></pre></span><pre></span><span style="FONT-SIZE: 9pt; mso-ansi-language: EN"><span style="FONT-FAMILY: 굴림; COLOR: #000000">이 명령문은 지정한 오픈 커서를 이용해서 바로 다음 열<span lang="EN">(</span>만일 열이 존재한다면<span lang="EN">)</span>을</span></span></pre><pre><span style="FONT-SIZE: 9pt; mso-ansi-language: EN"><span style="FONT-FAMILY: 굴림">가져온 다음<span lang="EN">, </span></span></span><span style="FONT-SIZE: 9pt; mso-ansi-language: EN"><span style="FONT-FAMILY: 굴림">커서 포인터를 전진 시킨다<span lang="EN">.<br>----------------------------------------------------------------------------<br><br><br><br><br><br><br><br><br>CLOSE cursor_name<br>이 명령문은 이전에 열어 놓은 커서를 닫는다.<br>만일 확실하게 닫혀지지 않으면, 커서는 커서가 선언된 복합 명령문의 마지막에서 닫히게 된다. </span></span></span></pre></o:p></span></span></span></pre></u1:p></span></span></pre>			 ]]> 
		</description>
		<category>SQL(MySQL)</category>

		<comments>http://tommylee.egloos.com/1468899#comments</comments>
		<pubDate>Fri, 01 May 2009 06:08:07 GMT</pubDate>
		<dc:creator>TommyLee</dc:creator>
	</item>
</channel>
</rss>
