JKUN

Welcome To The Jkun.net

Blog

MySQL 정규식으로 치환 함수

2017.02.02 15:41 DataBase/MySQL


MySQL 정규식으로 치환 함수

DELIMITER $$

CREATE FUNCTION  `regex_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000))
RETURNS VARCHAR(1000)
DETERMINISTIC
BEGIN 
 DECLARE temp VARCHAR(1000); 
 DECLARE ch VARCHAR(1); 
 DECLARE i INT;
 SET i = 1;
 SET temp = '';
 IF original REGEXP pattern THEN 
  loop_label: LOOP 
   IF i>CHAR_LENGTH(original) THEN
    LEAVE loop_label;  
   END IF;
   SET ch = SUBSTRING(original,i,1);
   IF NOT ch REGEXP pattern THEN
    SET temp = CONCAT(temp,ch);
   ELSE
    SET temp = CONCAT(temp,replacement);
   END IF;
   SET i=i+1;
  END LOOP;
 ELSE
  SET temp = original;
 END IF;
 RETURN temp;
END$$

DELIMITER ;

본문 : https://techras.wordpress.com/2011/06/02/regex-replace-for-mysql/

저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

MySQL 정규식으로 치환 함수  (0) 2017.02.02
UNIXTIME 관련 함수  (0) 2017.02.02
[펌] 커버링인덱스  (0) 2016.04.24
[링크] MySQL에서 사용하는 Lock 이해  (0) 2015.09.22
MySQL Split - 문자열 자름 처리.  (0) 2015.09.21
참조키 강제 해제  (0) 2015.06.03
현재 0 개의 댓글이 있습니다.
Comment

Blog

UNIXTIME 관련 함수

2017.02.02 15:39 DataBase/MySQL


1. UNIXTIME(타임스탬프) → DATE 

 FROM_UNIXTIME('1485874832', '%Y%m%d %H%i%s') 

2. DATE → UNIXTIME

UNIX_TIMESTAMP()
UNIX_TIMESTAMP('YYYY-MM-DD HH:mm:ss')


저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

MySQL 정규식으로 치환 함수  (0) 2017.02.02
UNIXTIME 관련 함수  (0) 2017.02.02
[펌] 커버링인덱스  (0) 2016.04.24
[링크] MySQL에서 사용하는 Lock 이해  (0) 2015.09.22
MySQL Split - 문자열 자름 처리.  (0) 2015.09.21
참조키 강제 해제  (0) 2015.06.03
현재 0 개의 댓글이 있습니다.
Comment

Blog

[펌] 커버링인덱스

2016.04.24 23:44 DataBase/MySQL


본문 : http://gywn.net/2012/04/mysql-covering-index/


MySQL에서 커버링 인덱스로 쿼리 성능을 높여보자!!

안녕하세요.  오늘 짧지만 재미있는 내용을 하나 공유할까 합니다.

커버링 인덱스(Covering Index)라는 내용인데, 대용량 데이터 처리 시 적절하게 커버링 인덱스를 활용하여 쿼리를 작성하면 성능을 상당 부분 높일 수 있습니다.

커버링 인덱스란?

커버링 인덱스란 원하는 데이터를 인덱스에서만 추출할 수 있는 인덱스를 의미합니다. B-Tree 스캔만으로 원하는 데이터를 가져올 수 있으며, 칼럼을 읽기 위해 굳이 데이터 블록을 보지 않아도 됩니다.

인덱스는 행 전체 크기보다 훨씬 작으며, 인덱스 값에 따라 정렬이 되기 때문에 Sequential Read 접근할 수 있기 때문에, 커버링 인덱스를 사용하면 결과적으로 쿼리 성능을 비약적으로 올릴 수 있습니다.

백문이 불여일견! 아래 테스트를 보시죠.

테이블 생성

먼저 다음과 같이 테이블을 생성합니다.

create table usertest (
 userno int(11) not null auto_increment,
 userid varchar(20) not null default '',
 nickname varchar(20) not null default '',
 .. 중략 ..
 chgdate varchar(15) not null default '',
 primary key (userno),
 key chgdate (chgdate)
) engine=innodb;

약 1,000만 건 데이터를 무작위로 넣고 몇가지 테스트를 해봅니다.

커버링 인덱스(SELECT)

select chgdate , userno
from usertest
limit 100000, 100
************* 1. row *************
           id: 1
  select_type: SIMPLE
        table: usertest
         type: index
possible_keys: NULL
          key: CHGDATE
      key_len: 47
          ref: NULL
         rows: 9228802
        Extra: Using index
1 row in set (0.00 sec)

쿼리 실행 계획의 Extra 필드에 “Using Index” 결과를 볼 수 있는데, 이는 인덱스만으로 원하는 데이터 추출을 하였음을 알 수 있습니다.

이처럼 데이터 추출을 인덱스에서만 수행하는 것을 커버링 인덱스라고 합니다. 아시겠죠? ^^

그렇다면 일반 쿼리와 성능 테스트를 해볼까요?

커버링 인덱스(WHERE)

1) 일반 쿼리

select *
from usertest
where chgdate like '2010%'
limit 100000, 100

쿼리 수행 속도는 30.37초이며, 쿼리 실행 계획은 다음과 같습니다.

************* 1. row *************
           id: 1
  select_type: SIMPLE
        table: usertest
         type: range
possible_keys: CHGDATE
          key: CHGDATE
      key_len: 47
          ref: NULL
         rows: 4352950
        Extra: Using where

Extra 항목에서 “Using where” 내용은, Range 검색 이후 데이터는 직접 데이터 필드에 접근하여 추출한 것으로 보면 됩니다.

2) 커버링 인덱스 쿼리

select a.*
from (
      select userno
      from usertest
      where chgdate like '2012%'
      limit 100000, 100
) b join usertest a on b.userno = a.userno

쿼리 수행 시간은 0.16초이며 실행 계획은 다음과 같습니다.

************* 1. row *************
           id: 1
  select_type: PRIMARY
        table:
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 100
        Extra:
************* 2. row *************
           id: 1
  select_type: PRIMARY
        table: a
         type: eq_ref
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 4
          ref: b.userno
         rows: 1
        Extra:
************* 3. row *************
           id: 2
  select_type: DERIVED
        table: usertest
         type: range
possible_keys: CHGDATE
          key: CHGDATE
      key_len: 47
          ref: NULL
         rows: 4352950
        Extra: Using where; Using index

Extra 에서 “Using Index”를 확인할 수 있습니다.

그렇다면 30초 넘게 수행되는 쿼리가 0.16초로 단축됐습니다. 왜 이렇게 큰 차이가 발생했을까요?

첫 번째 쿼리는 Where에서 부분 처리된 결과 셋을 Limit 구문에서 일정 범위를 추출하고, 추출된 값을 데이터 블록에 접근하여 원하는 필드를 가져오기 때문에 수행 속도가 느립니다.

두 번째 쿼리에서도 동일하게 Where에서 부분 처리된 결과 셋이 Limit 구문에서 일정 범위 추출되나, 정작 필요한 값은 테이블의 Primary Key인 userno 값입니다. InnoDB에서 모든 인덱스 Value에는 Primary Key를 값으로 가지기 때문에, 결과적으로 인덱스 접근만으로 원하는 데이터를 가져올 수 있게 됩니다. 최종적으로 조회할 데이터 추출을 위해서 데이터 블록에 접근하는 건 수는 서브 쿼리 안에 있는 결과 갯수, 즉 100건이기 때문에 첫 번째 쿼리 대비 월등하게 좋은 성능이 나온 것입니다.

커버링 인덱스(ORDER BY)

커버링 인덱스를 잘 사용하면 Full Scan 또한 방지할 수 있습니다. 대부분 RDBMS에는 테이블에 대한 통계 정보가 있고, 통계 정보를 활용해서 쿼리 실행을 최적화 합니다.

다음 재미있는 테스트 결과를 보여드리겠습니다. 전체 테이블에서 chgdate 역순으로 400000번째 데이터부터 10 건만 가져오는 쿼리입니다.

1) 일반 쿼리

select *
from usertest
order by chgdate
limit 400000, 100
************* 1. row *************
           id: 1
  select_type: SIMPLE
        table: usertest
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 9228802
        Extra: Using filesort
1 row in set (0.00 sec)

분명 인덱스가 있음에도, Full Scan 및 File Sorting이 발생합니다. 인덱스를 태웠을 때 인덱스 블록을 읽어들이면서 발생하는 비용보다 단순 Full Scan이 더 빠르다고 통계 정보로부터 판단했기 때문이죠. 인덱스도 데이터라는 것은 항상 기억하고 있어야 합니다^^

결과 시간은 책정 불가입니다. (안끝나요~!)

2) 커버링 인덱스 쿼리

위 결과와 다르게 커버링 인덱스는 조금 더 재미있는 결과를 보여줍니다.

select a.*
from (
      select userno
      from usertest
      order by chgdate
      limit 400000, 100
) b join usertest a on b.userno = a.userno
************* 1. row *************
           id: 1
  select_type: PRIMARY
        table:
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 100
        Extra:
************* 2. row *************
           id: 1
  select_type: PRIMARY
        table: a
         type: eq_ref
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 4
          ref: b.userno
         rows: 1
        Extra:
************* 3. row *************
           id: 2
  select_type: DERIVED
        table: usertest
         type: index
possible_keys: NULL
          key: CHGDATE
      key_len: 47
          ref: NULL
         rows: 400100
        Extra: Using index

File Sorting이 발생하지 않고 커버링 인덱스가 사용되었으며, 실행 시간 또한 0.24초로 빠르게 나왔습니다.^^

Conclusion

커버링 인덱스는 InnoDB와 같이 인덱스와 데이터 모두 메모리에 올라와 있는 경우에 유용하게 쓰일 수 있습니다. 물론 커버링 인덱스가 좋기는 하지만, 커버링 인덱스를 사용하기 위해 사용하지 않는 인덱스를 주구장창 만드는 것은 최대한 피해야 하겠죠^^

잊지마세요. 인덱스도 데이터라는 사실을..


저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

MySQL 정규식으로 치환 함수  (0) 2017.02.02
UNIXTIME 관련 함수  (0) 2017.02.02
[펌] 커버링인덱스  (0) 2016.04.24
[링크] MySQL에서 사용하는 Lock 이해  (0) 2015.09.22
MySQL Split - 문자열 자름 처리.  (0) 2015.09.21
참조키 강제 해제  (0) 2015.06.03
현재 0 개의 댓글이 있습니다.
Comment

Blog

[링크] MySQL에서 사용하는 Lock 이해

2015.09.22 17:21 DataBase/MySQL


참 깔끔하게 포스팅 되어 있습니다. 블로그도 깔끔하구요~

http://blog.saltfactory.net/database/introduce-mysql-lock.html

저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

UNIXTIME 관련 함수  (0) 2017.02.02
[펌] 커버링인덱스  (0) 2016.04.24
[링크] MySQL에서 사용하는 Lock 이해  (0) 2015.09.22
MySQL Split - 문자열 자름 처리.  (0) 2015.09.21
참조키 강제 해제  (0) 2015.06.03
참조키 선언시 에러  (0) 2014.11.26
현재 0 개의 댓글이 있습니다.
Comment

Blog

MySQL Split - 문자열 자름 처리.

2015.09.21 19:21 DataBase/MySQL


MySQL 에도 split 이 있다.

SUBSTRING_INDEX


1. 대상 예제 쿼리 및 결과


SELECT *
FROM (
	SELECT
		1                        AS seq,
		'Welcome To JKUN.NET|^^' AS message
	UNION ALL
	SELECT
		2                        AS seq,
		'Welcome To JKUN.NET|^^' AS message
	UNION ALL
	SELECT
		3 AS seq,
		'Welcome To JKUN.NET|^^' AS message
) AS EX;



2. SUBSTRING_INDEX 적용 쿼리 및 결과


SELECT 
	seq,
	message,
	SUBSTRING_INDEX(message, '|', 1) as first,
	SUBSTRING_INDEX(message, '|', -1) as second
FROM (
	SELECT
		*
	FROM (
		     SELECT
			     1                        AS seq,
			     'Welcome To JKUN.NET|^^' AS message
		     UNION ALL
		     SELECT
			     2                        AS seq,
			     'Welcome To JKUN.NET|^^' AS message
		     UNION ALL
		     SELECT
			     3                        AS seq,
			     'Welcome To JKUN.NET|^^' AS message
	     ) AS EX

) AS EX_SPLIT;



대단한건 아니지만 까먹으니 포스팅을 할 수밖에;;

저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

[펌] 커버링인덱스  (0) 2016.04.24
[링크] MySQL에서 사용하는 Lock 이해  (0) 2015.09.22
MySQL Split - 문자열 자름 처리.  (0) 2015.09.21
참조키 강제 해제  (0) 2015.06.03
참조키 선언시 에러  (0) 2014.11.26
우분투에서 mysql 삭제 후 재설치  (0) 2014.11.26
현재 0 개의 댓글이 있습니다.
Comment

Blog

참조키 강제 해제

2015.06.03 22:33 DataBase/MySQL


후;; 데이터베이스 스키마 일괄생성 스크립트를 모르고 mysql 데이터베이스에 돌렸다;;

아;;;;; 했는데

지우는게 있드만;;

#관계 체크 해제
SET foreign_key_checks = 0;

#관계 체크 설정
SET foreign_key_checks = 1;


저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

참조키 선언시 에러

2014.11.26 11:15 DataBase/MySQL


ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)


참조키를 생성하는데 위와 같은 에러가 발생한다.

확인한 바 발생한 이유는 


테이블 생성시 참조하는 원본 테이블에는 INT UNSIGNED 가 되있는데

참조하는 테이블에서는 그냥 INT 가 되있었다. 해서 다시 수정하니 정상적으로 작동을 했는데,

구글링을 하다보니 깔끔하게 포스팅 해주신 분이 있어 링크 올립니다.^^


http://opentutorials.org/module/894/6653


어?? 오픈튜토리얼이네? ㅎㅎㅎ

저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

MySQL Split - 문자열 자름 처리.  (0) 2015.09.21
참조키 강제 해제  (0) 2015.06.03
참조키 선언시 에러  (0) 2014.11.26
우분투에서 mysql 삭제 후 재설치  (0) 2014.11.26
MySQL Stored Procedure (저장프로시저)  (2) 2014.03.28
임시테이블 - Temproray Table  (0) 2014.03.26
현재 0 개의 댓글이 있습니다.
Comment

Blog

우분투에서 mysql 삭제 후 재설치

2014.11.26 11:12 DataBase/MySQL


apt-get purge mysql-server
apt-get purge mysql-common
rm -rf /var/log/mysql
rm -rf /var/log/mysql.*
rm -rf /var/lib/mysql
rm -rf /etc/mysql
# and then:
apt-get install mysql-server --fix-missing --fix-broken

출처 : http://ykcho.tistory.com/20

저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

참조키 강제 해제  (0) 2015.06.03
참조키 선언시 에러  (0) 2014.11.26
우분투에서 mysql 삭제 후 재설치  (0) 2014.11.26
MySQL Stored Procedure (저장프로시저)  (2) 2014.03.28
임시테이블 - Temproray Table  (0) 2014.03.26
MySQL 에러처리  (0) 2014.03.26
현재 0 개의 댓글이 있습니다.
Comment

Blog

MySQL Stored Procedure (저장프로시저)

2014.03.28 12:41 DataBase/MySQL


MySQL 저장프로시저

내가 익숙치 않거나 못해서 그런걸수도 있지만 정말로 쓰다보니.. 많이 부족함과 불편함이 이만 저만이 아니다.

그리고 너무 많은 구글링 필요하다;;

MySQL 저장프로시저를 만들고 사용하다 보면 MS-SQL Server 와 오라클의 저장프로시저가 너무나 그리워

진다. 역시.. 돈들여서 안좋은건 없다고.. 다시한번 또..새삼스럽게..ㅎㅎ

일단 샘플로 간단하게 MySQL 저장프로시저 올린다.



DELIMITER $$

DROP PROCEDURE IF EXISTS SP_EMP_DPT_UPDATE $$
CREATE PROCEDURE SP_EMP_DPT_UPDATE(
	IN_UNION_QUERY_TEXT VARCHAR(1500),
	IN_EMP_NO INT,
	OUT OUT_RETURN_VALUE TINYINT
)
BEGIN
	DECLARE INSERT_QUERY_STRING VARCHAR(1500);
	DECLARE CATCH_ERROR TINYINT;	
	DECLARE EXIT HANDLER FOR SQLEXCEPTION SET CATCH_ERROR = -1;

	SET AUTOCOMMIT = 0;
	SET SQL_SAFE_UPDATES = 0;

	START TRANSACTION;

	DROP TEMPORARY TABLE IF EXISTS TEMP_MEMBER_EMP_DPT;
	CREATE TEMPORARY TABLE TEMP_MEMBER_EMP_DPT (
		EMP_DPT_NO INT,
		EMP_NO INT,
		DPT_NAME VARCHAR(100),
		DPT_AUTH TINYINT
	) engine = memory;

	SET @INSERT_QUERY_STRING = CONCAT("INSERT INTO TEMP_MEMBER_EMP_DPT (EMP_DPT_NO, EMP_NO, DPT_NAME, DPT_AUTH) ", IN_UNION_QUERY_TEXT);

	PREPARE STMT FROM @INSERT_QUERY_STRING;	
	EXECUTE STMT;
	DEALLOCATE PREPARE STMT;	

	UPDATE MEMBER_EMP_DPT AS A INNER JOIN TEMP_MEMBER_EMP_DPT AS B
		ON A.EMP_DPT_NO = B.EMP_DPT_NO
	SET A.DPT_NAME = B.DPT_NAME
	WHERE A.EMP_NO = IN_EMP_NO;

	INSERT INTO MEMBER_EMP_DPT (EMP_NO, DPT_NAME, DPT_AUTH)
	SELECT EMP_NO, DPT_NAME, DPT_AUTH
		FROM TEMP_MEMBER_EMP_DPT
	WHERE EMP_DPT_NO NOT IN (SELECT DISTINCT EMP_DPT_NO
							 FROM MEMBER_EMP_DPT
							 WHERE EMP_NO = IN_EMP_NO)
		AND EMP_NO = IN_EMP_NO;

	IF CATCH_ERROR < 0 THEN
		ROLLBACK;
		SET OUT_RETURN_VALUE = 0;
	ELSE
		COMMIT;
		SET OUT_RETURN_VALUE = 1;
	END IF;


	DROP TEMPORARY TABLE IF EXISTS TEMP_MEMBER_EMP_DPT;
	
	SELECT OUT_RETURN_VALUE;
END$$

#DELIMITER ;
저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

참조키 선언시 에러  (0) 2014.11.26
우분투에서 mysql 삭제 후 재설치  (0) 2014.11.26
MySQL Stored Procedure (저장프로시저)  (2) 2014.03.28
임시테이블 - Temproray Table  (0) 2014.03.26
MySQL 에러처리  (0) 2014.03.26
저장 프로시저 관련 포스팅  (0) 2014.03.26
현재 2 개의 댓글이 있습니다.

자바맨 2014.06.18 00:52 신고

감사합니다. 여태껏 mysql sp 땜시 개고생중이었어요.
잘 배우고 갑니다.^^


Comment

Blog

임시테이블 - Temproray Table

2014.03.26 15:14 DataBase/MySQL


참고링크

MySQL에서 Temporary Table을 활용한 데이터 질의..그 효과는?

java + temporary table. 임시테이블 사용하기. MYSQL


CREATE TEMPORARY TABLE IF NOT EXISTS TEMP_TABLE (

       ID BIGINT(20) NOT NULL 

)

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

MySQL 에러처리

2014.03.26 15:09 DataBase/MySQL


임의의 호스트 언어로 MySQL 를 호출했을 때에 발생할 가능성이 있는 에러 코드의 리스트를 이하에 나타냅니다.

이름에러 코드의 열은 ,MySQL 원시 코드 파일 include/mysqld_error.h 의 정의에 대응합니다.

SQLSTATE 의 열은 ,MySQL 원시 코드 파일 include/sql_state.h 의 정의에 대응합니다.

SQLSTATE 에러 코드는 ,MySQL 버젼 4.1 을 사용하는 경우에게만 표시됩니다. SQLSTATE (은)는 ,X/Open/ANSI/ODBC 의 동작과 호환성을 갖게하기 위해서(때문에) 추가되었습니다.

각 에러 코드에 대한 설명 텍스트는 , 에러 메세지 파일 share/english/errmsg.sys 에 기술되고 있습니다.

갱신은 빈번하게 행해지므로 , 상기의 소스에 에러 코드가 추가될 가능성이 있습니다.

  • Error: 1000 SQLSTATE: HY000 (ER_HASHCHK)

    Message: hashchk

  • Error: 1001 SQLSTATE: HY000 (ER_NISAMCHK)

    Message: isamchk

  • Error: 1002 SQLSTATE: HY000 (ER_NO)

    Message: NO

  • Error: 1003 SQLSTATE: HY000 (ER_YES)

    Message: YES

  • Error: 1004 SQLSTATE: HY000 (ER_CANT_CREATE_FILE)

    Message: '%s' 파일을 만들 수 없습니다 (errno: %d)

  • Error: 1005 SQLSTATE: HY000 (ER_CANT_CREATE_TABLE)

    Message: '%s' 테이블을 만들 수 없습니다.(errno: %d)

  • Error: 1006 SQLSTATE: HY000 (ER_CANT_CREATE_DB)

    Message: '%s' 데이타베이스를 만들 수 없습니다 (errno: %d)

  • Error: 1007 SQLSTATE: HY000 (ER_DB_CREATE_EXISTS)

    Message: '%s' 데이타베이스를 만들 수 없습니다.이미 그 데이타베이스가 존재하는

  • Error: 1008 SQLSTATE: HY000 (ER_DB_DROP_EXISTS)

    Message: '%s' 데이타베이스를 파기할 수 없습니다. 그 데이타베이스가 없습니다.

  • Error: 1009 SQLSTATE: HY000 (ER_DB_DROP_DELETE)

    Message: 데이타베이스 파기 에러 ('%s' 를 삭제할 수 없습니다, errno: %d)

  • Error: 1010 SQLSTATE: HY000 (ER_DB_DROP_RMDIR)

    Message: 데이타베이스 파기 에러 ('%s' 를 rmdir 할 수 없습니다, errno: %d)

  • Error: 1011 SQLSTATE: HY000 (ER_CANT_DELETE_FILE)

    Message: '%s' 의 삭제가 에러 (errno: %d)

  • Error: 1012 SQLSTATE: HY000 (ER_CANT_FIND_SYSTEM_REC)

    Message: system table 의 레코드를 읽을 수가 없었습니다

  • Error: 1013 SQLSTATE: HY000 (ER_CANT_GET_STAT)

    Message: '%s' 의 스테이타스를 얻을 수 없습니다. (errno: %d)

  • Error: 1014 SQLSTATE: HY000 (ER_CANT_GET_WD)

    Message: working directory 를 얻을 수가 없었습니다 (errno: %d)

  • Error: 1015 SQLSTATE: HY000 (ER_CANT_LOCK)

    Message: 파일을 잠글 수 없습니다 (errno: %d)

  • Error: 1016 SQLSTATE: HY000 (ER_CANT_OPEN_FILE)

    Message: '%s' 파일을 열 수가 없습니다 (errno: %d)

  • Error: 1017 SQLSTATE: HY000 (ER_FILE_NOT_FOUND)

    Message: '%s' 파일을 찾아낼 수가 없습니다.(errno: %d)

  • Error: 1018 SQLSTATE: HY000 (ER_CANT_READ_DIR)

    Message: '%s' 디렉토리를 읽을 수 없습니다.(errno: %d)

  • Error: 1019 SQLSTATE: HY000 (ER_CANT_SET_WD)

    Message: '%s' 디렉토리에 chdir 할 수 없습니다.(errno: %d)

  • Error: 1020 SQLSTATE: HY000 (ER_CHECKREAD)

    Message: Record has changed since last read in table '%s'

  • Error: 1021 SQLSTATE: HY000 (ER_DISK_FULL)

    Message: Disk full (%s). 누군가가 무엇인가를 줄일 때까지 기다려 주세요...

  • Error: 1022 SQLSTATE: 23000 (ER_DUP_KEY)

    Message: table '%s' 에 key 가 중복 하고 있어 써 넣을 수 없습니다

  • Error: 1023 SQLSTATE: HY000 (ER_ERROR_ON_CLOSE)

    Message: Error on close of '%s' (errno: %d)

  • Error: 1024 SQLSTATE: HY000 (ER_ERROR_ON_READ)

    Message: '%s' 파일의 read error (errno: %d)

  • Error: 1025 SQLSTATE: HY000 (ER_ERROR_ON_RENAME)

    Message: '%s' 를 '%s' 에 rename 할 수 없습니다 (errno: %d)

  • Error: 1026 SQLSTATE: HY000 (ER_ERROR_ON_WRITE)

    Message: '%s' 파일을 쓸 수가 없습니다 (errno: %d)

  • Error: 1027 SQLSTATE: HY000 (ER_FILE_USED)

    Message: '%s' 는 락 되고 있습니다

  • Error: 1028 SQLSTATE: HY000 (ER_FILSORT_ABORT)

    Message: Sort 중단

  • Error: 1029 SQLSTATE: HY000 (ER_FORM_NOT_FOUND)

    Message: View '%s' 이 '%s' 에 정의되고 있지 않습니다

  • Error: 1030 SQLSTATE: HY000 (ER_GET_ERRNO)

    Message: Got error %d from table handler

  • Error: 1031 SQLSTATE: HY000 (ER_ILLEGAL_HA)

    Message: Table handler for '%s' doesn't have this option

  • Error: 1032 SQLSTATE: HY000 (ER_KEY_NOT_FOUND)

    Message: '%s'속 에 레코드가 발견되지 않습니다

  • Error: 1033 SQLSTATE: HY000 (ER_NOT_FORM_FILE)

    Message: 파일 '%s' 의 것 info 이 잘못되어 있는 것 같습니다

  • Error: 1034 SQLSTATE: HY000 (ER_NOT_KEYFILE)

    Message: '%s' 테이블의 것 key file 이 잘못되어 있는 것 같습니다. 수복을 해 주세요

  • Error: 1035 SQLSTATE: HY000 (ER_OLD_KEYFILE)

    Message: '%s' 테이블은 낡은 형식의 것 key file 의 같습니다; 수복을 해 주세요

  • Error: 1036 SQLSTATE: HY000 (ER_OPEN_AS_READONLY)

    Message: '%s' 는 읽기 전용입니다

  • Error: 1037 SQLSTATE: HY001 (ER_OUTOFMEMORY)

    Message: Out of memory. demon를 restart 해 보세요 (%d bytes 필요)

  • Error: 1038 SQLSTATE: HY001 (ER_OUT_OF_SORTMEMORY)

    Message: Out of sort memory. sort buffer size 가 부족한 것 같습니다.

  • Error: 1039 SQLSTATE: HY000 (ER_UNEXPECTED_EOF)

    Message: '%s' 파일을 읽어들여 안에 EOF 가 예기치 못한 곳에서 나타났던. (errno: %d)

  • Error: 1040 SQLSTATE: 08004 (ER_CON_COUNT_ERROR)

    Message: 접속이 너무 많은

  • Error: 1041 SQLSTATE: HY000 (ER_OUT_OF_RESOURCES)

    Message: Out of memory; mysqld 과소의 다른 프로세스가 메모리를 모두 사용하고 있든가 확인해 주세요. 메모리를 다 사용하지 않은 경우 ,'ulimit' 를 설정해 mysqld 의 메모리 사용 한계량을 많이 하는지 ,swap space 를 늘려 보세요

  • Error: 1042 SQLSTATE: 08S01 (ER_BAD_HOST_ERROR)

    Message: 그 address 의 hostname 가 파하지 않습니다.

  • Error: 1043 SQLSTATE: 08S01 (ER_HANDSHAKE_ERROR)

    Message: Bad handshake

  • Error: 1044 SQLSTATE: 42000 (ER_DBACCESS_DENIED_ERROR)

    Message: 유저 '%s'@'%s' 의 '%s' 데이타베이스에의 액세스를 거부하는

  • Error: 1045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR)

    Message: 유저 '%s'@'%s' 를 거부하는.uUsing password: %s)

  • Error: 1046 SQLSTATE: 3D000 (ER_NO_DB_ERROR)

    Message: 데이타베이스가 선택되고 있지 않습니다.

  • Error: 1047 SQLSTATE: 08S01 (ER_UNKNOWN_COM_ERROR)

    Message: 그 커멘드는 뭐야?

  • Error: 1048 SQLSTATE: 23000 (ER_BAD_NULL_ERROR)

    Message: Column '%s' (은)는 null 에는 할 수 없습니다

  • Error: 1049 SQLSTATE: 42000 (ER_BAD_DB_ERROR)

    Message: '%s' 는 데이타베이스는 모릅니다.

  • Error: 1050 SQLSTATE: 42S01 (ER_TABLE_EXISTS_ERROR)

    Message: Table '%s' 는 이미 있습니다

  • Error: 1051 SQLSTATE: 42S02 (ER_BAD_TABLE_ERROR)

    Message: table '%s' 는 없습니다.

  • Error: 1052 SQLSTATE: 23000 (ER_NON_UNIQ_ERROR)

    Message: Column: '%s' in %s is ambiguous

  • Error: 1053 SQLSTATE: 08S01 (ER_SERVER_SHUTDOWN)

    Message: Server 를 shutdown 안...

  • Error: 1054 SQLSTATE: 42S22 (ER_BAD_FIELD_ERROR)

    Message: '%s' column 은 '%s' 에는 없습니다.

  • Error: 1055 SQLSTATE: 42000 (ER_WRONG_FIELD_WITH_GROUP)

    Message: '%s' isn't in GROUP BY

  • Error: 1056 SQLSTATE: 42000 (ER_WRONG_GROUP_FIELD)

    Message: Can't group on '%s'

  • Error: 1057 SQLSTATE: 42000 (ER_WRONG_SUM_SELECT)

    Message: Statement has sum functions and columns in same statement

  • Error: 1058 SQLSTATE: 21S01 (ER_WRONG_VALUE_COUNT)

    Message: Column count doesn't match value count

  • Error: 1059 SQLSTATE: 42000 (ER_TOO_LONG_IDENT)

    Message: Identifier name '%s' 는 너무 깁니다

  • Error: 1060 SQLSTATE: 42S21 (ER_DUP_FIELDNAME)

    Message: '%s' 라고 하는 column 이름은 중복 하고 있습니다

  • Error: 1061 SQLSTATE: 42000 (ER_DUP_KEYNAME)

    Message: '%s' 라고 하는 key 의 이름은 중복 하고 있습니다

  • Error: 1062 SQLSTATE: 23000 (ER_DUP_ENTRY)

    Message: '%s' 는 key %d 에 두어 중복 하고 있는

  • Error: 1063 SQLSTATE: 42000 (ER_WRONG_FIELD_SPEC)

    Message: Incorrect column specifier for column '%s'

  • Error: 1064 SQLSTATE: 42000 (ER_PARSE_ERROR)

    Message: %s : '%s' 부근 : %d 행 눈

  • Error: 1065 SQLSTATE: HY000 (ER_EMPTY_QUERY)

    Message: Query 이 하늘입니다.

  • Error: 1066 SQLSTATE: 42000 (ER_NONUNIQ_TABLE)

    Message: '%s' 는 일의의 table/alias 이름이 아닙니다

  • Error: 1067 SQLSTATE: 42000 (ER_INVALID_DEFAULT)

    Message: Invalid default value for '%s'

  • Error: 1068 SQLSTATE: 42000 (ER_MULTIPLE_PRI_KEY)

    Message: 복수의 것 primary key 이 정의되었던

  • Error: 1069 SQLSTATE: 42000 (ER_TOO_MANY_KEYS)

    Message: key 의 지정이 너무 많습니다. key 는 최대 %d 까지 입니다

  • Error: 1070 SQLSTATE: 42000 (ER_TOO_MANY_KEY_PARTS)

    Message: Too many key parts specified; max %d parts allowed

  • Error: 1071 SQLSTATE: 42000 (ER_TOO_LONG_KEY)

    Message: key 가 너무 깁니다. key 의 길이는 최대 %d 입니다

  • Error: 1072 SQLSTATE: 42000 (ER_KEY_COLUMN_DOES_NOT_EXITS)

    Message: Key column '%s' 가 테이블에 없습니다.

  • Error: 1073 SQLSTATE: 42000 (ER_BLOB_USED_AS_KEY)

    Message: BLOB column '%s' can't be used in key specification with the used table type

  • Error: 1074 SQLSTATE: 42000 (ER_TOO_BIG_FIELDLENGTH)

    Message: column '%s' 는,확보하는 column 의 크기가 너무 많은. (최대 %d 까지). BLOB 를 대신에 사용해 주세요.

  • Error: 1075 SQLSTATE: 42000 (ER_WRONG_AUTO_KEY)

    Message: 테이블의 정의가 다른; there can be only one auto column and it must be defined as a key

  • Error: 1076 SQLSTATE: HY000 (ER_READY)

    Message: %s: 준비 완료

  • Error: 1077 SQLSTATE: HY000 (ER_NORMAL_SHUTDOWN)

    Message: %s: Normal shutdown

  • Error: 1078 SQLSTATE: HY000 (ER_GOT_SIGNAL)

    Message: %s: Got signal %d. 중단!

  • Error: 1079 SQLSTATE: HY000 (ER_SHUTDOWN_COMPLETE)

    Message: %s: Shutdown 완료

  • Error: 1080 SQLSTATE: 08S01 (ER_FORCING_CLOSE)

    Message: %s: thread %ld 강제 종료 user: '%s'

  • Error: 1081 SQLSTATE: 08S01 (ER_IPSOCK_ERROR)

    Message: IP socket 를 만들 수 없습니다

  • Error: 1082 SQLSTATE: 42S12 (ER_NO_SUCH_INDEX)

    Message: Table '%s' 는 그러한 index 을 가지고 있지 않습니다(CREATE INDEX 실행시로 지정되어 있지 않습니다). 테이블을 다시 만들어 주세요

  • Error: 1083 SQLSTATE: 42000 (ER_WRONG_FIELD_TERMINATORS)

    Message: Field separator argument is not what is expected; check the manual

  • Error: 1084 SQLSTATE: 42000 (ER_BLOBS_AND_NO_TERMINATED)

    Message: You can't use fixed rowlength with BLOBs; please use 'fields terminated by'.

  • Error: 1085 SQLSTATE: HY000 (ER_TEXTFILE_NOT_READABLE)

    Message: 파일 '%s' 은 databse 의 directory 에 있을까 모든 유저가 읽을 수 있도록(듯이) 허가되어 있지 않으면 안됩니다.

  • Error: 1086 SQLSTATE: HY000 (ER_FILE_EXISTS_ERROR)

    Message: File '%s' 는 이미 존재하는

  • Error: 1087 SQLSTATE: HY000 (ER_LOAD_INFO)

    Message: 레코드수: %ld 삭제: %ld Skipped: %ld Warnings: %ld

  • Error: 1088 SQLSTATE: HY000 (ER_ALTER_INFO)

    Message: 레코드수: %ld 중복: %ld

  • Error: 1089 SQLSTATE: HY000 (ER_WRONG_SUB_KEY)

    Message: Incorrect sub part key; the used key part isn't a string or the used length is longer than the key part

  • Error: 1090 SQLSTATE: 42000 (ER_CANT_REMOVE_ALL_FIELDS)

    Message: ALTER TABLE 으로 모든 column 은 삭제할 수 없습니다. DROP TABLE 를 사용해 주세요

  • Error: 1091 SQLSTATE: 42000 (ER_CANT_DROP_FIELD_OR_KEY)

    Message: '%s' 를 파기할 수 없었습니다; check that column/key exists

  • Error: 1092 SQLSTATE: HY000 (ER_INSERT_INFO)

    Message: 레코드수: %ld 중복수: %ld Warnings: %ld

  • Error: 1093 SQLSTATE: HY000 (ER_UPDATE_TABLE_USED)

    Message: You can't specify target table '%s' for update in FROM clause

  • Error: 1094 SQLSTATE: HY000 (ER_NO_SUCH_THREAD)

    Message: thread id: %lu 는 없습니다

  • Error: 1095 SQLSTATE: HY000 (ER_KILL_DENIED_ERROR)

    Message: thread %lu 의 오너가 아닙니다

  • Error: 1096 SQLSTATE: HY000 (ER_NO_TABLES_USED)

    Message: No tables used

  • Error: 1097 SQLSTATE: HY000 (ER_TOO_BIG_SET)

    Message: Too many strings for column %s and SET

  • Error: 1098 SQLSTATE: HY000 (ER_NO_UNIQUE_LOGFILE)

    Message: Can't generate a unique log-filename %s.(1-999)

  • Error: 1099 SQLSTATE: HY000 (ER_TABLE_NOT_LOCKED_FOR_WRITE)

    Message: Table '%s' 는 READ lock 이 되어 있어 , 갱신은 할 수 없습니다

  • Error: 1100 SQLSTATE: HY000 (ER_TABLE_NOT_LOCKED)

    Message: Table '%s' 는 LOCK TABLES 에 의해 락 되고 있지 않습니다

  • Error: 1101 SQLSTATE: 42000 (ER_BLOB_CANT_HAVE_DEFAULT)

    Message: BLOB column '%s' can't have a default value

  • Error: 1102 SQLSTATE: 42000 (ER_WRONG_DB_NAME)

    Message: 지정한 database 이름 '%s' 이 잘못되어 있는

  • Error: 1103 SQLSTATE: 42000 (ER_WRONG_TABLE_NAME)

    Message: 지정한 table 이름 '%s' 은 잘못하고 있습니다

  • Error: 1104 SQLSTATE: 42000 (ER_TOO_BIG_SELECT)

    Message: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay

  • Error: 1105 SQLSTATE: HY000 (ER_UNKNOWN_ERROR)

    Message: Unknown error

  • Error: 1106 SQLSTATE: 42000 (ER_UNKNOWN_PROCEDURE)

    Message: Unknown procedure '%s'

  • Error: 1107 SQLSTATE: 42000 (ER_WRONG_PARAMCOUNT_TO_PROCEDURE)

    Message: Incorrect parameter count to procedure '%s'

  • Error: 1108 SQLSTATE: HY000 (ER_WRONG_PARAMETERS_TO_PROCEDURE)

    Message: Incorrect parameters to procedure '%s'

  • Error: 1109 SQLSTATE: 42S02 (ER_UNKNOWN_TABLE)

    Message: Unknown table '%s' in %s

  • Error: 1110 SQLSTATE: 42000 (ER_FIELD_SPECIFIED_TWICE)

    Message: Column '%s' specified twice

  • Error: 1111 SQLSTATE: HY000 (ER_INVALID_GROUP_FUNC_USE)

    Message: Invalid use of group function

  • Error: 1112 SQLSTATE: 42000 (ER_UNSUPPORTED_EXTENSION)

    Message: Table '%s' uses an extension that doesn't exist in this MySQL version

  • Error: 1113 SQLSTATE: 42000 (ER_TABLE_MUST_HAVE_COLUMNS)

    Message: 테이블은 최저 1 개의 것 column 이 필요합니다

  • Error: 1114 SQLSTATE: HY000 (ER_RECORD_FILE_FULL)

    Message: table '%s' 는 가득합니다

  • Error: 1115 SQLSTATE: 42000 (ER_UNKNOWN_CHARACTER_SET)

    Message: character set '%s' 는 서포트하고 있지 않습니다

  • Error: 1116 SQLSTATE: HY000 (ER_TOO_MANY_TABLES)

    Message: 테이블이 너무 많습니다; MySQL can only use %d tables in a join

  • Error: 1117 SQLSTATE: HY000 (ER_TOO_MANY_FIELDS)

    Message: column 가 너무 많습니다

  • Error: 1118 SQLSTATE: 42000 (ER_TOO_BIG_ROWSIZE)

    Message: row size 가 너무 큽니다. BLOB 를 포함하지 않는 경우의 것 row size 의 최대는 %d 입니다. 몇개의 field 를 BLOB 에 바꾸어 주세요.

  • Error: 1119 SQLSTATE: HY000 (ER_STACK_OVERRUN)

    Message: Thread stack overrun: Used: %ld of a %ld stack. 스택 영역을 많이 취하고 싶은 경우 ,'mysqld -O thread_stack=#' 라고 지정해 주세요

  • Error: 1120 SQLSTATE: 42000 (ER_WRONG_OUTER_JOIN)

    Message: Cross dependency found in OUTER JOIN; examine your ON conditions

  • Error: 1121 SQLSTATE: 42000 (ER_NULL_COLUMN_IN_INDEX)

    Message: Column '%s' 가 UNIQUE 인가 INDEX 로 사용되었던. 이 컬럼은 NOT NULL 이라고 정의되고 있지 않습니다.

  • Error: 1122 SQLSTATE: HY000 (ER_CANT_FIND_UDF)

    Message: function '%s' 를 로드할 수 없습니다

  • Error: 1123 SQLSTATE: HY000 (ER_CANT_INITIALIZE_UDF)

    Message: function '%s' 를 초기화할 수 없습니다; %s

  • Error: 1124 SQLSTATE: HY000 (ER_UDF_NO_PATHS)

    Message: shared library 에의 패스가 다니고 있지 않습니다

  • Error: 1125 SQLSTATE: HY000 (ER_UDF_EXISTS)

    Message: Function '%s' 는 이미 정의되고 있습니다

  • Error: 1126 SQLSTATE: HY000 (ER_CANT_OPEN_LIBRARY)

    Message: shared library '%s' 를 열 수가 없습니다 (errno: %d %s)

  • Error: 1127 SQLSTATE: HY000 (ER_CANT_FIND_DL_ENTRY)

    Message: function '%s' 를 도서관안에 찾아낼 수가 없습니다

  • Error: 1128 SQLSTATE: HY000 (ER_FUNCTION_NOT_DEFINED)

    Message: Function '%s' 는 정의되고 있지 않습니다

  • Error: 1129 SQLSTATE: HY000 (ER_HOST_IS_BLOCKED)

    Message: Host '%s' 는 many connection error 때문에 , 거부되었던. 'mysqladmin flush-hosts' 으로 해제해 주세요

  • Error: 1130 SQLSTATE: HY000 (ER_HOST_NOT_PRIVILEGED)

    Message: Host '%s' 는 MySQL server 에 접속이 허가되고 있지 않습니다

  • Error: 1131 SQLSTATE: 42000 (ER_PASSWORD_ANONYMOUS_USER)

    Message: MySQL 를 anonymous users 로 사용하고 있는 상태에서는 , 패스워드의 변경은 할 수 없습니다

  • Error: 1132 SQLSTATE: 42000 (ER_PASSWORD_NOT_ALLOWED)

    Message: 다른 유저의 패스워드를 변경하기 위해서는, mysql 데이타베이스에 대해서 update 의 허가가 없으면 안됩니다.

  • Error: 1133 SQLSTATE: 42000 (ER_PASSWORD_NO_MATCH)

    Message: Can't find any matching row in the user table

  • Error: 1134 SQLSTATE: HY000 (ER_UPDATE_INFO)

    Message: 일치수(Rows matched): %ld 변경: %ld Warnings: %ld

  • Error: 1135 SQLSTATE: HY000 (ER_CANT_CREATE_THREAD)

    Message: 신규에 thread를 만들 수 없하고 (errno %d). 최대 사용 허가 메모리수를 넘지 않았는데 에러가 발생하고 있다면, 메뉴얼중에서 'possible OS-dependent bug' 라고 하는 문자를 찾아 쌍이라고야 차이.

  • Error: 1136 SQLSTATE: 21S01 (ER_WRONG_VALUE_COUNT_ON_ROW)

    Message: Column count doesn't match value count at row %ld

  • Error: 1137 SQLSTATE: HY000 (ER_CANT_REOPEN_TABLE)

    Message: Can't reopen table: '%s'

  • Error: 1138 SQLSTATE: 42000 (ER_INVALID_USE_OF_NULL)

    Message: NULL 치의 사용 방법이 부적절합니다

  • Error: 1139 SQLSTATE: 42000 (ER_REGEXP_ERROR)

    Message: Got error '%s' from regexp

  • Error: 1140 SQLSTATE: 42000 (ER_MIX_OF_GROUP_FUNC_AND_FIELDS)

    Message: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

  • Error: 1141 SQLSTATE: 42000 (ER_NONEXISTING_GRANT)

    Message: 유저 '%s' (호스트 '%s' 의 유저) 는 허가되고 있지 않습니다

  • Error: 1142 SQLSTATE: 42000 (ER_TABLEACCESS_DENIED_ERROR)

    Message: 커멘드 %s 는 유저 '%s'@'%s' ,테이블 '%s' 에 대해서 허가되고 있지 않습니다

  • Error: 1143 SQLSTATE: 42000 (ER_COLUMNACCESS_DENIED_ERROR)

    Message: 커멘드 %s 는 유저 '%s'@'%s' 컬럼 '%s' 테이블 '%s' 에 대해서 허가되고 있지 않습니다

  • Error: 1144 SQLSTATE: 42000 (ER_ILLEGAL_GRANT_FOR_TABLE)

    Message: Illegal GRANT/REVOKE command; please consult the manual to see which privleges can be used.

  • Error: 1145 SQLSTATE: 42000 (ER_GRANT_WRONG_HOST_OR_USER)

    Message: The host or user argument to GRANT is too long

  • Error: 1146 SQLSTATE: 42S02 (ER_NO_SUCH_TABLE)

    Message: Table '%s.%s' doesn't exist

  • Error: 1147 SQLSTATE: 42000 (ER_NONEXISTING_TABLE_GRANT)

    Message: There is no such grant defined for user '%s' on host '%s' on table '%s'

  • Error: 1148 SQLSTATE: 42000 (ER_NOT_ALLOWED_COMMAND)

    Message: The used command is not allowed with this MySQL version

  • Error: 1149 SQLSTATE: 42000 (ER_SYNTAX_ERROR)

    Message: Something is wrong in your syntax

  • Error: 1150 SQLSTATE: HY000 (ER_DELAYED_CANT_CHANGE_LOCK)

    Message: Delayed insert thread couldn't get requested lock for table %s

  • Error: 1151 SQLSTATE: HY000 (ER_TOO_MANY_DELAYED_THREADS)

    Message: Too many delayed threads in use

  • Error: 1152 SQLSTATE: 08S01 (ER_ABORTING_CONNECTION)

    Message: Aborted connection %ld to db: '%s' user: '%s' (%s)

  • Error: 1153 SQLSTATE: 08S01 (ER_NET_PACKET_TOO_LARGE)

    Message: Got a packet bigger than 'max_allowed_packet' bytes

  • Error: 1154 SQLSTATE: 08S01 (ER_NET_READ_ERROR_FROM_PIPE)

    Message: Got a read error from the connection pipe

  • Error: 1155 SQLSTATE: 08S01 (ER_NET_FCNTL_ERROR)

    Message: Got an error from fcntl()

  • Error: 1156 SQLSTATE: 08S01 (ER_NET_PACKETS_OUT_OF_ORDER)

    Message: Got packets out of order

  • Error: 1157 SQLSTATE: 08S01 (ER_NET_UNCOMPRESS_ERROR)

    Message: Couldn't uncompress communication packet

  • Error: 1158 SQLSTATE: 08S01 (ER_NET_READ_ERROR)

    Message: Got an error reading communication packets

  • Error: 1159 SQLSTATE: 08S01 (ER_NET_READ_INTERRUPTED)

    Message: Got timeout reading communication packets

  • Error: 1160 SQLSTATE: 08S01 (ER_NET_ERROR_ON_WRITE)

    Message: Got an error writing communication packets

  • Error: 1161 SQLSTATE: 08S01 (ER_NET_WRITE_INTERRUPTED)

    Message: Got timeout writing communication packets

  • Error: 1162 SQLSTATE: 42000 (ER_TOO_LONG_STRING)

    Message: Result string is longer than 'max_allowed_packet' bytes

  • Error: 1163 SQLSTATE: 42000 (ER_TABLE_CANT_HANDLE_BLOB)

    Message: The used table type doesn't support BLOB/TEXT columns

  • Error: 1164 SQLSTATE: 42000 (ER_TABLE_CANT_HANDLE_AUTO_INCREMENT)

    Message: The used table type doesn't support AUTO_INCREMENT columns

  • Error: 1165 SQLSTATE: HY000 (ER_DELAYED_INSERT_TABLE_LOCKED)

    Message: INSERT DELAYED can't be used with table '%s', because it is locked with LOCK TABLES

  • Error: 1166 SQLSTATE: 42000 (ER_WRONG_COLUMN_NAME)

    Message: Incorrect column name '%s'

  • Error: 1167 SQLSTATE: 42000 (ER_WRONG_KEY_COLUMN)

    Message: The used table handler can't index column '%s'

  • Error: 1168 SQLSTATE: HY000 (ER_WRONG_MRG_TABLE)

    Message: All tables in the MERGE table are not defined identically

  • Error: 1169 SQLSTATE: 23000 (ER_DUP_UNIQUE)

    Message: Can't write, because of unique constraint, to table '%s'

  • Error: 1170 SQLSTATE: 42000 (ER_BLOB_KEY_WITHOUT_LENGTH)

    Message: BLOB column '%s' used in key specification without a key length

  • Error: 1171 SQLSTATE: 42000 (ER_PRIMARY_CANT_HAVE_NULL)

    Message: All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead

  • Error: 1172 SQLSTATE: 42000 (ER_TOO_MANY_ROWS)

    Message: Result consisted of more than one row

  • Error: 1173 SQLSTATE: 42000 (ER_REQUIRES_PRIMARY_KEY)

    Message: This table type requires a primary key

  • Error: 1174 SQLSTATE: HY000 (ER_NO_RAID_COMPILED)

    Message: This version of MySQL is not compiled with RAID support

  • Error: 1175 SQLSTATE: HY000 (ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE)

    Message: You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

  • Error: 1176 SQLSTATE: HY000 (ER_KEY_DOES_NOT_EXITS)

    Message: Key '%s' doesn't exist in table '%s'

  • Error: 1177 SQLSTATE: 42000 (ER_CHECK_NO_SUCH_TABLE)

    Message: Can't open table

  • Error: 1178 SQLSTATE: 42000 (ER_CHECK_NOT_IMPLEMENTED)

    Message: The handler for the table doesn't support %s

  • Error: 1179 SQLSTATE: 25000 (ER_CANT_DO_THIS_DURING_AN_TRANSACTION)

    Message: You are not allowed to execute this command in a transaction

  • Error: 1180 SQLSTATE: HY000 (ER_ERROR_DURING_COMMIT)

    Message: Got error %d during COMMIT

  • Error: 1181 SQLSTATE: HY000 (ER_ERROR_DURING_ROLLBACK)

    Message: Got error %d during ROLLBACK

  • Error: 1182 SQLSTATE: HY000 (ER_ERROR_DURING_FLUSH_LOGS)

    Message: Got error %d during FLUSH_LOGS

  • Error: 1183 SQLSTATE: HY000 (ER_ERROR_DURING_CHECKPOINT)

    Message: Got error %d during CHECKPOINT

  • Error: 1184 SQLSTATE: 08S01 (ER_NEW_ABORTING_CONNECTION)

    Message: Aborted connection %ld to db: '%s' user: '%s' host: `%s' (%s)

  • Error: 1185 SQLSTATE: HY000 (ER_DUMP_NOT_IMPLEMENTED)

    Message: The handler for the table does not support binary table dump

  • Error: 1186 SQLSTATE: HY000 (ER_FLUSH_MASTER_BINLOG_CLOSED)

    Message: Binlog closed while trying to FLUSH MASTER

  • Error: 1187 SQLSTATE: HY000 (ER_INDEX_REBUILD)

    Message: Failed rebuilding the index of dumped table '%s'

  • Error: 1188 SQLSTATE: HY000 (ER_MASTER)

    Message: Error from master: '%s'

  • Error: 1189 SQLSTATE: 08S01 (ER_MASTER_NET_READ)

    Message: Net error reading from master

  • Error: 1190 SQLSTATE: 08S01 (ER_MASTER_NET_WRITE)

    Message: Net error writing to master

  • Error: 1191 SQLSTATE: HY000 (ER_FT_MATCHING_KEY_NOT_FOUND)

    Message: Can't find FULLTEXT index matching the column list

  • Error: 1192 SQLSTATE: HY000 (ER_LOCK_OR_ACTIVE_TRANSACTION)

    Message: Can't execute the given command because you have active locked tables or an active transaction

  • Error: 1193 SQLSTATE: HY000 (ER_UNKNOWN_SYSTEM_VARIABLE)

    Message: Unknown system variable '%s'

  • Error: 1194 SQLSTATE: HY000 (ER_CRASHED_ON_USAGE)

    Message: Table '%s' is marked as crashed and should be repaired

  • Error: 1195 SQLSTATE: HY000 (ER_CRASHED_ON_REPAIR)

    Message: Table '%s' is marked as crashed and last (automatic?) repair failed

  • Error: 1196 SQLSTATE: HY000 (ER_WARNING_NOT_COMPLETE_ROLLBACK)

    Message: Some non-transactional changed tables couldn't be rolled back

  • Error: 1197 SQLSTATE: HY000 (ER_TRANS_CACHE_FULL)

    Message: Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again

  • Error: 1198 SQLSTATE: HY000 (ER_SLAVE_MUST_STOP)

    Message: This operation cannot be performed with a running slave; run STOP SLAVE first

  • Error: 1199 SQLSTATE: HY000 (ER_SLAVE_NOT_RUNNING)

    Message: This operation requires a running slave; configure slave and do START SLAVE

  • Error: 1200 SQLSTATE: HY000 (ER_BAD_SLAVE)

    Message: The server is not configured as slave; fix in config file or with CHANGE MASTER TO

  • Error: 1201 SQLSTATE: HY000 (ER_MASTER_INFO)

    Message: Could not initialize master info structure; more error messages can be found in the MySQL error log

  • Error: 1202 SQLSTATE: HY000 (ER_SLAVE_THREAD)

    Message: Could not create slave thread; check system resources

  • Error: 1203 SQLSTATE: 42000 (ER_TOO_MANY_USER_CONNECTIONS)

    Message: User %s has already more than 'max_user_connections' active connections

  • Error: 1204 SQLSTATE: HY000 (ER_SET_CONSTANTS_ONLY)

    Message: You may only use constant expressions with SET

  • Error: 1205 SQLSTATE: HY000 (ER_LOCK_WAIT_TIMEOUT)

    Message: Lock wait timeout exceeded; try restarting transaction

  • Error: 1206 SQLSTATE: HY000 (ER_LOCK_TABLE_FULL)

    Message: The total number of locks exceeds the lock table size

  • Error: 1207 SQLSTATE: 25000 (ER_READ_ONLY_TRANSACTION)

    Message: Update locks cannot be acquired during a READ UNCOMMITTED transaction

  • Error: 1208 SQLSTATE: HY000 (ER_DROP_DB_WITH_READ_LOCK)

    Message: DROP DATABASE not allowed while thread is holding global read lock

  • Error: 1209 SQLSTATE: HY000 (ER_CREATE_DB_WITH_READ_LOCK)

    Message: CREATE DATABASE not allowed while thread is holding global read lock

  • Error: 1210 SQLSTATE: HY000 (ER_WRONG_ARGUMENTS)

    Message: Incorrect arguments to %s

  • Error: 1211 SQLSTATE: 42000 (ER_NO_PERMISSION_TO_CREATE_USER)

    Message: '%s'@'%s' is not allowed to create new users

  • Error: 1212 SQLSTATE: HY000 (ER_UNION_TABLES_IN_DIFFERENT_DIR)

    Message: Incorrect table definition; all MERGE tables must be in the same database

  • Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)

    Message: Deadlock found when trying to get lock; try restarting transaction

  • Error: 1214 SQLSTATE: HY000 (ER_TABLE_CANT_HANDLE_FT)

    Message: The used table type doesn't support FULLTEXT indexes

  • Error: 1215 SQLSTATE: HY000 (ER_CANNOT_ADD_FOREIGN)

    Message: Cannot add foreign key constraint

  • Error: 1216 SQLSTATE: 23000 (ER_NO_REFERENCED_ROW)

    Message: Cannot add a child row: a foreign key constraint fails

  • Error: 1217 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED)

    Message: Cannot delete a parent row: a foreign key constraint fails

  • Error: 1218 SQLSTATE: 08S01 (ER_CONNECT_TO_MASTER)

    Message: Error connecting to master: %s

  • Error: 1219 SQLSTATE: HY000 (ER_QUERY_ON_MASTER)

    Message: Error running query on master: %s

  • Error: 1220 SQLSTATE: HY000 (ER_ERROR_WHEN_EXECUTING_COMMAND)

    Message: Error when executing command %s: %s

  • Error: 1221 SQLSTATE: HY000 (ER_WRONG_USAGE)

    Message: Incorrect usage of %s and %s

  • Error: 1222 SQLSTATE: 21000 (ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT)

    Message: The used SELECT statements have a different number of columns

  • Error: 1223 SQLSTATE: HY000 (ER_CANT_UPDATE_WITH_READLOCK)

    Message: Can't execute the query because you have a conflicting read lock

  • Error: 1224 SQLSTATE: HY000 (ER_MIXING_NOT_ALLOWED)

    Message: Mixing of transactional and non-transactional tables is disabled

  • Error: 1225 SQLSTATE: HY000 (ER_DUP_ARGUMENT)

    Message: Option '%s' used twice in statement

  • Error: 1226 SQLSTATE: 42000 (ER_USER_LIMIT_REACHED)

    Message: User '%s' has exceeded the '%s' resource (current value: %ld)

  • Error: 1227 SQLSTATE: HY000 (ER_SPECIFIC_ACCESS_DENIED_ERROR)

    Message: Access denied; you need the %s privilege for this operation

  • Error: 1228 SQLSTATE: HY000 (ER_LOCAL_VARIABLE)

    Message: Variable '%s' is a SESSION variable and can't be used with SET GLOBAL

  • Error: 1229 SQLSTATE: HY000 (ER_GLOBAL_VARIABLE)

    Message: Variable '%s' is a GLOBAL variable and should be set with SET GLOBAL

  • Error: 1230 SQLSTATE: 42000 (ER_NO_DEFAULT)

    Message: Variable '%s' doesn't have a default value

  • Error: 1231 SQLSTATE: 42000 (ER_WRONG_VALUE_FOR_VAR)

    Message: Variable '%s' can't be set to the value of '%s'

  • Error: 1232 SQLSTATE: 42000 (ER_WRONG_TYPE_FOR_VAR)

    Message: Incorrect argument type to variable '%s'

  • Error: 1233 SQLSTATE: HY000 (ER_VAR_CANT_BE_READ)

    Message: Variable '%s' can only be set, not read

  • Error: 1234 SQLSTATE: 42000 (ER_CANT_USE_OPTION_HERE)

    Message: Incorrect usage/placement of '%s'

  • Error: 1235 SQLSTATE: 42000 (ER_NOT_SUPPORTED_YET)

    Message: This version of MySQL doesn't yet support '%s'

  • Error: 1236 SQLSTATE: HY000 (ER_MASTER_FATAL_ERROR_READING_BINLOG)

    Message: Got fatal error %d: '%s' from master when reading data from binary log

  • Error: 1237 SQLSTATE: HY000 (ER_SLAVE_IGNORED_TABLE)

    Message: Slave SQL thread ignored the query because of replicate-*-table rules

  • Error: 1238 SQLSTATE: HY000 (ER_INCORRECT_GLOBAL_LOCAL_VAR)

    Message: Variable '%s' is a %s variable

  • Error: 1239 SQLSTATE: 42000 (ER_WRONG_FK_DEF)

    Message: Incorrect foreign key definition for '%s': %s

  • Error: 1240 SQLSTATE: HY000 (ER_KEY_REF_DO_NOT_MATCH_TABLE_REF)

    Message: Key reference and table reference don't match

  • Error: 1241 SQLSTATE: 21000 (ER_OPERAND_COLUMNS)

    Message: Operand should contain %d column(s)

  • Error: 1242 SQLSTATE: 21000 (ER_SUBQUERY_NO_1_ROW)

    Message: Subquery returns more than 1 row

  • Error: 1243 SQLSTATE: HY000 (ER_UNKNOWN_STMT_HANDLER)

    Message: Unknown prepared statement handler (%.*s) given to %s

  • Error: 1244 SQLSTATE: HY000 (ER_CORRUPT_HELP_DB)

    Message: Help database is corrupt or does not exist

  • Error: 1245 SQLSTATE: HY000 (ER_CYCLIC_REFERENCE)

    Message: Cyclic reference on subqueries

  • Error: 1246 SQLSTATE: HY000 (ER_AUTO_CONVERT)

    Message: Converting column '%s' from %s to %s

  • Error: 1247 SQLSTATE: 42S22 (ER_ILLEGAL_REFERENCE)

    Message: Reference '%s' not supported (%s)

  • Error: 1248 SQLSTATE: 42000 (ER_DERIVED_MUST_HAVE_ALIAS)

    Message: Every derived table must have its own alias

  • Error: 1249 SQLSTATE: 01000 (ER_SELECT_REDUCED)

    Message: Select %u was reduced during optimization

  • Error: 1250 SQLSTATE: 42000 (ER_TABLENAME_NOT_ALLOWED_HERE)

    Message: Table '%s' from one of the SELECTs cannot be used in %s

  • Error: 1251 SQLSTATE: 08004 (ER_NOT_SUPPORTED_AUTH_MODE)

    Message: Client does not support authentication protocol requested by server; consider upgrading MySQL client

  • Error: 1252 SQLSTATE: 42000 (ER_SPATIAL_CANT_HAVE_NULL)

    Message: All parts of a SPATIAL index must be NOT NULL

  • Error: 1253 SQLSTATE: 42000 (ER_COLLATION_CHARSET_MISMATCH)

    Message: COLLATION '%s' is not valid for CHARACTER SET '%s'

  • Error: 1254 SQLSTATE: HY000 (ER_SLAVE_WAS_RUNNING)

    Message: Slave is already running

  • Error: 1255 SQLSTATE: HY000 (ER_SLAVE_WAS_NOT_RUNNING)

    Message: Slave has already been stopped

  • Error: 1256 SQLSTATE: HY000 (ER_TOO_BIG_FOR_UNCOMPRESS)

    Message: Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)

  • Error: 1257 SQLSTATE: HY000 (ER_ZLIB_Z_MEM_ERROR)

    Message: ZLIB: Not enough memory

  • Error: 1258 SQLSTATE: HY000 (ER_ZLIB_Z_BUF_ERROR)

    Message: ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)

  • Error: 1259 SQLSTATE: HY000 (ER_ZLIB_Z_DATA_ERROR)

    Message: ZLIB: Input data corrupted

  • Error: 1260 SQLSTATE: HY000 (ER_CUT_VALUE_GROUP_CONCAT)

    Message: %d line(s) were cut by GROUP_CONCAT()

  • Error: 1261 SQLSTATE: 01000 (ER_WARN_TOO_FEW_RECORDS)

    Message: Row %ld doesn't contain data for all columns

  • Error: 1262 SQLSTATE: 01000 (ER_WARN_TOO_MANY_RECORDS)

    Message: Row %ld was truncated; it contained more data than there were input columns

  • Error: 1263 SQLSTATE: 01000 (ER_WARN_NULL_TO_NOTNULL)

    Message: Data truncated; NULL supplied to NOT NULL column '%s' at row %ld

  • Error: 1264 SQLSTATE: 01000 (ER_WARN_DATA_OUT_OF_RANGE)

    Message: Data truncated; out of range for column '%s' at row %ld

  • Error: 1265 SQLSTATE: 01000 (ER_WARN_DATA_TRUNCATED)

    Message: Data truncated for column '%s' at row %ld

  • Error: 1266 SQLSTATE: HY000 (ER_WARN_USING_OTHER_HANDLER)

    Message: Using storage engine %s for table '%s'

  • Error: 1267 SQLSTATE: HY000 (ER_CANT_AGGREGATE_2COLLATIONS)

    Message: Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'

  • Error: 1268 SQLSTATE: HY000 (ER_DROP_USER)

    Message: Can't drop one or more of the requested users

  • Error: 1269 SQLSTATE: HY000 (ER_REVOKE_GRANTS)

    Message: Can't revoke all privileges, grant for one or more of the requested users

  • Error: 1270 SQLSTATE: HY000 (ER_CANT_AGGREGATE_3COLLATIONS)

    Message: Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'

  • Error: 1271 SQLSTATE: HY000 (ER_CANT_AGGREGATE_NCOLLATIONS)

    Message: Illegal mix of collations for operation '%s'

  • Error: 1272 SQLSTATE: HY000 (ER_VARIABLE_IS_NOT_STRUCT)

    Message: Variable '%s' is not a variable component (can't be used as XXXX.variable_name)

  • Error: 1273 SQLSTATE: HY000 (ER_UNKNOWN_COLLATION)

    Message: Unknown collation: '%s'

  • Error: 1274 SQLSTATE: HY000 (ER_SLAVE_IGNORED_SSL_PARAMS)

    Message: SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started

  • Error: 1275 SQLSTATE: HY000 (ER_SERVER_IS_IN_SECURE_AUTH_MODE)

    Message: Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format

  • Error: 1276 SQLSTATE: HY000 (ER_WARN_FIELD_RESOLVED)

    Message: Field or reference '%s%s%s%s%s' of SELECT #%d was resolved in SELECT #%d

  • Error: 1277 SQLSTATE: HY000 (ER_BAD_SLAVE_UNTIL_COND)

    Message: Incorrect parameter or combination of parameters for START SLAVE UNTIL

  • Error: 1278 SQLSTATE: HY000 (ER_MISSING_SKIP_SLAVE)

    Message: It is recommended to run with --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you are not safe in case of unexpected slave's mysqld restart

  • Error: 1279 SQLSTATE: HY000 (ER_UNTIL_COND_IGNORED)

    Message: SQL thread is not to be started so UNTIL options are ignored

  • Error: 1280 SQLSTATE: 42000 (ER_WRONG_NAME_FOR_INDEX)

    Message: Incorrect index name '%s'

  • Error: 1281 SQLSTATE: 42000 (ER_WRONG_NAME_FOR_CATALOG)

    Message: Incorrect catalog name '%s'

  • Error: 1282 SQLSTATE: HY000 (ER_WARN_QC_RESIZE)

    Message: Query cache failed to set size %lu, new query cache size is %lu

  • Error: 1283 SQLSTATE: HY000 (ER_BAD_FT_COLUMN)

    Message: Column '%s' cannot be part of FULLTEXT index

  • Error: 1284 SQLSTATE: HY000 (ER_UNKNOWN_KEY_CACHE)

    Message: Unknown key cache '%s'

  • Error: 1285 SQLSTATE: HY000 (ER_WARN_HOSTNAME_WONT_WORK)

    Message: MySQL is started in --skip-name-resolve mode. You need to restart it without this switch for this grant to work

  • Error: 1286 SQLSTATE: 42000 (ER_UNKNOWN_STORAGE_ENGINE)

    Message: Unknown table engine '%s'

  • Error: 1287 SQLSTATE: HY000 (ER_WARN_DEPRECATED_SYNTAX)

    Message: '%s' is deprecated, use '%s' instead

  • Error: 1288 SQLSTATE: HY000 (ER_NON_UPDATABLE_TABLE)

    Message: The target table %s of the %s is not updateable

  • Error: 1289 SQLSTATE: HY000 (ER_FEATURE_DISABLED)

    Message: The '%s' feature was disabled; you need MySQL built with '%s' to have it working

  • Error: 1290 SQLSTATE: HY000 (ER_OPTION_PREVENTS_STATEMENT)

    Message: The MySQL server is running with the %s option so it cannot execute this statement

  • Error: 1291 SQLSTATE: HY000 (ER_DUPLICATED_VALUE_IN_TYPE)

    Message: Column '%s' has duplicated value '%s' in %s

  • Error: 1292 SQLSTATE: HY000 (ER_TRUNCATED_WRONG_VALUE)

    Message: Truncated wrong %s value: '%s'

  • Error: 1293 SQLSTATE: HY000 (ER_TOO_MUCH_AUTO_TIMESTAMP_COLS)

    Message: Incorrect table definition; There can only be one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

  • Error: 1294 SQLSTATE: HY000 (ER_INVALID_ON_UPDATE)

    Message: Invalid ON UPDATE clause for '%s' column

  • Error: 1295 SQLSTATE: HY000 (ER_UNSUPPORTED_PS)

    Message: This command is not supported in the prepared statement protocol yet

  • Error: 1296 SQLSTATE: HY000 (ER_GET_ERRMSG)

    Message: Got NDB error %d '%s'

  • Error: 1297 SQLSTATE: HY000 (ER_GET_TEMPORARY_ERRMSG)

    Message: Got temporary NDB error %d '%s'

  • Error: 1298 SQLSTATE: HY000 (ER_UNKNOWN_TIME_ZONE)

    Message: Unknown or incorrect time zone: '%s'

  • Error: 1299 SQLSTATE: HY000 (ER_WARN_INVALID_TIMESTAMP)

    Message: Invalid TIMESTAMP value in column '%s' at row %ld

  • Error: 1300 SQLSTATE: HY000 (ER_INVALID_CHARACTER_STRING)

    Message: Invalid %s character string: '%s'

  • Error: 1301 SQLSTATE: HY000 (ER_WARN_ALLOWED_PACKET_OVERFLOWED)

    Message: Result of %s() was larger than max_allowed_packet (%ld) - truncated

  • Error: 1302 SQLSTATE: HY000 (ER_CONFLICTING_DECLARATIONS)

    Message: Conflicting declarations: '%s%s' and '%s%s'

Client error information comes from the following files:

  • The Error values and the symbols in parentheses correspond to definitions in the include/errmsg.h MySQL source file.

  • The Message values correspond to the error messages that are listed in the libmysql/errmsg.c file. %d or %s represent numbers or strings that are substituted into the messages %when they are displayed.

Because updates are frequent, it is possible that these files contain additional error information not listed here.

  • Error: 2000 (CR_UNKNOWN_ERROR)

    Message: Unknown MySQL error

  • Error: 2001 (CR_SOCKET_CREATE_ERROR)

    Message: Can't create UNIX socket (%d)

  • Error: 2002 (CR_CONNECTION_ERROR)

    Message: Can't connect to local MySQL server through socket '%s' (%d)

  • Error: 2003 (CR_CONN_HOST_ERROR)

    Message: Can't connect to MySQL server on '%s' (%d)

  • Error: 2004 (CR_IPSOCK_ERROR)

    Message: Can't create TCP/IP socket (%d)

  • Error: 2005 (CR_UNKNOWN_HOST)

    Message: Unknown MySQL server host '%s' (%d)

  • Error: 2006 (CR_SERVER_GONE_ERROR)

    Message: MySQL server has gone away

  • Error: 2007 (CR_VERSION_ERROR)

    Message: Protocol mismatch; server version = %d, client version = %d

  • Error: 2008 (CR_OUT_OF_MEMORY)

    Message: MySQL client ran out of memory

  • Error: 2009 (CR_WRONG_HOST_INFO)

    Message: Wrong host info

  • Error: 2010 (CR_LOCALHOST_CONNECTION)

    Message: Localhost via UNIX socket

  • Error: 2011 (CR_TCP_CONNECTION)

    Message: %s via TCP/IP

  • Error: 2012 (CR_SERVER_HANDSHAKE_ERR)

    Message: Error in server handshake

  • Error: 2013 (CR_SERVER_LOST)

    Message: Lost connection to MySQL server during query

  • Error: 2014 (CR_COMMANDS_OUT_OF_SYNC)

    Message: Commands out of sync; you can't run this command now

  • Error: 2015 (CR_NAMEDPIPE_CONNECTION)

    Message: Named pipe: %s

  • Error: 2016 (CR_NAMEDPIPEWAIT_ERROR)

    Message: Can't wait for named pipe to host: %s pipe: %s (%lu)

  • Error: 2017 (CR_NAMEDPIPEOPEN_ERROR)

    Message: Can't open named pipe to host: %s pipe: %s (%lu)

  • Error: 2018 (CR_NAMEDPIPESETSTATE_ERROR)

    Message: Can't set state of named pipe to host: %s pipe: %s (%lu)

  • Error: 2019 (CR_CANT_READ_CHARSET)

    Message: Can't initialize character set %s (path: %s)

  • Error: 2020 (CR_NET_PACKET_TOO_LARGE)

    Message: Got packet bigger than 'max_allowed_packet' bytes

  • Error: 2021 (CR_EMBEDDED_CONNECTION)

    Message: Embedded server

  • Error: 2022 (CR_PROBE_SLAVE_STATUS)

    Message: Error on SHOW SLAVE STATUS:

  • Error: 2023 (CR_PROBE_SLAVE_HOSTS)

    Message: Error on SHOW SLAVE HOSTS:

  • Error: 2024 (CR_PROBE_SLAVE_CONNECT)

    Message: Error connecting to slave:

  • Error: 2025 (CR_PROBE_MASTER_CONNECT)

    Message: Error connecting to master:

  • Error: 2026 (CR_SSL_CONNECTION_ERROR)

    Message: SSL connection error

  • Error: 2027 (CR_MALFORMED_PACKET)

    Message: Malformed packet

  • Error: 2028 (CR_WRONG_LICENSE)

    Message: This client library is licensed only for use with MySQL servers having '%s' license

  • Error: 2029 (CR_NULL_POINTER)

    Message: Invalid use of null pointer

  • Error: 2030 (CR_NO_PREPARE_STMT)

    Message: Statement not prepared

  • Error: 2031 (CR_PARAMS_NOT_BOUND)

    Message: No data supplied for parameters in prepared statement

  • Error: 2032 (CR_DATA_TRUNCATED)

    Message: Data truncated

  • Error: 2033 (CR_NO_PARAMETERS_EXISTS)

    Message: No parameters exist in the statement

  • Error: 2034 (CR_INVALID_PARAMETER_NO)

    Message: Invalid parameter number

  • Error: 2035 (CR_INVALID_BUFFER_USE)

    Message: Can't send long data for non-string/non-binary data types (parameter: %d)

  • Error: 2036 (CR_UNSUPPORTED_PARAM_TYPE)

    Message: Using unsupported buffer type: %d (parameter: %d)

  • Error: 2037 (CR_SHARED_MEMORY_CONNECTION)

    Message: Shared memory: %s

  • Error: 2038 (CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR)

    Message: Can't open shared memory; client could not create request event (%lu)

  • Error: 2039 (CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR)

    Message: Can't open shared memory; no answer event received from server (%lu)

  • Error: 2040 (CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR)

    Message: Can't open shared memory; server could not allocate file mapping (%lu)

  • Error: 2041 (CR_SHARED_MEMORY_CONNECT_MAP_ERROR)

    Message: Can't open shared memory; server could not get pointer to file mapping (%lu)

  • Error: 2042 (CR_SHARED_MEMORY_FILE_MAP_ERROR)

    Message: Can't open shared memory; client could not allocate file mapping (%lu)

  • Error: 2043 (CR_SHARED_MEMORY_MAP_ERROR)

    Message: Can't open shared memory; client could not get pointer to file mapping (%lu)

  • Error: 2044 (CR_SHARED_MEMORY_EVENT_ERROR)

    Message: Can't open shared memory; client could not create %s event (%lu)

  • Error: 2045 (CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR)

    Message: Can't open shared memory; no answer from server (%lu)

  • Error: 2046 (CR_SHARED_MEMORY_CONNECT_SET_ERROR)

    Message: Can't open shared memory; cannot send request event to server (%lu)

  • Error: 2047 (CR_CONN_UNKNOW_PROTOCOL)

    Message: Wrong or unknown protocol

  • Error: 2048 (CR_INVALID_CONN_HANDLE)

    Message: Invalid connection handle

  • Error: 2049 (CR_SECURE_AUTH)

    Message: Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)

  • Error: 2050 (CR_FETCH_CANCELED)

    Message: Row retrieval was canceled by mysql_stmt_close() call

  • Error: 2051 (CR_NO_DATA)

    Message: Attempt to read column without prior row fetch

  • Error: 2052 (CR_NO_STMT_METADATA)

    Message: Prepared statement contains no metadata


