카테고리 없음2015. 6. 30. 16:36

[작성일: 2013-01-18]


1. 동일한 계정( MySQL user ) 도 접속한 host 에 따라서 구분하여 권한이 관리됨.


설치 후, 전체 host 에 대한 계정 추가 ( 또는 기존 계정의 host 변경) 필요함.

** Host 필드를 ‘%’ 로 지정하면, localhost 를 제외한 모든 호스트 의미.

 

2. 주요 테이블 종류 구분

 

1) InnoDB 

MySQL 에서 유일하게 트랜잭션 지원

Foreign Key 지원

Primary Key 순서로 데이터가 쌓임 ( PK = Clustered Index )

Locking 레벨 : Row

MySQL 5.5 이후 기본 테이블 종류 (Engine)

MyISAM 비해서, 메모리와 저장공간을 1.5 ~ 2.5배 더 많이 사용함.


2) MyISAM 

트랜잭션 지원 안함

Foreign Key 지원 안함

Locking 레벨 : Table

쿼리 속도가 InnoDB 보다 빠름

단순 SELECT, INSERT 위주의, DML은 쿼리 속도가 InnoDB 보다 빠름

로그 성질의 테이블에 유리함.

 

3) 참조 :

** MySQL InnoDB Engine 사용 시 반드시 알아야 할 세 가지

http://dev.kthcorp.com/2011/06/10/mysql-innodb-engine-3-tips-you-must-know/

** 왜 MySQL 에서 InnoDB 를 써야하는가? InnoDB vs MyISAM 비교

http://dev.kthcorp.com/2011/06/17/why-we-need-to-use-innodb-on-mysql-vs-myisam-comparison/

 

3. Key 최대 크기 제한 ( InnoDB : 767 Bytes, MyISAM : 1000 Bytes )

 

** 에러 메세지 : Specified key was too long; max key length is 767 bytes

InnoDB, UTF-16 : 191 characters (MAX) // 한 문자당 최대 4 Bytes 사용 ( 4*191=764)

InnoDB, UTF-8 : 255 characters (MAX) // 한 문자당 최대 3 Bytes 사용 ( 3*255=765)

 

** 참조 : 

http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html

http://wildlyinaccurate.com/mysql-specified-key-was-too-long-max-key-length-is-767-bytes

 

4. database, table 이름의 대소문자를 구분함

 

1) 관련 옵션 : lower_case_table_names

0 : 데이터베이스와 테이블의 대소문자를 구분함 (unix, linux 버전 기본값)

1 : 데이터베이스와 테이블을 소문자로 변환하여 디스크에 저장함 (windows 버전 기본값)

2 : 데이터베이스와 테이블을 입력한대로 디스크에 저장하고, 쿼리시 대소문자   구안함. (단, Windows 시스템에서만 적용!!)

 

2) 설정 방법 ( Ubuntu 기준 )

:~$ sudo vi /etc/mysql/my.cnf

[mysqld] 항목의 아래에 다음 추가

lower_case_table_names=1

 

5. 최대 컬럼 개수 제한 : 1,000 개

 

6. WHERE 조건 없이 DELETE 못하는 옵션 있음.

 

** 옵션 조회하는 방법

mysql> show variables like 'sql_safe_updates';

 

** 쿼리에서 (임시로) 옵션 변경하는 방법

방법 1) MySQL 서버 실행옵션에서 disable 처리 한다 : sql_safe_updates

방법 2) 쿼리에서 잠시 disable 처리후, 다시 원복한다.

예)

mysql> SET sql_safe_updates=0;

mysql> DELETE FROM PI_Policy;

mysql> SET sql_safe_updates=1;

참조 : http://dev.mysql.com/doc/refman/5.0/en/mysql-tips.html  (4.5.1.6.2. Using the --safe-updates Option)

  

7. 동적 쿼리 실행시 사용하는 PREPARE 구문의 제약사항

 

1) USE database_name; 과 같이 database 선택하는 구문을 사용할 수 없음.

2) 복수의 쿼리 문장을 사용할 수 없음

 

8. 저장프로시져 내에서 커서 선언 위치

 

1) DECLARE 선언 아래

2) Handler 선언 위

그래서, Handler 선언 아래에서는, 별도의 BEGIN .. END; 블록 안에 선언해야 함.

 

9. Clustered Index 관련 특이사항

 

1) MyISAM : Clustered index 를 지원하지 않음

2) InnoDB : Primary Key 만 Clustered Index 가 됨. ( PK = Unique clustered index )

그래서, (InnoDB 에서도) Unique 한 컬럼이 아니라면, Clustered Index 로 지정할 수 없음.

 

10. MSSQL Server 와 MySQL 용어 비교

 

MSSQL Server ==> MySQL

Database ==> Database 또는 Schema

프로그래밍 기능 (Stored Procecure, Function) ==> Routines (Stored Procecure, Function)

Index, Key ==> Key 


Posted by 좋은나무