달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
반응형
http://dev.mysql.com/doc/refman/5.5/en/numeric-types.html
Type     Storage    Minimum Value        Maximum Value
         (Bytes)    (Signed/Unsigned)   (Signed/Unsigned)
TINYINT     1           -128                    127
                          0                     255
SMALLINT    2          -32768                   32767
                          0                     65535
MEDIUMINT   3          -8388608                8388607
                          0                   16777215
INT         4         -2147483648            2147483647
                          0                  4294967295
BIGINT      8      -9223372036854775808  9223372036854775807
                          0             18446744073709551615


반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

http://sqlmvp.kr/220365937569

MySQL/MariaDB Memory 관련 설정 변수


 


  • Version : Mariadb 5.5.4.2-WinX64


 


MySQL/MariaDB 서버에서는 메모리 관련된 설정이 중요하다. MySQL에서 스토리지 엔진별로 주요 메모리 공간이 공유되지 않기 때문에 사용하는 스토리지 엔진에 맞게 메모리 사용을 제한하는 것이 중요하다.


 


여기에서는 중요한 변수 몇 가지만 소개한다. 자세한 내용은 공식 매뉴얼을 참고한다.


 


설정 가능한 변수 목록은 show variables 명령을 사용하여 확인 할 수 있다.


show variables;


 



 


  • innodb_buffer_pool_size : 디스크에서 데이터를 메모리에 캐싱함과 동시에 데이터의 변경을 버퍼링하는 역할을 수행한다. 일반적으로 전체 메모리의 50% ~ 80%까지 설정하며 낮은 값부터 조금씩 크기를 올려가며 적절한 값을 찾는 것이 것이 좋다. 정적 변수이기 때문에 설정 적용을 위해서는 MySQL 재시작이 필요하다.

  • join_buffer_size : 조인이 발생할 때마다 사용되는 버퍼가 아니다. 적절한 조인 조건이 없어서 드리븐 테이블의 검색이 풀 테이블 스캔으로 유도되는 경우 사용 된다.  

  • key_buffer_size : MyISAM의 키 버퍼는 인덱스를 메모리에 저장하는 버퍼의 크기이다. 인덱스만 캐시하기 때문에 InnoDB의 버퍼 풀만큼 할당해서는 안된다. 일반 적으로 전체 메모리의 30~50% 할당하는 것이 좋다.

  • read_buffer_size : MySQL 매뉴얼에서는 풀 테이블 스캔이 발생하는 경우 사용하는 버퍼라고 설명하고 있지만 많은 스토리지 엔진에서 다른 용도로 사용하기도 하기 때문에 명확히 정의하기 어렵다.

  • read_rnd_buffer_size : 인덱스를 사용해 정렬할 수 없을 경우 정렬된 데이터를 메모리에 저장하여 디스크를 다시 한번 읽지 않도록 버퍼링한다. 이때 버퍼의 크기를 결정하는 역할을 한다.

  • sort_buffer_size : 인덱스를 사용할 수 없는 정렬에 메모리 공간을 얼마나 할당할지 결정하는 설정값이다. 이 크기가 너무 작으면 디스크 사용확률이 높아지고 높아지면 클라이언트 스레드가 사용하는 메모리의 양이 커져 메모리 낭비가 심해진다. 이 메모리 공간이 크다고 해서 무조건 정렬이 빨리 끝나는 것은 아니다.

  • tmp_table_size : 메모리에 생성되는 임시 테이블의 최대 크기를 설정한다.

  • Query_cache_size, query_cache_limit : 쿼리 캐시에 관련된 캐시의 크기를 설정한다. 쿼리 캐시는 무조건 크게 설정하는 것이 항상 좋은 것은 아니다.

  • key_cache_block_size – block 크기이며 기본값 1024(단위 byte) 이다.

  • myisam_sort_buffer_size : Repair table, Alter table, CREATE INDEX에 사용되는 버퍼 메모리 크기이다. 최대크기는 4GB이다.


 


[참고자료]


RealMySQL (위키북스)

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

MySQL/MariaDB 아키텍처 메모리 할당 및 사용 구조

 

  • Version : Mariadb 5.5.4.2-WinX64

 