저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

MySQL Stored Procedure (저장프로시저)  (2) 2014.03.28
임시테이블 - Temproray Table  (0) 2014.03.26
MySQL 에러처리  (0) 2014.03.26
저장 프로시저 관련 포스팅  (0) 2014.03.26
윈도우에서 MySQL 설치하고1045 에러 발생  (0) 2013.12.04
문법 - MySQL 조건문  (0) 2013.03.26
현재 0 개의 댓글이 있습니다.
Comment

Blog

저장 프로시저 관련 포스팅

2014.03.26 15:08 DataBase/MySQL


MySQLStored Procedure 개요

파라미터를 사용한 동적쿼리 프로시저 예제

MySQL 저장 프로시져 내에서 발생한 에러 처리 (Error Handling)


MySQL 저장프로시저.. 아 MS-SQL 저장프로시저가 그립다

저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

임시테이블 - Temproray Table  (0) 2014.03.26
MySQL 에러처리  (0) 2014.03.26
저장 프로시저 관련 포스팅  (0) 2014.03.26
윈도우에서 MySQL 설치하고1045 에러 발생  (0) 2013.12.04
문법 - MySQL 조건문  (0) 2013.03.26
MEMO - MySQL 원격접속 권한 설정  (0) 2013.03.25
현재 0 개의 댓글이 있습니다.
Comment

