programming/MySQL
MySQL 5.0 Standards Compliance
happy4u
2006. 1. 16. 10:09
MySQL 5.0 Manual 중에
- What's New in MySQL 5.0
- MySQL 5.0 Standards Compliance
이 두 부분을 정리한 내용이다.
MySQL을 한 번도 접해보지 않아서 공부하는 샘치고 보면서 정리한 내용
>더보기
>접기
= MySQL 정리 =
- mysql을 실행할 때 mode를 다양하게 설정할 수 있다.
== 5.0의 새로운 기능들 ==
* BIT 데이터 타입
* server-side cursor지원
* Information Schema : metadata같은거
* Instance Manager : remote host에서 서비스 start, stop이 가능
* Precision Math : new library for fixed-point arithmetic
* Storage Engines : ARCHIVE and FEDERATED 추가
* Stored Routines : 저장 프로시져와 function 지원
* Strict Mode and Standard Error Handling
* Triggers : 트리거의 지원 (after trigger만 지원하는 듯...: 확실하지 않음)
* varchar 데이터 타입 추가
* views : view의 지원
* XA Transactions : 분산 트랜잭션 지원으로 아마도 다른 DB와 묶여서 트랜잭션 처리도 가능할 듯
* Performance enhancements : 성능이 나아 졌다는 군..
* "greedy"라는 새로운 optimizer가 execution plan만드는 시간이 많이 줄었다
* Index Merge의 사용으로 다른 컬럼의 AND나 OR 연산이 빨라졌다
* 'NOT IN'이나 'NOT BETWEEN'의 연산시 table scan을 줄이거나 없앨 수 있다.
* varchar data type 추가로 공간을 많이 절약할 수 있다.
* InnoDB Storage Engine의 성능 향상
* 이전 버젼에 비해 약 20%의 공간을 절약할 수 있다.
* 'ALTER TABLE'의 실패 시 복구 시간이 빨라졌다.
* - 'TRUNCATE'이 빨라졌다.
* NDBCluster Storage Engine의 성능 향상
* IN and BETWEEN 연산이 빨라졌다.
== MySQL Extensions to Standard SQL ==
* /*! comment */ : 이와 같이 쿼리 중간에 주석처리가 가능
* CREATE /*!32302 TEMPORARY */ TABLE t (a INT); -> 버젼 3.23.02 혹은 이상인 경우에만 실행하라는 의미
* 다른 DB 접근 시 : 'db_name.tbl_name' 이와 같이 사용
* SQL Sever의 IDENTITY()와 같은 함수 'LAST_INSERT_ID()'
* numeric column에도 like문을 사용할 수 있다.
* 정규식을 지원한다. REGEXP
== MySQL Differences from Standard SQL ==
* 'SELECT ... INTO TABLE'는 지원하지 않고 'INSERT INTO ... SELECT'를 지원한다.
* storage engine 'InnoDB', 'BDB'에서 transaction을 지원한다.
* 'MyISAM'에서는 모든 operation은 'AUTOCOMMIT=1 mode'로 처리된다.
* storage engine은 테이블 별로 설정 가능하다.
* 불의의 사고를 대비해서 DB를 백업하고 binary logging turned on 해서 사용하라.
* non-transactional tables 이 transactional tables에 비해 3~5배가 빠르다.
* InnoDB 테이블은 row-level locking을 지원한다.
* In MySQL Server 3.23.44 and up, InnoDB storage engine은 foreign key 제약조건을 체크한다.
* 5.1에는 MyISAM storage engine에서도 foreign key 제약조건 지원 예정
* foreign key 제약조건 사용 시 주의사항
* 제약조건이 circular 하게 걸리지 않게 유의할 것 cascading delete 시 문제 발생 소지가 있다.
* table단위 restore 시 문제가 될 수 있으니 유의할 것
== How MySQL Deals with Constraints ==
* primary key and unique 제약 조건 위반 에러 발생 시
* transaction mode : rollback된다.
* non-transaction mode : 에러가 나면 남은 데이터는 남겨둔 채 stop된다.
* 만약 key violations 무시하고 insert 혹은 update 하고 싶은 경우 : insert나 update 구문에 ignore 키워드를 이용
* Constraints on Invalid Data
* MySQL 5.0.2 이전버젼에서는 설령 잘못된 데이터를 넣는 경우에 시스템이 자동으로 적절한 적합한 값으로 바꿔 넣어줬었다.
* MySQL 5.0.2 에서도 그렇게 사용할 수 있지만, 사용자가 원하면 잘못된 데이터를 넣는 경우 오류를 발생시키게 할 수 있다.
* numeric column에 범위 밖의 값을 넣을 경우 입력가능한 최소 혹은 최대값이 자동 입력된다.
* string의 경우 빈값이나 최대저장할 수 있는 만큼 저장된다.
* 숫자로 시작하지 않는 string값을 numeric에 넣을 경우 0이 저장된다.
* DATE and DATETIME의 경우 '2000-02-31' 과 같은 데이터를 저장하는 경우 저장되며, select 할 경우 저장된 값을 그대로 준다.
* MySQL 만든 사람 생각엔 이런 날짜값 check하는 것은 DB의 role이 아니라고 생각한다는군.. --;;
* 이상한 값이 들어올 경우 '0000-00-00' 값으로 들어감
* null 값을 허용하지 않는 컬럼에 null을 넣을 경우
* single row insert : 에러나고 취소된다.
* multi row insert : default값이나 숫자의 경우 0, 문자의 경우 빈 스트링 등이 들어간다.
* INSERT 구문에서 해당하는 컬럼의 값을 아예 기술하지 않은 경우 위와 같이 동작한다.
* STRICT_TRANS_TABLES 모드
* For transactional storage engines : 적합하지 않은 데이터가 들어올 경우 바로 취소되며 rollback된다.
* For non-transactional storage engines : 첫 row에서 문제가 발생하면 실행이 취소되지만 첫 row 이후에 발생하면 이전과 같이 동작하고 다 끝나면 warning이 발생한다.
* STRICT_ALL_TABLES 모드
* For transactional storage engines : STRICT_TRANS_TABLES 모드와 동일
* For non-transactional storage engines : 문제가 나기 전까지는 실행되고 문제가 발생하면 그 순간 처리가 멈춘다.
* Enum과 set 컬럼
* 특정 값들 중 하나만을 가질 수 있게 하기 위한 것