MySQL/MariaDB 메모리 공간은 크게 글로벌 메모리 영역과 로컬 메모리 영역으로 구분할 수 있다. 글로벌 메모리 영역은 MySQL 서버가 시작되면서 무조건 운영체제로부터 할당된다. 글로벌 메모리 영역과 로컬 메모리 영역의 차이는 MySQL서버 내에 존재하는 스레드가 공유해서 사용하는 공간인지 아닌지에 따라 구분된다.

 


  • MySQL 서버의 메모리사용량 =  (글로벌 메모리) + (각 클라이언트 스레드 사용 메모리)

 

[글로벌 메모리 영역]

일반적으로 클라이언트 스레드의 수와 무관하게 하나의 메모리 공간이 할당된다. 필요에 따라서 2개 이상의 메모리 공간을 할당 받을 수도 있다. 생성된 글로벌 메모리 영역이 N개라도 모든 스레드에 의해 공유된다.

 

 

[로컬 메모리 영역]

세션 메모리 영역이라고 표현하며 MySQL 서버상에 존재하는 클라이언트 스레드가 쿼리를 처리하는데 사용하는 메모리 영역이다. 클라이언트 스레드가 사용하는 메모리 공간이라고 해서 클라이언트 메모리 영역 또는 세션 메모리 영역이라고도 한다.

로컬 메모리는 각 클라이언트 스레드별로 독립적으로 할당되며 절대 공유되어 사용되지 않는다. 각 쿼리의 용도별로 필요할 때만 공간이 할당되고 필요하지 않을때는 MySQL이 메모리 공간을 할당하지 않을 수도 있다(대표적으로 소트 버퍼, 조인 버퍼 등). 로컬 메모리 공간은 커넥션이 열려있는 동안 계속 할당된 상태로 남아 있는 공간도 있고(커넥션 버퍼, 결과 버퍼), 쿼리를 실행하는 순간에만 할당했다가 다시 해제하는 공간(소트 버퍼나 조인 버퍼)도 있다.

 

[참고자료]

RealMySQL (위키북스)

 

  • Version : Mariadb 5.5.4.2-WinX64

 

MySQL/MariaDB 메모리 공간은 크게 글로벌 메모리 영역과 로컬 메모리 영역으로 구분할 수 있다. 글로벌 메모리 영역은 MySQL 서버가 시작되면서 무조건 운영체제로부터 할당된다. 글로벌 메모리 영역과 로컬 메모리 영역의 차이는 MySQL서버 내에 존재하는 스레드가 공유해서 사용하는 공간인지 아닌지에 따라 구분된다.

 


  • MySQL 서버의 메모리사용량 =  (글로벌 메모리) + (각 클라이언트 스레드 사용 메모리)

 

[글로벌 메모리 영역]

일반적으로 클라이언트 스레드의 수와 무관하게 하나의 메모리 공간이 할당된다. 필요에 따라서 2개 이상의 메모리 공간을 할당 받을 수도 있다. 생성된 글로벌 메모리 영역이 N개라도 모든 스레드에 의해 공유된다.

 

 

[로컬 메모리 영역]

세션 메모리 영역이라고 표현하며 MySQL 서버상에 존재하는 클라이언트 스레드가 쿼리를 처리하는데 사용하는 메모리 영역이다. 클라이언트 스레드가 사용하는 메모리 공간이라고 해서 클라이언트 메모리 영역 또는 세션 메모리 영역이라고도 한다.

로컬 메모리는 각 클라이언트 스레드별로 독립적으로 할당되며 절대 공유되어 사용되지 않는다. 각 쿼리의 용도별로 필요할 때만 공간이 할당되고 필요하지 않을때는 MySQL이 메모리 공간을 할당하지 않을 수도 있다(대표적으로 소트 버퍼, 조인 버퍼 등). 로컬 메모리 공간은 커넥션이 열려있는 동안 계속 할당된 상태로 남아 있는 공간도 있고(커넥션 버퍼, 결과 버퍼), 쿼리를 실행하는 순간에만 할당했다가 다시 해제하는 공간(소트 버퍼나 조인 버퍼)도 있다.

 

[참고자료]

RealMySQL (위키북스)

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

참고 : http://stackoverflow.com/questions/3743136/how-to-disable-tomcat-caching

in Tomcat/conf/context.xml

<Context cachingAllowed="false" cacheMaxSize ="0" cacheTTL="1">

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