Blog

윈도우에서 MySQL 설치하고1045 에러 발생

2013.12.04 09:38 DataBase/MySQL


1. 먼저 MySQL 서비스를 중지

2. 비인증 로그인이 가능하도록 설정 후, MySQL 재실행.
    - 콘솔창에서 다음과 같이 입력한다.

mysqld --skip-grant
mysql -uroot mysql


이제 비밀번호가 없어도 root 권한으로 MySQL 이 사용가능합니다. 

MySQL DB 를 오픈하고 암호를 재설정 하고, 권한을 부여합니다.

>> use mysql;
>> update user set password=PASSWORD('1111') where user='root';
>> flush privileges;
>> grant all on *.* to 'root'@'localhost' identified by '1111' with grant option;
>> flush privileges;
>> exit


저작자 표시
신고

'DataBase > MySQL' 카테고리의 다른 글

MySQL 에러처리  (0) 2014.03.26
저장 프로시저 관련 포스팅  (0) 2014.03.26
윈도우에서 MySQL 설치하고1045 에러 발생  (0) 2013.12.04
문법 - MySQL 조건문  (0) 2013.03.26
MEMO - MySQL 원격접속 권한 설정  (0) 2013.03.25
ERROR - 사용자 등록시 오류  (0) 2013.03.25
현재 0 개의 댓글이 있습니다.
Comment

