<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>머니버그 솔루션 &amp;gt; TIP &amp;gt; MySQL/Maria DB 팁</title>
<link>http://moneybug.co.kr/bbs/board.php?bo_table=db_tip</link>
<description>머니버그 솔루션 &amp;gt; TIP &amp;gt; MySQL/Maria DB 팁</description>
<language>ko</language>
	<item>
	<title>GROUP BY 쿼리 에러 해결 방법</title>
	<link>http://moneybug.co.kr/bbs/board.php?bo_table=db_tip&amp;wr_id=4</link>
	<description><![CDATA[<h3>GROUP BY 쿼리 에러</h3>
<p> </p>
<p class="console">
Expression  of SELECT list is not in GROUP BY clause and contains nonaggregated column  which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
</p>

<div class="item_label_bar"></div>

<p> </p>
<h3>원인</h3>
<p> </p>
<p><a href="http://jason-heo.github.io/mysql/2014/03/05/char13-mysql-group-by-usage.html" target="_blank" rel="nofollow noreferrer noopener">http://jason-heo.github.io/mysql/2014/03/05/char13-mysql-group-by-usage.html</a></p>
<p>GROUP BY를 사용하는 경우, SELECT할 수 있는 컬럼은 GROUP BY에 나열된 컬럼과 SUM(), COUNT() 같은 집계 함수(Aggregation Function)으로 한정</p>
<p>sql 표준 문법은 group by 사용시 select 의 칼럼중 집계함수에 쓰이는 것을 제외한 모든 칼럼을 기입해야 한다.</p>

<div class="item_label_bar"></div>

<p> </p>
<h3>3. 해결방법 1.</h3>
<p> </p>
<p>쿼리 변경, group by 에 모두 기입</p>
<p class="console">
select col1, col2,  count(col3) from table1 group by col1, col2; # 집계함수 이외의 모든 select 칼럼을 기입 
</p>
<p> </p>
<h3>3. 해결방법 2.</h3>
<p> </p>
<p>쿼리 변경 ,   비 집계 칼럼에 ANY_VALUE() 함수 사용</p>
<p class="console">
select col1, ANY_VALUE(col2),  count(col3) from table1 group by col1;
</p>
<p> </p>
<h3>3. 해결방법 3.</h3>
<p> </p>
<p>mysql 설정 변경</p>
<p class="console">
sql_mode 에서 ONLY_FULL_GROUP_BY 설정을 뺀다.<br />
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';<br />
- 설정파일(my.cnf)에서 ONLY_FULL_GROUP_BY 를 찾아 삭제한다.
</p>

<p> </p>
<ul><li>참고 <a href="https://blog.codens.info/1886" target="_blank" title="[MySql] GROUP BY 쿼리 에러 해결 방법" rel="nofollow noreferrer noopener">https://blog.codens.info/1886</a></li>
</ul>]]></description>
	<dc:creator>머니버그</dc:creator>
		<dc:date>Mon, 30 Aug 2021 15:14:05 +0900</dc:date>
	</item>
	<item>
	<title>MySQL REPLACE 레코드 데이터 치환하기(REPLACE)</title>
	<link>http://moneybug.co.kr/bbs/board.php?bo_table=db_tip&amp;wr_id=3</link>
	<description><![CDATA[<p>DB 테이블의 필드 값을 일괄 변경이 필요한 경우 REPLACE 함수를 이용해 쉽게 DB 데이터를 변경 할 수 있습니다.</p>
<p>예제는 myTable이라는 테이블의 content 데이터 중 변경전문자 문자를 변경후문자 으로 치환하는 과정입니다.</p>
<p>처음부터 REPLACE로 데이터를 변경해 버린 후 문제가 발생하면 백업이 없을 시 문제가 발생 할 수 있기 때문에 아래와 같이 진행 하시는게 좋습니다.</p>
<p> </p>
<h3>1. 변경할 데이터 조회 하기</h3>
<p> </p>
<p>우선 변경 될 대상의 레코드를 확인하시기 바랍니다.</p>
<p>간혹 의도치 않은 데이터가 변경 되는 것을 방지하기 위한 확인 작업입니다.</p>
<p class="console">
SELECT * FROM myTable WHERE content LIKE '%변경전문자%';
</p>

<div class="item_label_bar"></div>

<p> </p>
<h3>2. REPLACE로 치환 될 데이터 확인 (SELECT)</h3>
<p> </p>
<p>문자를 치환한 후 문제가 발생하는 것을 방지하기 위해 SELECT 문으로 치환 후 대상 값을 확인합니다.</p>
<p>이때 SElECT문으로 조회하는 것이기 때문에 REPLACE 함수로 인한 데이터 변경은 없습니다.</p>
<p class="console">
SELECT REPLACE(content, '변경전문자', '변경후문자') AS content<br />
FROM myTable <br />
WHERE content LIKE '%변경전문자%';
</p>

<div class="item_label_bar"></div>

<p> </p>
<h3>3. 데이터 치환 실행하기 (UPDATE)</h3>
<p> </p>
<p>1번과 2번에서 모두 이상이 없다면 실제로 치환을 실행합니다.</p>
<p class="console">
UPDATE myTable SET content = REPLACE(content, '변경전문자', '변경후문자')<br />
WHERE content LIKE '%변경전문자%';
</p>
<p> </p>
<p>참고로 조건을 추가하고 싶으시다면 1, 2과 같이 쿼리문 뒤에 WHERE 절을 추가해주시면 됩니다.<br /></p><p>위 예제는 조건이 없는 전체 데이터를 대상으로한 내용입니다.<br /></p>

<p> </p>
<ul><li>참고 <a href="http://chongmoa.com/sql/4555" target="_blank" title="MySQL REPLACE 레코드 데이터 치환하기(REPLACE)" rel="nofollow noreferrer noopener">http://chongmoa.com/sql/4555</a></li>
</ul>]]></description>
	<dc:creator>머니버그</dc:creator>
		<dc:date>Fri, 01 Jan 2021 23:04:23 +0900</dc:date>
	</item>
	<item>
	<title>ERROR 2006 (HY000): MySQL server has gone away 에러가 발생한다면</title>
	<link>http://moneybug.co.kr/bbs/board.php?bo_table=db_tip&amp;wr_id=2</link>
	<description><![CDATA[<p>mysql 작업중 아래와 같이 에러가 뜬다면 max_allowed_packet 메모리 부족입니다.</p>
<p>mysql&gt; show master status;</p>
<p>ERROR 2006 (HY000): MySQL server has gone away</p>
<p><br /></p>
<h3>① 해당 서버의 권한을 가지고 있을 경우</h3>
<p><br /></p>
<p># vi /etc/my.conf(my.ini 또는 mysql 설정파일. mysql이 깔려 있는 곳에 있습니다.) 에서 수정해서</p>
<p><br /></p>
<p>아래의 부분을 추가 또는 변경해주고 mysql을 재시작 합니다.</p>
<p><br /></p>
<p>max_allowed_packet = 500M</p>
<p><br /></p>
<p>500M으로 입력 시 M(메가바이트)을 인식못하는 경우도 있다고 합니다.</p>
<p><br /></p>
<p>이럴 경우엔 max_allowed_packet = 500000000이라고 적어 줍니다(기본단위는 byte 입니다.)</p>
<p><br /></p>
<p>정상적으로 변경이 되었는지 확인해 봅니다.</p>
<p><br /></p>
<p>mysql&gt; SHOW VARIABLES LIKE 'max_allowed_packet';</p>
<p><br /></p>
<p>+--------------------+-----------+</p>
<p>| Variable_name      | Value     |</p>
<p>+--------------------+-----------+</p>
<p>| max_allowed_packet | 524288000 |</p>
<p>+--------------------+-----------+</p>
<p><br /></p>
<p>1 row in set (0.00 sec)</p>
<div class="item_label_bar"></div>
<h3>② mysql의 해당 명령에 대한 권한을 가지고 있을 경우</h3>
<p><br /></p>
<p>mysql &gt;  SET GLOBAL max_allowed_packet = 1024*1024*256;</p>
<p><br /></p>
<p>이렇게 설정하고 진행을 합니다.</p>
<p><br /></p>
<p>다만 웹호스팅 사용자의 경우 해당 작업을 하는데 있어 권한이 없어 적용하지 못할 수 있습니다.</p>
<p><br /></p>
<p>이런 경우는 웹호스팅사에 요청을 해도 설정에 관련된 부분은 수정 또는 변경을 안해 주기 때문에 방법이 없을 수 있습니다.</p>]]></description>
	<dc:creator>머니버그</dc:creator>
		<dc:date>Mon, 21 Dec 2020 10:30:41 +0900</dc:date>
	</item>
	<item>
	<title>1103 : Incorrect table name '' 에러가 발생 했다면</title>
	<link>http://moneybug.co.kr/bbs/board.php?bo_table=db_tip&amp;wr_id=1</link>
	<description><![CDATA[<p>영문 해석 그대로 잘못된 이름의 테이블 이란 겁니다.</p><p><br /></p><p>예를 들어서 테이블 명 Member 라는 테이블을 Select 하려 한다면 </p><p><br /></p><p>select * from `Member` 라고 쿼리를 실행 할 겁니다.</p><p><br /></p><p>그런데 1103 : Incorrect table name '' 라고 db 에러 메세지가 출력 됐다면 </p><p><br /></p><p>우선 먼저 할 것은 Member 라는 테이블이 DB 상에 존재하는 가를 체크 해야 합니다.</p><p><br /></p><p>쿼리문 내의 테이블명이 오타일 경우 많이 발생 합니다.</p><p><br /></p><p>솔루션을 사용한다면 보통 테이블이 상수나 변수로 선언되어 있습니다.</p><p><br /></p><p>그누보드의 회원 테이블을 쿼리 한다면</p><p><br /></p><p>select * from `$g5['member_table']` 이처럼 테이블명을 $g5['member_table'] 라고 정의 해 놓습니다.</p><p><br /></p><p>그런데 1103 : Incorrect table name '' 에러가 출력 됐다면 우선 회원 테이블의 쿼리문을 화면상에 출력 시켜 봅니다.</p><p><br /></p><p>그럼 select * from `` 이처럼 `` 사이에 테이블명이 출력되지 않는 것을 확인 할 수 있습니다.</p><p><br /></p><p>이 경우엔 $g5['member_table']이 선언 되지 않아 테이블명이 들어가지 않은 겁니다.</p><p><br /></p><p>$g5['member_table']를 선언해 주면 간단히 해결이 됩니다.<br /></p><p><br /></p><p>그게 어렵지 않은 경우 이므로 여유를 가지고 해당 문제가 발생하는 부분을 찾아 고쳐 주시면 됩니다.</p><p><br /></p>]]></description>
	<dc:creator>머니버그</dc:creator>
		<dc:date>Fri, 04 Dec 2020 14:53:27 +0900</dc:date>
	</item>
</channel>
</rss>