- ASCII(str) : 해당 인저의 아스키 값을 반환한다. 문자열이 한글자 이상일 경우는 첫번째 문자에 해당하는 아스키 값을 반환한다.빈 문자열에 대해서는 0, NULL 에 대해서는 NULL을 반환한다.

- : selectASCII('2');

 

- CONCAT(X,Y,...) : 해당 인자들을 연결한 문자열을반환한다. 인자중 하나가 NULL 일 경우는 NULL 을 반환한다.

- : selectCONCAT('My', 'S', 'QL');

 

- LENGTH(str) : 문자열의 길이를 반환한다.

- : selectLENGTH('text');

 

- OCTET_LENGTH(str) : LENGTH(str) 와 동일하다.

 

- CHARACTER_LENGTH(str) : LENGTH(str) 와동일하다.

 

- LOCATE(substr,str) : 첫번째 인자에서 두번째 인자가있는 위치를 반환한다. 없을경우 0 을 반환한다.

- : selectLOCATE('bar', 'foobarbar');

 

- POSITION(substr IN str) :LOCATE(substr,str) 와 동일하다.

 

- LOCATE(substr,str,pos) : 두번째 인자에서 세번째인자의 자리수부터 검색을 하여 첫번째 인자가 발견되는 위치를 반환한다.

- : selectLOCATE('bar', 'foobarbar',5);

 

- INSTR(str,substr) : LOCATE(substr,str) 와동일한 기능을 하며, 차이점은 첫번째 인자와 두번째 인자가 바뀐것 뿐이다.

- : selectINSTR('foobarbar', 'bar');

 

- LPAD(str,len,padstr) : 첫번째 인자를 두번째인자만큼의 길이로 변환한 문자열을 반환한다. 모자란 공간은 왼쪽에 세번째 인자로 채운다.

- : selectLPAD('hi',4,' ');

 

- RPAD(str,len,padstr) : LPAD 와 반대로 오른쪽에빈공간을 채운다.

- : selectRPAD('hi',5,'?');

 

- LEFT(str,len) : 첫번째 문자열에서 두번째 길이만큼만을반환한다.

- : selectLEFT('foobarbar', 5);

 

- RIGHT(str,len) : LEFT(str,len) 와 동일하다. 차이점은 해당 길이만큼 오른쪽에서부터 반환한다.

- : selectRIGHT('foobarbar', 4);

select SUBSTRING('foobarbar' FROM 4);

 

- SUBSTRING(str,pos,len) : 첫번째 인자의 문자열에서두번째 인자의 위치부터 세번째 인자의 길이만큼 반환한다.

- : selectSUBSTRING('Quadratically',5,6);

 

- SUBSTRING(str FROM pos FOR len) :SUBSTRING(str,pos,len) 과 동일하다.

 

- MID(str,pos,len) : SUBSTRING(str,pos,len)과 동일하다.

 

- SUBSTRING(str,pos) : 첫번째 인자의 문자열에서두번째 인자로부터의 모든 문자열을 반환한다.

- : selectSUBSTRING('Quadratically',5);

 

- SUBSTRING(str FROM pos) :SUBSTRING(str,pos) 와 동일하다.

 

- SUBSTRING_INDEX(str,delim,count) : 첫번째인자인 문자열을 두번째 문자로 구분하여 세번째 인자 수의 위치만큼 반환한다. 예를들어 select SUBSTRING_INDEX('www.mysql.com', '.', 2) 'www.mysql' 을 반환한다. 세번째 인자가 음수일경우는 반대로오른쪽에서부터 검색하여 결과를 반환한다.

- : selectSUBSTRING_INDEX('www.mysql.com', '.', -2);

 

- LTRIM(str) : 왼쪽에 있는 공백문자를 제거한 문자열을반환한다.

- : select LTRIM('barbar');

 

- RTRIM(str) : 오른쪽에 있는 공백문자를 제거한 문자열을반환한다.

- : selectRTRIM('barbar ');

 

- TRIM([[BOTH | LEADING | TRAILING][remstr] FROM] str)

- : select TRIM('bar ');

select TRIM(LEADING 'x' FROM 'xxxbarxxx');

select TRIM(BOTH 'x' FROM 'xxxbarxxx');