Blog

문법 - MySQL 조건문

2013.03.26 22:33 DataBase/MySQL


출처 : http://www.spatium.co.kr/languages/content.php?chno=5&bno=34


if 문, case 문, ifnull문

 

IF 문

형식 : if ( 조건문, 참일때 값, 거짓일때 값)

EX)  select member_id, if ( isnull(birthday), '-', birthday ) from member
설명 - 멤버 테이블에서 아이디(member_id) 와 생일을 뽑는데 null 일경우는 - 를 출력, 
      아니면 생일을 출력

 

 

Case 문

형식 :  case (조건 또는 값)
          when 값1 then 표시값
          when 값2 then 표시값
        else 표시값
        end

EX)   select case a when '1' then a when '2' then b else c end from table_name
설명 - a 값이 '1'이면 a, '2' 이면 b, 둘다 아닐경우 c 를 출력

 

 

ifnull문 ( mysql 에서 사용 )

 형식 : ifnull ( 값1, 값2)

EX ) select ifnull ( price, 0 ) from books
설명 - price 값이 Null 이면 0을, Null 이 아니면 price 값을 출력

 

 

isnull문 ( MS-SQL 에서 사용 )

 형식 : ifnull ( 값1, 값2)

EX ) select isnull ( price, 0 ) from books
설명 - price 값이 Null 이면 0을, Null 이 아니면 price 값을 출력

 

 

