[작성일: 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