select TRIM(TRAILING 'xyz' FROM 'barxxyz');

 

- REPLACE(str,from_str,to_str) : 문자열은치환한다.

- : selectREPLACE('www.mysql.com', 'www', 'ftp');

 

- REVERSE(str) : 문자열을 뒤집는다. 예를들어, select REVERSE('abc') 'cba' 를 반환한다.

 

- LCASE(str) : 문자열을 소문자로 변환한다.

- : selectLCASE('QUADRATICALLY');

 

- LOWER(str) : LCASE(str) 와 동일하다.

 

- UCASE(str) : 문자열을 대문자로 변환한다.

- : selectUCASE('Hej');

 

- UPPER(str) : UCASE(str) 와 동일하다.

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

출처 http://cafe.naver.com/masterexcel/592

 

DROP FUNCTION IF EXISTS split_str;

DELIMITER $$

CREATE FUNCTION split_str(in_str text, d_char varchar(1), pos int)
RETURNS text
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(in_str, d_char, pos), d_char, -1);
$$

DELIMITER ;

 

 


select 'Shin-Osaka, Osaka, Japan',  split_str('Shin-Osaka, Osaka, Japan',',',1)

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|

mysql

Develope/DB...etc... 2016. 1. 6. 10:04
반응형

mysql 프로시저 수정하기

DB

등록된 프로시저 확인

show procedure status;

 

 Procedure 리스트 & 상태 보기

    mysql> SHOW PROCEDURE STATUS WHERE Db = '디비 명';

 

특정프로시저 내용보기

show create procedure [프로시저명]

 

 

등록된 이벤트 확인

show events;

 

 

특정 이벤트 내용보기

show create events [이벤트명]

 

 

프로시저 수정

프로시저 에트리뷰트를 변경하려면 alter procedure 문법을 사용하면 된다. 

본문을 수정하려면 같은 이름의 프로시저는 drop한 뒤 다시 만들면 된다. 기존 프로시저 내용은 show create procedure [프로시저명]을 통해 확인한다.

 

 

프로시저 삭제

drop procedure [프로시저명]

 

 

 

프로시저 만들기

delimiter //

CREATE PROCEDURE [프로시저명 및 속성]

CREATE DEFINER=`raptor`@`localhost` PROCEDURE `front_search`()

BEGIN

동작내용

END //

delimiter ;

 

 

delimiter는 문법 종료 구분자를 변경해주는 것임. 임시로 //로 바꿔주어 프로시저 문법 내에 세미콜론(;)이 나올때 프로시저 문법 작성이 끝나지 않도록 한다.

[출처] mysql 프로시저|작성자 삽질맨

 

 

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

 


SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW';
SHOW CREATE  [ VIEW | function | procedure | table ] name_of_object;

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

출처 : http://lab4109.blogspot.com/2013/10/mariadb-database-user.html

MySQL과 똑같다. 설명이 필요 없음...
일단 DB 생성

1
2
MariaDB [(none)]> create database dottegidb;
Query OK, 1 row affected (0.00 sec)

그리고 사용자 생성
1
2
MariaDB [dottegidb]> create user 'xxxxxx'@'localhost' identified by 'yyyyyy';
Query OK, 0 rows affected (0.00 sec)
혹시라도 외부에서 접속을 할 수 있게 하려면 localhost가 아닌 '%'로 하나 더 생성해 줘야 함.

마지막으로 권한 부여
1
2
3
4
5
MariaDB [dottegidb]> grant all privileges on dottegidb.* to yangsae@localhost;
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [dottegidb]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

잘 됐는지 테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
~> mysql -uxxxxxx -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.32-MariaDB Source distribution
 
Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| dottegidb          |
| test               |
+--------------------+
3 rows in set (0.00 sec)

나는 db client로 sequel pro를 사용하는데 connector는 그냥 mysql에서 제공하는 것으로 사용한다. 그리고 기존에 mysqldb에 만들어 뒀던 db와 같은 이름의 db를 여기에 생성했더니 지난 설정 그대로 접속이 바로 됨.

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

출처:http://neomi2428.blogspot.com/2010/08/mysql-index-%EC%B6%94%EA%B0%80-%EC%82%AD%EC%A0%9C-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0.html

[MySQL] index 추가, 삭제, 확인하기