NVL문 ( Oracle 에서 사용 )

 형식 : NVL ( 값1, 값2) 

EX ) select nvl ( price, 0 ) from books
설명 - price 값이 Null 이면 0을, Null 이 아니면 price 값을 출력

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

MySQL 테이블 대소문자 구분옵션

2012.06.23 13:35 DataBase/MySQL


테스트 환경

OS : Windows Server 2008 R2 Enterprise

MySQL : 5.x

GUI : Toad For MySQL

WPI 설치 ( Microsoft Web Platform Installer )

==================================================================================================

마이크로소프트 웹플랫폼 인스톨러를 이용해 PHP와 MySQL 을 설치하였다.

그리고 데이터베이스를 생성하는데, TEST_DB 를 생성하니, 자동으로 test_db 로 생성되었다.

그러다보니 구글링을 뒤지니 이미 많은 경험을 하셨던 분들의 포스팅이 올라와 있어 참고하고 다시 포스팅한다.


데이터베이스를 생성하는 기본적으로 소문자로 지정되어 있었다.

해서 다음과 같은 옵션을 my.ini 파일에 추가해 준다.




위에 #TABLE_NAME 이란 주석은 그냥 임의로 지정한거니 신경쓰지 않아도 된다.

중요한건 밑에 lower_case_table_name 이란 옵션이다.

리눅스에서는 설정해보지 않아 정확히 모르겠다.


어쨌든

1 은 기본값. 대소문자 구분하지 않고 소문자로 저장

2 는 대소문자 구분.


그리고 서비스 에서 MySQL 재시작





여기에 더 정확한 의미는 따로 있겠으나, 일단 이 정도로 알고 있으면 될 듯하다.

그리고 열심히 캡쳐 떠가며 포스팅한사람에게 센스답글을 달아주면 완료!




저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

MySQL 쓰면서 하지 말아야 할 것 17가지

2012.05.21 00:24 DataBase/MySQL


출처 : http://xeraph.com/4286421


작게 생각하기
- 조만간 규모가 커질거라면 MySQL ecosystem을 봐야된다.
- 그리고 캐싱 빡시게 안 하는 메이저 웹사이트는 없다.
- develooper.com의 Hansen PT랑 Ilia 튜토리얼 볼 것
- 처음부터 확장 가능하게 아키텍처 잘 쪼개놔야된다.
- 복제랑 파티셔닝 어떻게 할지 미리 계획 세워놔라.
- 파일 기반 세션 좀 쓰지마 -_-
- 그렇다고 너무 쓸데없이 크게 생각하지도 말 것
- 특히 성능하고 확장성 구분 못 하면 난감함

EXPLAIN 안 써보기
- SELECT 앞에 EXPLAIN 이라고 붙이기만 하면 되는 것을 (..)
- 실행 계획 확인
- 타입 컬럼에 index 써있는거랑 Extra 컬럼에 index 써있는거랑 "매우 큰" 차이 있음
 * 타입에 있으면 Full 인덱스 스캔 (안 좋다.)
 * Extra 컬럼에 있으면 Covering 인덱스 찾았다는 의미임 (좋다!)
- 5.0 이후부터는 index_merge 최적화도 한다.

잘못된 데이터 타입 선택
- 한 메모리 블럭 단위에 인덱스 레코드가 많이 들어갈수록 쿼리가 빨리 실행될 것이다. (중요)
아.. 정규화 좀 해 -_-... (이거 정말 충격과 공포인 듯)
- 가장 작은 데이터 타입을 써.. (진짜 BIGINT가 필요하냐고..)
- 인덱스 걸리는 필드는 정말 최소한으로 데이터 크기를 써야된다고.
- IP는 INT UNSIGNED로 저장해!! (아주 공감)
 * 이럴 때 쓰라고 INET_ATON 함수가 아예 내장되어 있음.

PHP에서 pconnect 쓰는 짓
- 아파치에서 좀비 프로세스라도 생기면 그 커넥션은 그냥 증발하는거야..
- 어차피 MySQL 접속 속도는 Oracle이나 PostgreSQL 보다 10~100배 빠르다고.

너무 과도한 DB 추상화 계층을 두는 것
- 어디 포팅 열심히 할 거 아니면 추상화 계층 쓰지마 (ADODB, MDB2, PearDB 등)
- scale out 가능한걸 쓰라고.

스토리지 엔진 이해 못 하는 것
- 단일 엔진만으로 전체 아키텍처를 결정했다면 대부분 최적이 아님
- 엔진 별 장단점을 공부할 것
- ARCHIVE : zlib으로 압축해주고 UPDATE 안 되고 로그 Bulk Insert에 유용함.
- MEMORY : 서버 재시작하면 증발. 인덱스가 HASH나 BTREE로 가능함. 임시, 요약 데이터에 사용.
 * 주간 top X 테이블 같은 것.
 * 하여튼 메모리에 박아넣고 싶은 데이터 있으면..

인덱스 레이아웃 이해 못 하는 것
- 제대로 인덱스랑 스토리지 엔진 선택하려면 공부 좀 해
- 엔진은 데이터와 인덱스 레코드를 메모리나 디스크에 레이아웃하는 걸 구현한 것
- clustered 구성은 데이터를 PK 순서에 따라 저장함.
- non-clustered 구성은 인덱스만 순서대로 저장하고 데이터는 순서 가정하지 않음.
- clustered에서는 인덱스만 타면 추가적인 조회 없이 바로 데이터 가져오는 것임.
- 그래서 clustered PK는 작은 놈으로 할 필요가 있다는거
 * 다른 인덱스는 각 레코드마다 PK를 앞에 더 붙이게 되니까.
 * PK 지정 안 하면 아무렇게나 해버림

쿼리 캐시 이해 못 하는 것
- 어플리케이션 read/write 비율은 알고 있어야지
- 쿼리 캐시 설계는 CPU 사용과 읽기 성능 간의 타협
- 쿼리 캐시 크기를 늘린다고 읽기 성능이 좋아지는게 아님. heavy read라도 마찬가지.
- 과도한 CPU 사용을 막기 위해 무효화 할 때는 캐시 항목들을 뭉텅이로 날려버림
- 한마디로 SELECT가 참조하는 테이블 데이터 하나라도 변경되면 그 테이블 캐시는 다 날라간다는 얘기임
- 수직 테이블 파티셔닝으로 처방 
 * Product와 ProductCount를 쪼갠다든지.. 
 * 자주 변하는 것과 변하지 않는 것을 쪼개는게 중요하다 이 말임.

Stored Procedure를 쓰는 것
- 무조건 쓰면 안 된다는게 아니고..
- 컴파일 할 때 무슨 일이 일어나는지 이해 못 하고 쓰면 재앙이 된다 이 말.
- 다른 RDBMS랑 다르게 connection thread에서 실행 계획이 세워짐.
- 이게 뭔 얘기냐 하면 데이터 한 번 가져오고 연결 끊으면 그냥 CPU 낭비 (7~8% 정도)하는 꼴이라는 것.
- 웬만하면 Prepared 구문과 Dynamic SQL을 써라.. 아래 경우를 제외하고
 * ETL 타입 프로시저
 * 아주아주 복잡하지만 자주 실행되지는 않는 것
 * 한 번 요청할 때마다 여러번 실행되는 간단한 것 (연결한 상태로 여러번 써야 된다니까)

인덱스 컬럼에 함수 쓰는 것
- 함수에 인덱스 컬럼 넣어 호출하면 당연히 인덱스 못 탄다
- 함수를 먼저 계산해서 상수로 만든 다음에 = 로 연결해야 인덱스 탈 수 있다.
 * 여기 실행 계획 보면 LIKE도 range type 인덱스 타는 것 보임