1. 테이블의 인덱스 확인하기

SHOW INDEX FROM tablename;

2-1. 테이블의 인덱스 추가하기 : 컬럼은 1개도 가능, 2개 이상도 가능
ALTER TABLE tablename ADD INDEX indexname (column1, column2);

2-2. 테이블의 유니크 인덱스 추가하기 : 컬럼은 1개도 가능, 2개 이상도 가능
ALTER TABLE tablename ADD UNIQUE INDEX indexname (column1, column2);

3. 테이블의 인덱스 삭제하기

ALTER TABLE tablename DROP INDEX indexname;


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


출처 : https://medium.com/@pasioner/mysql-primary-key-%EC%82%AD%EC%A0%9C-%EB%B3%80%EA%B2%BD-38a7b6db9128#.gmeyijdum


테이블을 만들었으나 primary key를 2개로 세팅하고 싶었어요.

일단 1개로 설정된 primary key를 삭제합니다.

ALTER TABLE content_keyword_map
DROP PRIMARY KEY

column이 auto increment이라면 삭제가 안될 수 있어요. primary key속성을 삭제하기 전에 auto increment속성은 제거하면 됩니다.

다음, 두개의 컬럼을 primary key로 추가합니다.

ALTER TABLE content_keyword_map
ADD CONSTRAINT PRIMARY KEY (content_id, keyword)



반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

출처 : http://www.mysqlkorea.com/sub.html?mcode=manual&scode=01&m_no=21700&cat1=12&cat2=351&cat3=363&lang=k



12.1.3. 비교 함수와 연산자

 

비교 연산의 결과는 1 (TRUE), 0 (FALSE), 또는 NULL가 된다이러한 연산은 
숫자 및 스트링에서 실행된다스트링은 자동으로 숫자로 변환되며 필요할 경우
에는 숫자를 스트링으로 변환 시킬 수도 있다.
 
이 섹션에 있는 몇몇 함수들 (LEAST() 및 GREATEST()와 같은 함수들)은 1 
(
TRUE), 0 (FALSE), 또는 NULL이 아닌 값 자체를 리턴 한다하지만이러한 
함수들은 Section 12.1.2, “ 계산에서의 타입 변환에서 설명한 규칙에 따
라서 실행된 비교 연산에 근거하여 값을 리턴한다.
 
비교 연산의 목적에 맞게 어떤 값을 특정 타입으로 변환하기 위해서는CAST() 
함수를 사용하면 된다스트링 값은 CONVERT()을 사용하면 서로 다른 문자 셋
으로 변환 시킬 수가 있다. Section 12.8, “캐스트(Cast) 함수  연산자를 참조.
 
디폴트로는스트링 비교 연산은 문자 크기를 구분하지 않으며 현재(current)의 
문자 셋을 사용한다디폴트는 
latin1 (cp1252 West European)이며이것은 영어
에서도 잘 동작을 한다.
  • =

같음(equal):

mysql> SELECT 1 = 0;
        -> 0
mysql> SELECT '0' = 0;
        -> 1
mysql> SELECT '0.0' = 0;
        -> 1
mysql> SELECT '0.01' = 0;
        -> 0
mysql> SELECT '.01' = 0.01;

        -> 1   

  • <=>

NULL-세이프(safe) 등호이 연산자는 = 연산자와 같은 등식 비교 연산
을 실행하지만양쪽의 연산자가 모두 
NULL이면NULL 대신에 1그리고 
하나의 연산자만 
NULL이면NULL 대신에 0 을 리턴한다.

mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
        -> 1, 1, 0
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;
        -> 1, NULL, NULL        
  • <>!=

같지 않음(Not equal):

mysql> SELECT '.01' <> '0.01';
        -> 1
mysql> SELECT .01 <> '0.01';
        -> 0
mysql> SELECT 'zapp' <> 'zappp';
        -> 1 
  • <=

작거나 같음:

mysql> SELECT 0.1 <= 2;
        -> 1
  • <

보다 작음:

mysql> SELECT 2 < 2;
        -> 0
  • >=

크거나 같음:

mysql> SELECT 2 >= 2;
        -> 1
  • >

보다 큼:

mysql> SELECT 2 > 2;
        -> 0
  • IS boolean_valueIS NOT boolean_value