인덱스 빼먹거나 쓸모없는 인덱스 만들어 놓는 것
- 인덱스 분포도(selectivity)가 허접하면 안 쓴다. 
- S = d/n 
 * d = 서로 다른 값의 수 (# of distinct values)
 * n = 테이블의 전체 레코드 수
- 쓸모없는 인덱스는 INSERT/UPDATE/DELETE를 느리게 할 뿐..
- FK는 무조건 인덱스 걸어라. (물론 FK 제약 걸면 인덱스 자동으로 생긴다.)
- WHERE나 GROUP BY 표현식에서 쓰이는 컬럼은 인덱스 추가를 고려할 것
- covering index 사용을 고려할 것
- 인덱스 컬럼 순서에 유의할 것!

join 안 쓰는 짓
- 서브쿼리는 join으로 재작성해라
- 커서 제거해라
- 좋은 Mysql 성능을 내려면 기본
- 집합 기반으로 생각해야지 루프 돌리는거 생각하면 안 된다.

Deep Scan 고려하지 않는 것
- 검색엔진 크러울러가 쓸고 지나갈 수 있다.
- 이 경우 계속해서 전체 집합을 정렬한 다음 LIMIT로 가져와야 하니 무진장 느려진다.
- 어떻게든 집합을 작게 줄인 다음 거기서 LIMIT 걸어 가져올 것

InnoDB 테이블에서 WHERE 조건절 없이 SELECT COUNT(*) 하는 짓
- InnoDB 테이블에서는 조건절 없이 COUNT(*) 하는게 느리다.
- 각 레코드의 transaction isolation을 유지하는 MVCC 구현이 복잡해서 그렇다는..
- 트리거 걸어서 메모리 스토리지 엔진 쓰는 테이블에 통계를 별도로 유지하면 된다.

프로파일링이나 벤치마킹 안 하는 것
- 프로파일링 : 병목 찾아내기
- 벤치마킹 : 시간에 따른 성능 변화 추이 평가, 부하 견딜 수 있는지 테스트
- 프로파일링 할 때는 실제 데이터를 옮겨와서 할 것
- 어디가 병목이냐~ Memory? Disk I/O? CPU? Network I/O? OS?
- 느린 쿼리 로그로 남기기
 * log_slow_queries=/path/to/log
 * log_queries_not_using_indexes
- 벤치마킹 시에는 다 고정시키고 변수 하나만 바꿔가면서 해야 함. (쿼리 캐시는 끌 것.)
- 도구를 써라~~
 * EXPLAIN
 * SHOW PROFILE
 * MyTop/innotop
 * mysqlslap
 * MyBench
 * ApacheBench (ab)
 * super-smack
 * SysBench
 * JMeter/Ant
 * Slow Query Log

AUTO_INCREMENT 안 쓰는 것
- PK를 AUTO_INCREMENT로 쓰는건 무진장 최적화 되어 있음
 * 고속 병행 INSERT 가능
  * 잠금 안 걸리고 읽으면서 계속 할 수 있다는!
- 새 레코드를 근처에 놓음으로써 디스크와 페이지 단편화를 줄임
- 메모리와 디스크에 핫 스팟을 생성하고 스와핑을 줄임

ON DUPLICATE KEY UPDATE를 안 쓰는 것
- 레코드가 있으면 업데이트하고 없으면 인서트하고 이런 코드 필요없다!! 다 날려버려라!!
- 서버에 불필요하게 왔다갔다 할 필요가 없어짐
- 5-6% 정도 빠름
- 데이터 입력이 많다면 더 커질 수 있음

하지 말아야 할 것 총정리

  1. Thinking too small
  2. Not using EXPLAIN
  3. Choosing the wrong data types
  4. Using persistent connections in PHP
  5. Using a heavy DB abstraction layer
  6. Not understanding storage engines
  7. Not understanding index layouts
  8. Not understanding how the query cache works
  9. Using stored procedures improperly
  10. Operating on an indexed column with a function
  11. Having missing or useless indexes
  12. Not being a join-fu master
  13. Not accounting for deep scans
  14. Doing SELECT COUNT(*) without WHERE on an InnoDB table
  15. Not profiling or benchmarking
  16. Not using AUTO_INCREMENT
  17. Not using ON DUPLICATE KEY UPDATEK

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

FreeSQLFormatter [SQL정렬]

2012.02.13 13:35 DataBase




보통 쿼리 (SQL스크립트) 를 짜거나, 이미 작성되있는 쿼리가 정렬이 안되어있으면
상당히 짜증이 치민다.
그런데 Toad For 씨리즈들은 라이센스가... 회사에서 사용하기에는....
그래서 불편함을 참다가.. 우연이 찾았다.
FreeSQLFormatter .
SQL 스크립트를 옵션에 맞게 정렬해주는 심플한 유틸리티.
고마운 소스포지~ㅋㅋㅋ
아래압축파일을 받아서 해당 OS 에 맞는 버전으로 압축을 해제하고 실행하면 된다.



해당 다운로드 링크 출처는  http://sourceforge.net/projects/fsqlf/ 

 
저작자 표시
신고

'DataBase' 카테고리의 다른 글

[ER-WIN] Names Option  (0) 2016.10.25
memsql  (0) 2013.12.30
FreeSQLFormatter [SQL정렬]  (0) 2012.02.13
NoSQL  (0) 2011.01.14
ERStudio  (0) 2010.08.24
현재 0 개의 댓글이 있습니다.
Comment

Blog

MySQL 에서 MS-SQL 로 데이터 이관 (MySQL ODBC Connector)

2012.01.10 17:04 DataBase/MS-SQL


이미 많이들 알고 있겠지만 난 개인적으로 처음이어서 포스팅을 한다.
MySQL 에서 MS-SQL 로 데이터 이관하는 작업이다.

테스트 환경은 다음과 같다.

* 원본 위치 환경
OS : Windows 2008 R2 Enterprise 64bit
DBMS : MS-SQL Server 2008 R2

* 이관 위치 환경
OS : Windows 2008 R2 Enterprise 64bit
DBMS : MySQL 5.1

이관될 위치 환경은 APMSETUP7 으로 설정된 환경이다.

순서는 아래와 같다.

먼저 MySQL ODBC Connector 를 다운로드 받는다. (다운로드 링크를 누른다.)


 
다운로드 받은 파일을 설치하고, 시작 → 관리도구  →  데이터 원본(ODBC) 를 실행한다.


그리고 사용자 DSN 탭에 추가 버튼을 누른다. (난 이미 추가되있어서..)


그럼 다음과 같은 새 데이터 원본 만들기 창이 나타난다.



저 상태에서 MySQL ODBC 5.1 Driver 항목을 선택하고 더블클릭 한다.

그럼 아래와 같은 ODBC Connector 창이 나타난다. 그럼 MySQL 계정정보를 입력하자.
여기서 Data Source Name 은 MySQL 에서 사용할 이름이다. 입맛에 맞게 설정하자.
 
r


여기까지 입력이 완료하고 OK 버튼을 누르고 마침 버튼을 누른다.
그럼 ODBC에 사용자 DSN 항목에 작성한 이름이 추가되어 나타나있는것을 확인할 수 있다.

[##_http://www.jkun.net/script/powerEditor/pages/1C%7Ccfile10.uf@191352334F0BE8E432AC5B.PNG%7Cwidth=%22533%22%20height=%22379%22%20alt=%22%22%20filename=%224.PNG%22%20filemime=%22image/jpeg%22%7C_##]
 그리고 이제 부터 MS-SQL 2008 에서 적용하는 과정이다.
 이미 Linked Server (연결된 서버) 를 사용해 본 사람들이 쉽게 할 수 있다. 
 아래와 같이 연결된 서버를 실행한다.


그리고 새 연결된 서버 창이 나타나면 정보를 입력한다.
공급자 : Microsoft OLE DB Provider for ODBC Driver
제품이름 : MySQL
데이터 원본 : 사용할 이름
공급자 문자열 : Driver={MySQL ODBC 5.1 Driver}; Server=서버; Database=데이터베이스;
위치 : 사용할 이름 


그리고 보안 탭에 MySQL 계정정보를 입력한다.

 
그리고 확인버튼을 누른다. 이에 만일 데이터액세스가 안되는 경우 서버 옵션 탭에
RPC 항목을 True 로 바꾸어 준다.
 


그리고 연결된 서버공급자 항목MSDASQL 항목에 속성을 활성화한다.
 


그리고 공급자 옵션 창이 나타나면 다음 항목에 체크해 준다.
중첩쿼리, 0 수준만, Inprocess 허용, 트랜잭션되지 않은 업데이트, LIKE 연산자를 지원합니다.


그리고 확인하고 마무리 지으면 다음처럼 활성화된 항목을 확인하며 MySQL 쪽에 데이터베이스 정보가
나오는 것을 확인.
 


그리고 조낸 캡쳐를 떠가며 작성한 사람을 위해서 댓글을 달아주는 센스까지 하면
완전 마무리가 된다.

MySQL 에서 MS-SQL 로 데이터 이관, 
MySQL 에서 MS-SQL 로 데이터 옮기기,

저작자 표시
신고
현재 5 개의 댓글이 있습니다.

김도현 2012.01.26 11:30 신고

링크드로 연결 시키는 방법인가요?
찾고 있는 자료였는데 감사합니다.
적용시켜 보겠습니다.


김도현 2012.01.26 12:15 신고

그런데 혹시 반대의 경우도 적용 가능 할까요?


나그네 2012.02.23 19:33 신고

자세한 설명 감사합니다..
다른 자료들은 그림도 없고 비슷한 내용을 두리뭉실하게 설명해놓았는데..
여기는 설명이 자세해서 따라하기 쉬웠습니다..

작성자 최고.. !!


csy3596 2013.02.20 11:46 신고

감사합니다.
MSSQL에 MYSQL을 연결시킬때 마다 MSSQL쪽이 죽어버려서 곤란한 상황에 있었는데 작성자님 덕분에 해결할 수 있었습니다.


  • JKUN Dev. Jkun 2013.02.20 12:25 신고

    아. ㅎㅎ 도움이 되셨다니 다행입니다.
    센스댓글 감사합니다~ ^^

Comment

Blog

APMSETUP7 의 MYSQL 테이블 생성시 대소문자 구분문제

2012.01.04 11:24 DataBase/MySQL


APMSETUP7 을 설치해서 테스트 하던 도중, 대소문자 구분이 되지 않았다.
그래서 my.ini 파일의

[mysqld]
lower_case_table_names = 0

처럼 수정(추가) 하고 서비스를 재시작하였는데 적용이 되지 않았다.
그래서 보니 APMSETUP 웹사이트 에 들어가보니 my.ini 파일의 위치 문제였다.
설치드라이브:\APM_Setup\Server\MySQL5 로 my.ini 파일을 복사하여 새로 넣으니,
정상적으로 스키마명이 대소문자를 구분하였다. 에혀...
좀 의미없는 삽질...

mysql,[mysqld],lower_case_table_names,mysql 대소문자 구분
 
저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

윈도우 환경에서 MySQL 방화벽 포트 설정

2011.12.19 21:48 OS/Windows


Test OS (테스트 환경) : Windows Server 2008 R2 Standard Edition
Test DBMS (테스트 데이터베이스) : MySQL 5.1.57
최초 Window 서버에 구성할때는 WPI (Microsoft Web Platform Installer) 로 구성하였다.

아 뒤지는 줄 알았다. 장장 몇시간을 삽질한 것인가..
간만에 어마어마하게 짜증나게 삽질한 결과를 포스팅한다.

방화벽 인바운드 규칙 설정 완료.
로컬 컴퓨터에서 아웃바운드 점검 이상도 없고..
mysql 데이터베이스에 user, db, host 모두 설정완료. grant 까지
인바운드 규칙에 `원격` 이라고 써진 항목에는 모두 사용, 허용으로 했는데도... 아 뒤지는 줄.. 개짜증...

mysql 설정파일 (mysql.ini) 에서도 호스트설정및 네트워크 액세스 모두 설정완료.
아무리 봐도 설정에는 문제가 없는데...

어메이징 빤따스띡하게 짜증나는게.. 네트워크를 모르는 내 죄....
그러다 보니 인바운드 규칙 설정프로토콜 및 포트 다음과 같은 부분이 있었다.
최초 새 규칙을 생성하여 3306 에 허용을 주었다면 원격포트에는 만일 접속할 특정 IP 가 있다면 특정포트로
범위를 지정하고, 아니라면 모든 포트를 허용해준다.
개인적으로는 테스트 서버를 구성하는 차원이었기에 모든포트로 설정하였다.
뒤지게 구글링, 검색질 해봤는데도 못찾았거나.. 윈도우 환경에서 MySQL 데이터베이스 서버를 구성한
사람들도 나와 같은 재수없는 상황을 겪었었다.


뒤지게 삽질하고 캡쳐까지 떠서 포스팅해준 사람에게
댓글은 센스!

---------------------------------------------------------------------------------------------------


그리고 아래 글이 그래도 잘 정리되어 있었기에.. (왠지 어마어마하게 삽질한.. 아니면.. 고수이시거나..)
원문으로 바로가기
 

로컬에서는 잘 접속되는 MySQL 서버에, 원격지에서 접속이 안되는 경우가 있다.

이럴 때는 다음의 내용을 테스트 해보며 점검해보면 문제점을 확인할 수 있다.



원격 접속 시 겪을 수 있는 에러 메세지는 다음과 같다.


ERROR 2003 (HY000): Can't connect to MySQL server on '...'

ERROR 1045 (28000): Access denied for user 'user'@'host' (using password: ...)


ERROR 2003 은 접속에 실패한 경우로, 아래 점검 리스트 중 (1)부터 시작한다.

ERROR 1045 는 인증에 실패한 경우로, 아래 점검 리스트 중 (7)부터 시작한다.




* 설정 파일(my.cnf / my.ini)보다 실행시 주어지는 옵션의 우선순위가 높으니, 설정 파일과 함께 실행 옵션을 면밀히 살펴보는 것이 중요하다.


(1) skip-networking

mysql 서버 실행시에 --skip-networking 옵션을 주거나, 설정 파일내에 skip-networking이 있는 경우, 서버는 로컬에서의 유닉스 소켓 접속만을 허용하게 된다. 설정되어 있다면 해제한다.



(2) bind-address

설 정 파일 내에 bind-address 값 또는 실행 옵션 중 --bind-address 값이 127.0.0.1 또는 비활성화 되어 있는지 확인한다. 이는, listen과 관련된 TCP/IP 소켓의 바인딩을 어떤 IP로 할 것인지를 결정한다. 127.0.0.1 은 외부 접속을 허용하지 않음을 의미한다. 이를 시스템에 할당된 특정 IP 값으로 지정하거나, 0.0.0.0 으로 지정하여, 시스템이 가지고 있는 모든 IP 주소를 활용하도록 수정한다. 할당된 IP 주소가 2개 이상인 경우, 적절한 값을 지정하는 것이 일반적이다.



(3) port

TCP/IP 소켓 바인딩에 사용될 포트 번호를 확인한다. 기본 값은 3306 이지만, 보안상의 이유 또는 하나의 서버에 여러 개의 MySQL 서버를 구동하기 위해 변경한 경우가 있으니, 이 값을 확인한다. 실행 옵션은 --port=3306, 설정 파일에서는 port=3306 과 같이 지정한다.



(4) listen여부 확인

shell> netstat -na | grep 3306

위 명령어를 통해, 해당 포트로 LISTEN이 되고 있는지 확인한다. 확인할 수 없으면 1~3 까지를 다시 한 번 점검한다. 설정 값을 변경한 이후에는 서버를 반드시 재시작해야 한다. ( 포트 설정 값이 다른 경우에는 해당 포트 번호를 입력한다 )



(5) TCP/IP 소켓으로 접속 시도

mysql client를 로컬에서 실행하면 일반적으로 mysql.sock 파일을 통해 접속하는 것이 일반적이다.

위의 옵션들을 다 확인한 이후에는, 로컬에서 TCP/IP 소켓으로 접속을 시도해본다.

shell> mysql -h 127.0.0.1 -P 3306 -u root -p


localhost와 127.0.0.1은 같은 이름이지만, localhost로 지정하는 경우에는 유닉스 소켓으로 접속을 시도하게 된다.

로컬에서 TCP/IP 접속이 실패한 경우, 1~4 까지를 다시 한 번 점검한다.



(6) 방화벽

로컬에서는 TCP/IP 소켓으로 접속이 잘 되는데, 원격지에서 안되는 경우 일단 텔넷으로 접속을 시도해본다.

shell> telnet -h xxx.xxx.xxx.xxx -P 3306


1~5 까지는 정상적인데, 텔넷 접속이 불가능하다면 이는 방화벽에서 막고 있는 경우가 대부분이다. 방화벽은 접속을 시도하는 호스트의 로컬 방화벽, 접속 대상이 되는 서버의 방화벽, 그리고 해당 경로에 놓여있는 라우팅 내에서의 방화벽 등이 있을 수 있다.

- 로컬 방화벽 : 특정 outgoing 패킷이 제한당하고 있는지 여부를 확인한다.

- 서버 방화벽 : MySQL 서버가 사용하고 있는 포트에 대한 방화벽 옵션을 확인한다.



(7) user / host 조합 확인

접속할 때 사용하는 사용자 이름과 호스트 주소가 올바르게 등록되어 있는지 mysql 데이터베이스내에서 확인한다.

mysql> USE mysql;

mysql> SELECT user, host FROM user WHERE user='사용자이름';


host는 다음과 같이 지정한다.

- % : 모든 호스트로부터의 접속을 허용

- xxx.xxx.xxx.xxx : 특정 호스트로부터의 접속을 허용

- xxx.xxx.% 등 : 특정 대역으로부터의 접속을 허용

- 특정 이름 : 특정 호스트로부터의 접속을 허용 (skip-name-resolve를 사용하는 경우에는 사용 불가)


MySQL의 LIKE에 사용되는 구문과 같이, %를 통해 특정 대역 또는 전체 호스트를 지정할 수 있다.

예) 192.168.0.0/16 => 192.168.%



(8) 패스워드 확인

접속에 사용하고 있는 사용자/호스트/패스워드 조합이 올바른지 확인한다.

mysql> SELECT COUNT(*) FROM user WHERE user='사용자이름' AND host='호스트' AND password=PASSWORD('패스워드')


해당 사용자 이름에 대한 레코드가 여러 개 있다면, 그 중 가장 '특정한' 값을 지정한 레코드를 우선 사용하게 된다.

( 참조 : http://dev.mysql.com/doc/refman/5.0/en/connection-access.html ) 


예 를 들어, user1@% 과 user1@192.168.0.1 의 레코드가 존재할 때, 192.168.0.1 호스트에서 user1 사용자로 접속을 시도하면, user1@%의 값을 사용하지 않고 user1@192.168.0.1의 값을 통해 인증을 수행하게 되므로, 해당 사용자 이름으로 여러 레코드가 있는 경우에는 권한 및 패스워드 설정에 보다 많은 주의를 요한다.



(9) FLUSH PRIVILEGES

user 테이블 및 권한에 관련된 테이블의 값을 추가/변경한 경우에는 반드시 아래 구문을 통해 서버가 새로운 인증 데이터를 사용하도록 한다.

mysql> FLUSH PRIVILEGES;



(10) skip-name-resolve

skip-name-resolve 옵션이 지정되지 않으면, MySQL 서버는 원격 접속하는 호스트의 IP를 DNS를 통해 이름을 확인하는 과정을 거치게 된다. 서버가 설치되어 있는 시스템의 DNS가 올바르게 설정되어 있지 않은 경우에, domain name resolving에 의해 접속 지연이 유발될 수 있으므로, 내부 네트웍에 설치된 서버인 경우에는 이 값을 활성화 시키는 것이 일반적이다.


접속을 시도하는 호스트의 IP가 DNS를 통해 이름이 얻어진 경우에는 IP가 아닌 이름으로 user 테이블을 참조하게 되므로, 이를 통한 혼동을 피하기 위해 지정하기도 한다.



(11) 그 외 특별한 상황들

MySQL 은 4.1 부터 새로운 패스워드 해시 함수를 기본적으로 사용하고 있는데, 4.1 이전의 legacy 클라이언트/ODBC 커넥터들을 사용하는 경우에는 아래의 링크를 참조하여 서버의 secure-auth, old-passwords 등의 옵션을 적절히 조정하여 사용해야 한다.

http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html


1~10 의 과정을 전부 거쳤음에도 불구하고, 1045에러가 발생하는 경우에는 다음의 명령어를 통해 해당 사용자의 암호를 예전 방식의 해시 값으로 지정 후, 접속 테스트를 수행해본다. 드문 일이지만, MySQL 5 버전대의 mysql client가 old-password hashing을 사용하는 경우가 있었다.

mysql> SET PASSWORD FOR 'user'@'host' = OLD_PASSWORD('패스워드');




(12) 최후의 보루

1~11 까지의 점검 리스트에도 해당되지 않는 경우에는 MySQL 커뮤니티를 통해 도움을 구하는 것이 마지막 방법이다. :)

데이터베이스 사랑넷 MySQL 섹션 : http://database.sarang.net/?criteria=mysql


원문출처 : http://blog.naver.com/ez_?Redirect=Log&logNo=140119374985

 

mysql,mysql원격접속,mysql gui,mysql외부접속,mysql3306,mysql telnet,window 환경에서 mysql,window2008,window2008 mysql,윈도우2008,윈도우2008 mysql

저작자 표시
신고
현재 4 개의 댓글이 있습니다.

2013.12.03 23:26

비밀댓글입니다


  • JKUN Dev. Jkun 2013.12.04 09:53 신고

    옙. 말씀해 주세요.^^;
    아는데까진 답변해 드리겠습니다.ㅎㅎ

ldw 2015.09.24 19:26 신고

아! 감사합니다. 2일동안 삽질하다가 겨우 해결했네요.


Comment

Blog

SQLyog 한글깨짐

2011.10.28 05:09 DataBase/MySQL


이거 뒤지게 짜증난다. 데이터를 불러오면 모두 아작.
캡쳐까지 뜰 필요는 없어서 간단하게 쓴다.

Set character_set_connection=euckr;
 

Set character_set_results=euckr;
 

Set character_set_client=euckr;


SQLyog 한글깨짐때문에 삽질한 생각하면 아 짜증나. ㅋㅋ
그냥 빨랑 검색엔진 뒤질걸. 괜한 아집으로 개고생;; 
저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

MySQL CREATE의 종류와 사용법

2011.09.21 01:59 DataBase/MySQL



1. CREATE DATABASE


 CREATE DATABASE는 주어진 이름으로 database를 만든다. database 생성 권한이 있어야 하며, 동일한 이름이 존재하고 IF NOT EXISTS 조건을 걸지 않으면 에러가 발생한다.

아래의 간단한 예를 보자!

먼저 현재 생성되어 있는 DATABASE들의 목록은 SHOW DATABASES 명령으로 확인 할 수 있다.

mysql> show databases;
+--------------------+
| Database                |
+--------------------+
| information_schema |
| mysql                     |
| nforge                     |
| test                         |
+--------------------+
4 rows in set (0.00 sec)
현재 4개의 database가 존재하고 있음을 알 수 있다.
이때 동일한 이름의 database를 생성하고자 한다면 아래와 같이 에러가 발생한다.

mysql> create database test;
ERROR 1007 (HY000): Can't create database 'test'; database exists
이럴경우 에러메시지를 발생시키지 않고자 한다면 IF NOT EXISTS를 사용하면 된다.

mysql> create database if not exists test;
Query OK, 1 row affected, 1 warning (0.00 sec)
에러가 발생하지는 않았지만, warning이 1개 있음을 알 수 있다.

정상적으로 생성하고 다시 show를 통해 생성된 database를 확인 해 보자!

mysql> create database if not exists test2;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database                |
+--------------------+
| information_schema |
| mysql                     |
| nforge                     |
| test                         |
| test2                       |
+--------------------+
5 rows in set (0.00 sec)
에러나 워닝없이 정상적으로 실행되었으며, database의 목록이 추가 된 것을 알 수 있다.


2. CREATE EVENT

 아래는 이벤트를 생성하고 스케쥴하는 문장이다. 이벤트는 이벤트 스케쥴이 enabled되기전까지 작동하지 않는다. 이벤트 스케쥴에 대한 정보는 다음의 링크를 참고하기 바란다.(Section 19.4.2, “Event Scheduler Configuration”)

CREATE
    [DEFINER = { user | CURRENT_USER }]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO event_body;

schedule:
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
이벤트를 생성하기 위해서는 EVENT 권한 이 있어야 한다. 

아래는 간단한 EVENT생성 예이다.
CREATE EVENT myevent 
 ON SCHEDULE 
    AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR 
 DO 
    UPDATE myschema.mytable SET mycol = mycol + 1;
CREATE EVENT 문장 다음에 유일한 이름의 event이름을 적어 주고,
ON SCHEDULE에는 언제, 얼마나 자주 이벤트가 실행될 것인지를 결정한다.
DO에는 실행될 SQL문장을 적으면 된다.
이것이 최소한의 CREATE EVENT문장이다.

위의 문장은 myevent라는 이벤트를 생성하고 생성된 1시간 후 한번 실행되며, 실행되는 내용은 myschema.mytable의 mycol 컬럼의 값을 1증가 시킨다.

이벤트 이름은 최대 64글자 이내 이어야 하고, 대소문자 구분을 하지 않으므로 myevent와 MyEvent같은 이름으로 이벤트가 함께 존재 할 수 없다.

AT대신 EVERY를 사용해 반복 설정이 가능하며, event_scheduler가 ON인 상태에서 작동한다.
이벤트에 대한 자세한 내용은 다른 글에서 소개 하고자 한다.


 CREATE INDEX는 이미 존재하는 Table에 index들을 생성하는데 사용되며, PRIMARY KEY를 생성하는데 사용될 수는 없다. 이때는 대신 ALTER TABLE을 사용한다.

형식은 아래와 같다.
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (index_col_name,...)
    [index_option] ...

index_col_name:
    col_name [(length)] [ASC | DESC]
index_type: USING {BTREE | HASH}

index_option: KEY_BLOCK_SIZE [=] value
    | index_type
    | WITH PARSER parser_name
    | COMMENT 'string'

인덱스에 대한 내용는 다른 글에서 상세히 다루도록 하겠다.


4. CREATE PROCEDURE and CREATE FUNCTION

 Procedure와 Function에 대한 내용도 다른 글에서 다룰 것이며, 여기에서는 생성에 대한 형식과 예를 통해 생성하는 방법만을 설명하고자 한다.

형식은 아래와 같다.
CREATE
    [DEFINER = { user | CURRENT_USER }]
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = { user | CURRENT_USER }]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
    Valid SQL routine statement
 위 형식에서 주의 할 것은 파라미터의 형식이 PROCEDURE에서는 IN, OUT, INOUT 모두 가능하지만, FUNCTION의 경우는 항상 IN으로만 간주된다는 것이다.

간단한 예를 보면서 생성법과 사용법을 보도록 하자.

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM t;
    -> END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;
+------+
| @a   |
+------+
| 3      |
+------+
1 row in set (0.00 sec)
간단한 PROCEDURE를 만드는 예제이다.
테이블 t의 레코드수를 param1이라는 OUT 파라미터로 넘기는 예제이다.
SELECT문에서 INTO를 사용해서 값을 넣는 것을 볼 수 있다.
그리고 호출시(CALL simpleproc(@a)) @a라는 변수로 전달하여 값을 출력 하고 있다.