불리안 값에 대응해서 값을 테스트 하는데여기에서 boolean_value 은 
TRUEFALSE, or UNKNOWN이 될 수 있다.

mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;
        -> 1, 1, 1
mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;
        -> 1, 1, 0

IS [NOT] boolean_value 신텍스는 MySQL 5.0.2에서 추가 되었다.

  • IS NULLIS NOT NULL

값이 NULL인지 아닌지를 테스트

mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
        -> 0, 0, 1
mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
        -> 1, 1, 0 
ODBC 프로그램과 잘 동작을 하도록 하기 위해서, MySQLIS NULL
사용할 때 아래와 같은 추가적인 기능들을 지원한다:
    • 값을 생성한 다음에 곧바로 아래와 같은 명령문을 입력하면 가장 
      최근의 
      AUTO_INCREMENT 값을 가지고 있는 열을 찾을 수가 있다:
o         SELECT * FROM tbl_name WHERE auto_col IS NULLNULL

이러한 동작은 SQL_AUTO_IS_NULL=0로 설정을 하면 비 활성화 
시킬 수가 있다. Section 13.5.3, “SET 신텍스를 참조.

    • NOT NULL로 선언된 DATE 및 DATETIME 컬럼에 대해서는아래와 
      같은 명령문을 사용하면 특수 날짜인 
      '0000-00-00'을 찾을 수가 있다:
o       SELECT * FROM tbl_name WHERE date_column IS NULL

이것은 ODBC가 '0000-00-00' 와 같은 날짜 값을 지원하지 않기 
때문에 어떤 경우의 어플리케이션을 실행하기 위해서 필요할 때가 있다.

  • expr BETWEEN min AND max

만일 expr 가 min 보다 크거나 같고 expr 가 max 보다 작거나 같으면BETWEEN
은 1을 리턴하고그렇지 않으면 0 을 리턴 한다이것은 모든 인수가 동일한 타입일 
경우의 수식 
(min <= expr AND expr <= max)과 같다그렇지 않을 경우타입 변환이
Section 12.1.2, “수식 계산에서의 타입 변환에서 설명한 방식에 따라서 실행되지만,
세 가지 인수 모두에 적용된다.

mysql> SELECT 1 BETWEEN 2 AND 3;
        -> 0
mysql> SELECT 'b' BETWEEN 'a' AND 'c';
        -> 1
mysql> SELECT 2 BETWEEN 2 AND '3';
        -> 1
mysql> SELECT 2 BETWEEN 2 AND 'x-3';
        -> 0
  • expr NOT BETWEEN min AND max

이것은 NOT (expr BETWEEN min AND max)과 동일하다.

  • COALESCE(value,...)

리스트에 있는 첫 번째 논(non)-NULL 을 리턴하거나또는 논(non)-NULL 값이 
없을 경우에는 
NULL을 리턴한다.

mysql> SELECT COALESCE(NULL,1);
        -> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
        -> NULL
  • GREATEST(value1,value2,...)

두 개 이상의 인수를 사용하면그 중에 가장 큰 인수 값을 리턴 한다인수들은 
LEAST()에서 적용하는 규칙과 같은 것을 사용해서 비교가 된다.

mysql> SELECT GREATEST(2,0);
        -> 2
mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);
        -> 767.0
mysql> SELECT GREATEST('B','A','C');
        -> 'C'

MySQL 5.0.13 이전 버전에서는GREATEST()은 모든 인수가 NULL 일 경우에만 
NULL을 리턴한다. 5.0.13 이후에는인수 중의 하나가 NULL 이면 NULL을 리턴한다.

  • expr IN (value,...)

만일 expr 이 IN 리스트에 있는 값들 중의 하나와 같게 되면 1그렇지 않으면 0 을 
리턴한다만일 모든 값이 상수라면그 값들은 
expr 의 타입에 따라서 값이 계산된 
후에 정렬이 된다그런 다음에아이템에 대한 검색은 바이너리 검색을 통해서 
실행된다이것은만일 This means 
IN 의 값 리스트가 전체적으로 상수로 구성되어 
있다면 
IN이 매우 빠르다는 것을 의미하는 것이다그렇지 않을 경우에는
Section 12.1.2, “수식 계산에서의 타입 변환
에서 설명한 규칙에 따라서 타입 변환이
일어나지만모든 인수에 적용이 된다.