만들어진 PROCEDURE는 SHOW CREATE PROCEDURE로 확인 할 수 있다.
mysql> SHOW CREATE PROCEDURE simpleproc\G
*************************** 1. row ***************************
           Procedure: simpleproc
            sql_mode: 
    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `simpleproc`(OUT param1 INT)
BEGIN
  SELECT COUNT(*) INTO param1 FROM t;
END
1 row in set (0.00 sec)

다음은 CREATE FUNCTION에 대한 예를 보자.
mysql> CREATE FUNCTION hello (s CHAR(20))
mysql> RETURNS CHAR(50) DETERMINISTIC
    -> RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT hello('world');
+----------------+
| hello('world')    |
+----------------+
| Hello, world!      |
+----------------+
1 row in set (0.00 sec)
간단히 설명하면 입력받은 문자 앞에 'Hello, '를 뒤쪽에 '!'를 붙여서 반환하는 함수 이다.
쉽게 이해가 될 것이다.

이 또한 SHOW CREATE FUNCTION를 이용해 생성된 것을 확인 할 수 있다.
mysql> SHOW CREATE FUNCTION hello\G
*************************** 1. row ***************************
            Function: hello
            sql_mode: 
     Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION `hello`(s CHAR(20)) RETURNS char(50) CHARSET latin1
    DETERMINISTIC
RETURN CONCAT('Hello, ',s,'!')
1 row in set (0.00 sec)


5. CREATE TABLE

 CREATE TABLE에 대한 가장 간단한 형식은 아래와 같다.
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]
OR
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_options]
    [partition_options]
    select_statement

두 형식의 차이는 아래의 마지막 부분이다. select_statement 즉, 다른 테이블의 필드와 값을 추가 할 수 있다는 것이다.

아래 예들을 보면 이해가 쉬울 것이다.
mysql> desc test;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| idx   | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> create table test2(idx int(11)) select idx from test;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show tables;
+-----------------+
| Tables_in_test2 |
+-----------------+
| test            |
| test2           |
+-----------------+
2 rows in set (0.00 sec)

mysql> desc test2;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| idx   | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> create table test3(t_idx int(11)) select idx from test;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test3;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| t_idx | int(11) | YES  |     | NULL    |       |
| idx   | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> create table test4(t_idx int(11)) select idx AS test_idx from test;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test4;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| t_idx    | int(11) | YES  |     | NULL    |       |
| test_idx | int(11) | YES  |     | NULL    |       |
+----------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
 Table의 생성은 Database의 가장 기본적이면서 가장 중요한 작업이라 할 수 있다. 그래서 굉장히 많은 옵션과 생성 방법이 존재 한다. 이 글에서 모두를 다 다루는 것은 어려울 것 같아 다른 글을 통해 소개 하고자 한다.


6. CREATE TRIGGER




7. CREATE VIEW

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

SQL Server 와 MySQL 문자열 함수 비교 10 가지

2011.09.21 01:52 DataBase/MS-SQL


출처 : http://www.sqler.com/bColumn/332980

안녕하세요
이호엽 입니다.

 

SQL Server TSQL 문법과 MySQL 문법은 유사한 점이 많습니다.

MySQL 사용자가 SQL Server 사용 혹은 반대로 SQL Server 사용자가 MySQL 사용 

  편하게 접근   있도록 도움이 될까 해서 비교 자료를 만들어 보았습니다.

테이블프로시저트리거, DB 운영에 관련된 스크립트 사용법에 대해서 비교하여 지속적으로

글을 적어볼까 합니다.

 

우선 이번에는 문자열 함수에 대해 10가지 정도 적어 보았습니다.

구분

SQL Server

MySQL

설명

가장 왼쪽 문자에 해당하는 ASCII 코드  출력

함수

ASCII

ASCII

예제

SELECT ASCII('A')

SELECT ASCII('A')

결과

65

65

 

구분

SQL Server

MySQL

설명

문자열에서 지정한 문자의 시작 위치 값을 반환 (왼쪽부터  문자씩 영어한글숫자기호상관없이  글자  1 차지 하며 위치값은 부터 시작)

함수

CHARINDEX

INSTR

예제

SELECT CHARINDEX('크리', '나홀로크리스마스')

SELECT INSTR('나홀로크리스마스', '크리')

결과

4

4

 

구분

SQL Server

MySQL

설명

공백 제거 – SQL Server  선행후행 공백을 제거해주는 LTRIM, RTRIM 혼용 사용해야 하며 MySQL  Trim 이란 함수가 후행 공백을 제거해 줍니다.

LTRIM(str), RTRIM(str) 함수도 따로 존재합니다.

함수

LTRIM() – 선행공백 제거

RTRIM() – 후행공백 제거

LTRIM() – 선행공백 제거

RTRIM() – 후행공백 제거

TRIM() – 양쪽공백 제거

예제

SELECT LTRIM( RTRIM( 이제 빠져버렸어 '))

SELECT TRIM( 이제 빠져 버렸어 ')

결과

 이제 빠져 버렸어

 이제 빠져 버렸어

 

구분

SQL Server

MySQL

설명

문자열의 왼쪽부터 지정된 수만큼 문자를 반환 (사용법 동일)

함수

LEFT

LEFT

예제

SELECT LEFT('메리크리스마스', 2)

SELECT LEFT('메리크리스마스', 2)

결과

메리

메리

 

구분

SQL Server

MySQL

설명

문자열의 오른쪽부터 지정된 수만큼 문자를 반환 (사용법 동일)

함수

RIGHT

RIGHT

예제

SELECT RIGHT('메리크리스마스', 2)

SELECT RIGHT('메리크리스마스', 2)

결과

마스

마스

 

구분

SQL Server

MySQL

설명

시작 위치에서 지정한 문자 길이를 삭제하고 다른 문자 집합을 삽입

함수명만 다르고 인자 순서사용법이 동일합니다.

함수

STUFF

INSERT

예제

SELECT STUFF('sad chritmas' , 1,3, 'happy')

SELECT INSERT('sad chritmas' , 1, 3,'happy')

결과

“happy chirtmas”

“happy chirtmas”

 

구분

SQL Server

MySQL

설명

지정한 사이즈가 문자열 길이 보다 적은 만큼 문자열 왼쪽부터 지정한 문자열을 채우는 처리를 합니다. MySQL 에서는 LPAD 기본함수가 제공 됩니다.

SQL Server 기본 함수가 제공되지 않으므로 필요에 따라 사용자 정의 함수를 만들어 사용해야 합니다.

함수

기본 제공 함수 없음

LPAD

예제

SELECT dbo.LPAD("ke some noise!!", 17, "!!")

SELECT LPAD("ke some noise!!", 17, "!!")

결과

make some noise!!

make some noise!!

 

-- LPAD 사용자 정의 함수 생성

-- WHILE 문을 이용 처리하는 방법도 있으나 len  Replicate 사용법 명시

CREATE FUNCTION dbo.LPAD( @str AS VARCHAR(100), @len AS INT, @padstr ASVARCHAR(100) = '')

 RETURNS VARCHAR(2000)

AS

BEGIN

 RETURN

  CASE WHEN LEN(@str) >= @len THEN SUBSTRING(@str, 1, @len)

   ELSE SUBSTRING(REPLICATE( @padstr, @len), 1, @len - LEN(@str)) + @str END

END

 

구분

SQL Server

MySQL

설명

위에 LPAD  반대로 지정한 문자열을 오른쪽부터 채워줍니다.

MySQL 에서는 RPAD 기본 함수가 제공됩니다.

마찬가지로 SQL Server 에서는 필요에 따라 사용자 정의 함수를 만들어 사용해야 합니다.

함수

기본 제공 함수 없음

RPAD

예제

SELECT dbo.RPAD("make some noise!!", 17, "!!")

SELECT RPAD("make some noise!!", 17, "!!")

결과

make some noise!!

make some noise!!

 

-- RPAD 사용자 정의 함수 생성

-- WHILE 문을 이용 처리하는 방법도 있으나 len  Replicate 사용법 명시

CREATE FUNCTION dbo.RPAD( @str AS VARCHAR(100), @len AS INT, @padstr ASVARCHAR(100) = '')

 RETURNS VARCHAR(2000)

AS

BEGIN

 RETURN

  CASE WHEN LEN(@str) >= @len THEN SUBSTRING(@str, 1, @len)

   ELSE @str + SUBSTRING(REPLICATE( @padstr, @len), 1, @len - LEN(@str)) END

END

 

구분

SQL Server

MySQL

설명

지정한 문자열의 길이를 반환 합니다.

SQL Server 후행 공백을 무시하지만 MySQL CHAR_LENGTH 함수는 공백도

포함하여 길이를 반환합니다.

함수

기본 제공 함수 없음

RPAD

예제

select LEN('abc  ')

SELECT CHAR_LENGTH('abc  ')

결과

3

5

 

구분

SQL Server

MySQL

설명

문자열을 합하여 결과를 출력

함수

연산자를 통해 처리

CONCAT

예제

SELECT 'SQLER Members' + ' Victory!!'

SELECT CONCAT('SQLER Members',' Victory!!')

결과

SQLER Members Victory!!

SQLER Members Victory!!


저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

PHP / MySQL fetch_array

2011.09.19 17:01 Development/PHP


출처 : http://sysyusung.blog.me/20052469830 

MySQL 테이블에 저장되어있는 값을 쿼리를 통해 선택 한 후에는, 그 값을 바로 사용할 수 없다.

그것을 PHP가 인식할 수 있는 형태로 변환해 주어야 하는데, 그것을 아래의 함수를 통해 할 수 있다.

 

 

테이블

필드명 name value
저장값 CUFFS アメサラサ

 

1. fetch_array

이 함수는 결과를 배열로 뽑아내는데, 번호로 된 배열과 필드 이름으로 된 배열 두가지가 동시에 생성된다.

위와 같은 테이블에서 데이터를 뽑아내면 fetch_array 를 통해 뽑아낸 배열의 구조는 다음과 같다.

Array (

    [0] => CUFFS

    [name] => CUFFS

    [1] => アメサラサ

    [value] => アメサラサ

)

사용법

$data = mysql_fetch_array($data_); or $data = mysqli_fetch_array($data_); or $data = $data_->fetch_array();

echo $data['name'].' => '.$data[1];

 

fetch_array의 경우 설정에 따라 번호로 된 배열로만 뽑아낼 수도 있고, 필드 이름으로만 된 배열을 뽑아낼 수도 있다.

다음과 같은 상수를 사용해서 처리할 수 있다.

MYSQL_BOTH - 기본값

        사용법 -> $data = mysql_fetch_array($data_, MYSQL_BOTH); or $data = mysqli_fetch_array($data_, MYSQL_BOTH); or $data = $data_->fetch_array(MYSQL_BOTH);

        결과 -> 위의 fetch_array 의 결과와 동일

MYSQL_ASSOC

        사용법 -> $data = mysql_fetch_array($data_, MYSQL_ASSOC); or $data = mysqli_fetch_array($data_, MYSQL_ASSOC); or $data = $data_->fetch_array(MYSQL_ASSOC);

        결과 -> 아래의 fetch_assoc 의 결과와 동일

MYSQL_NUM

        사용법 -> $data = mysql_fetch_array($data_, MYSQL_NUM); or $data = mysqli_fetch_array($data_, MYSQL_NUM); or $data = $data_->fetch_array(MYSQL_NUM);

        결과 -> 아래의 fetch_row 의 결과와 동일

 

 

 

2. fetch_assoc

이 함수는 필드 이름으로 된 배열로만 저장한다.

Array (

     [name] => CUFFS

     [value] => アメサラサ

)

사용법

$data = mysql_fetch_assoc($data_); or $data = mysqli_fetch_assoc($data_); or $data = $data_->fetch_assoc();

echo $data['name'].' => '.$data['value'];

 

 

3. fetch_row

이 함수는 숫자로 된 배열로 저장한다.

이 경우 필드의 순서를 바꾸거나 하면 전혀 다른 결과가 나올 수 있기 때문에 그것까지 고려를 해 프로그래밍 해야 한다.

Array (

    [0] => CUFFS

    [1] => アメサラサ

)

사용법

$data = mysql_fetch_row($data_); or $data = mysqli_fetch_row($data_); or $data = $data_->fetch_row();

echo $data[0].' => '.$data[1];

 

 

4. fetch_object

이 함수는 배열이 아닌 객체로 결과값을 받아온다.

stdClass Object (

    [name] => CUFFS

    [value] => アメサラサ

)

사용법

$data = mysql_fetch_object($data_); or $data = mysqli_fetch_object($data_); or $data = $data_->fetch_object();

echo $data->name.' => '.$data->value;

 

 

 

위의 4가지 함수에 대해 알아보았다.

그렇다면 위의 4가지 각각의 함수 속도는 어떻게 될 것인가?

그것에 대해 PHP 매뉴얼은 다음과 같은 답변을 내놓고 있다.

 

1. fetch_array

mysql_fetch_array()는 필드 이름으로 된 색인이 추가되지만, mysql_fetch_row() 보다 느려지지는 않는다.

2. fetch_assoc

mysql_fetch_assoc()는 필드이름으로 된 색인이 추가되지만, mysql_fetch_row() 보다 느려지지는 않는다.

3. fetch_row

언급 없음

4. fetch_object

속도면에서, 이 함수는 mysql_fetch_array()와 비슷하고, mysql_fetch_row()만큼이나 빠르다. 그러나 큰 차이는 없다.

 

그렇다면, 과연 진짜로 그런것일까.

테스트를 위해 다음과 같은 가상 환경을 제작하였다.

 

    1) 21 Fields

    2) 100,000 Records

 

$data_ = $mysqli->query("SELECT * FROM `test_table`");

while($data = $data_->fetch_array()) {}

 

다음과 같은 PHP 코드로 실행되는 함수들은, 각각 10만번의 동작을 거칠 것이다.

 

그리고 그에 대한 결과는 다음과 같이 나타났다.

 

환경: MyISAM & 21 Fields & 100,000 Records

단위: sec

fetch_array

fetch_assoc

fetch_object

fetch_row

1번째 시도

2.2280280590057

1.388512134552

3.3347442150116

1.2834389209747

2번째 시도

1.6447999477386

1.3500959873199

2.7877049446106

1.0823369026184

3번째 시도

1.7114689350128

1.303701877594

2.8545777797699

1.0900609493256

4번째 시도

1.8702390193939

1.5157608985901

3.1205198764801

1.1778881549835

5번째 시도

1.6467909812927

1.3309321403503

2.7673869132996

1.1073391437531

평균

1.82026538848874

1.37780060768126

2.97298674583436

1.14821281433106

 

fetch_object > fetch_array > fetch_assoc > fetch_row 의 순서를 보여주고 있다.

 

결과를 자세히 보면, 10만개의 데이터를 뽑는데 걸리는 시간은 길어봐야 3초 밖에 되지 않는다.

그러나 어느 특정한 경우를 제외하면 10만개의 데이터를 동시에 뽑아내는 사람은 없을 것이다.

그렇기에 PHP 매뉴얼의 말도 일리는 있지만, 차이는 존재한다.

 

기왕 시작한 김에, 위의 fetch_array 시 상수를 통해 컨트롤 할 수 있는 부분의 속도도 체크해보았다.

 

환경: MyISAM & 21 Fields & 100,000 Records fetch_array

단위: sec

MYSQL_BOTH

MYSQL_ASSOC

MYSQL_NUM

1번째 시도

2.0118298530579

1.3998398780823

1.1996338367462

2번째 시도

1.8045439720154

1.630038022995

1.3843371868134

3번째 시도

1.703469991684

1.3845191001892

1.2655489444733

4번째 시도

1.7362868785858

1.393550157547

1.1305871009827

5번째 시도

1.7584209442139

1.3735721111298

1.1451189517975

평균

1.8029103279114

1.43630385398866

1.22504520416262

 

MYSQL_BOTH = fetch_array

MYSQL_ASSOC = fetch_assoc

MYSQL_NUM = fetch_row

와 동일한 속도를 보여주고 있다(당연한 결과겠지만 말이다).

[출처] php/mysql fetch_array|작성자 나옹이

저작자 표시
신고

'Development > PHP' 카테고리의 다른 글

PHP 기본적인 페이징(Paging)  (0) 2011.09.22
PHP 날짜 함수  (0) 2011.09.22
PHP 문자열 함수  (0) 2011.09.22
PHP / MySQL fetch_array  (0) 2011.09.19
UTF-8 형식으로 저장할때 생기는 공백 문제  (0) 2011.09.15
이클립스에 PHP 환경 구현  (2) 2011.08.31
현재 0 개의 댓글이 있습니다.
Comment