mysql> SELECT 2 IN (0,3,5,'wefwf');
        -> 0
mysql> SELECT 'wefwf' IN (0,3,5,'wefwf');
        -> 1

IN 리스트에 있는 값의 번호는 max_allowed_packet 값에 의해서만 한정이 된다.

표준 SQL을 따르기 위해서IN 은 왼쪽 부분의 수식이 NULL 일 경우 뿐만 아니라
리스트에서 매치되는 것을 발견하지 못하고 리스트에 있는 수식 중의 하나가 
NULL일 
경우에도 
NULL을 리턴한다IN() 신텍스는 특정 타입의 서브 쿼리를 작성할 때에도 
사용할 수가 있다
Section 13.2.8.3, “ANYIN그리고 SOME  사용하는 서브 쿼리
를 참조.

  • expr NOT IN (value,...)

NOT (expr IN (value,...))과 동일한 것임.

  • ISNULL(expr)

만일 expr 이 NULL 이라면ISNULL() 은 1 그렇지 않을 경우라면 0 을 리턴한다.

mysql> SELECT ISNULL(1+1);
        -> 0
mysql> SELECT ISNULL(1/0);
        -> 1

can be used instead of = to test whether 어떤 값이 NULL인지 아닌지를 테스트 
하기 위해서 = 대신에
 ISNULL() 을 사용할 수도 있다. (= 를 사용해서 어떤 값을 
NULL 과 비교하면 항상 거짓(false)이 나온다.) 
ISNULL() 함수는 IS NULL 비교 연산자와 함께 특정 동작을 공유한다
IS NULL에 대한 설명을 참조할 것.

  • INTERVAL(N,N1,N2,N3,...)

N < N1 일 경우에는 0 N < N2 과 같은 순서일 경우에는 1 또는 N 이 
NULL이면 -1을 리턴한다모든 인수는 정수로 다루어진다이 함수에 대해서는 
N1 < N2 < N3 < ... < Nn 이 제대로 동작 되어야 한다그 이유는 여기에서는 
바이너리 검색이 사용되기 때문이다.

mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
        -> 3
mysql> SELECT INTERVAL(10, 1, 10, 100, 1000);
        -> 2
mysql> SELECT INTERVAL(22, 23, 30, 44, 200);
        -> 0
  • LEAST(value1,value2,...)

두 개 이상의 인수를 사용하면가장 작은 인수 값을 리턴한다
인수들은 아래의 규칙에 따라서 비교가 된다:

    • 만일 리턴 값이 INTEGER 문맥에서 사용되거나 또는 모든 인수가 정수 
      값이라면그 인수들은 정수로 비교가 된다.
    • 만일 리턴 값이 REAL 문맥에서 사용되거나 또는 모든 인수가 실수 값
      (real value)이라면인수들은 실수(real)로 비교된다.
    • 만일 어떤 인수가 문자 크기에 민감한 스트링이라면그 인수는 문자 
      크기를 구분하는 스트링으로 비교가 된다.
    • 이외의 모든 경우에는인수들은 문자 크기와는 상관없는 스트링으로 
      비교가 된다.

MySQL 5.0.13 이전의 경우LEAST() 은 모든 인수가 NULL 일 경우에만 
NULL을 리턴한다. 5.0.13 이후에는어떤 인수가 NULL 이면 NULL을 리턴한다.

mysql> SELECT LEAST(2,0);
        -> 0
mysql> SELECT LEAST(34.0,3.0,5.0,767.0);
        -> 3.0
mysql> SELECT LEAST('B','A','C');
        -> 'A'

위의 변환 규칙은 어떤 경계 라인(borderline)의 경우에는 예상하지 못한 
결과를 만들 수도 있다는 점을 알아 두기 바란다:

mysql> SELECT CAST(LEAST(3600, 9223372036854775808.0) as SIGNED);

        -> -9223372036854775808

 

위의 결과가 나오는 이유는, MySQL이 9223372036854775808.0을 정수 문맥에서 
읽기 때문이다위의 값을 가지기 위해서는 정수 표현식이 좋지 않기 때문에
이것을 부호화된 정수 타입으로 만들었다.

반응형
Posted by 친절한 웬디양~ㅎㅎ
|