본문 바로가기

SQL/Mysql

MYSQL 내장함수 / 문자열처리/타입변환/처리대기/벤치마크/암호화/aggregation function/주석 (REAL MY SQL 정리)

728x90
반응형

 

◈ mysql 내장함수 


1. null값 비교 및 대체 (ifnull, isnull)

2. 현재시각 조회(now, sysdate), sleep(2) <- 2초간 대기하는 함수 

now는 sysdate와달리 호출될때마다 같은값을 항당받아서 사용되기때문에 실행 위치나 시점에 관계없이 항상 같은값 보장.

- date_format(날짜 문자형으로 변환 (%y -%m-%d), str_to_date(%y -%m-%d %h:%i:%s)

   - 날짜와 시간의 연산(date_add, date_sub)

    ex) date_add(now(), interval -1 day) (year, month, day, hour, minute, second, quarter, week)

   - 타임스탬프연산(unix_timestamp, from_unixtime)

   - unix_timestamp : '1970-01-01 00:00:00'으로부터 경과된 초의수 반환 함수

   - from_unixtime :  인자로 전달한 타임스탬프값을 datetime타입으로 변환하는 함수 



◈ 문자열처리(rpad, lpad / rtrim, ltrim, trim)

1. 문자열결합(concat)

   - concat (문자 , cast(숫자 등)) --타입전환해서 붙이는편이 안전하다.

   - concat_ws() :  첫번째 인자를 구분자로 사용할 문자로 인식하고 두번째 인자부턴는 연결할 문자로 인식한다.

     ex) concat_ws(',', 'goergi','christian') as name; -- goergi,christian

2. group by 문자열결합(group_concat)

   - 값들을 먼저 정렬한 후 연결하거나 각 값의 구분자 설정도가능하며 여러값 중 중복을 제거하고 연결하는것도 가능하다.

   - group by concat의 결과가 지정 버퍼크기를 초과하지않도록 주의해야함 

3. case when (case (when then) end)

 

 타입의변환(cast, convert) 


   - cast('text' as 전환할인자명)

   - convert('abc' using 'utf-8') -- 타입을 변환하는 용도와 문자열의 문자집할을 변환하는 두가지용도로 사용

 

이진값과 16진수(hex string) 문자열변환(hex, unhex)


   - hex: 2진 -> 16진수 

   - unhex: 16진수 -> 2진 

   - 암호화 및 해시함수(md5, sha) 


 처리대기(sleep)

   - ex> sleep(2) -- 처리대기 2초의 간격을 준다 

 

 벤치마크(bench mark) 


   - benchmark(반복해서 수행할 횟수, 반복해서 실행할 표현식= 반드시 스칼라값 반환하는 표현식이어야한다.) 

   - select expr  X 10번 vs select benchmark(10,expr)

   : 후자는 한번의 요청으로 expr이 실행되는것이므로 이미 할당받은 메모리 자원까지 공유되므로 전자에 비해 1/10밖에 자워소모가 되지 않는다. 사실 큰의미있는 함수는 아니며 기능비교분석용도고 사용할것을 권장한다.

   - ip주소변환(inet_aton --문자열로 구성된 ip주소를 정수형으로 변환, inet_ntoa -- ip 주소를 사람이 읽을수있는 형태의 '.'으로 변환하는 함수)


mysql 전용 암호화

   (password --맨앞에 '*'가 붙음, old_password-- 맨앞에 '*'가 붙지않음)


values()

  -- insert 문장에서 저장하려고했던 컬럼의 이름으 입력


 count(*)

    = count(primary_key_column) = count(1) 모두 같은 성능

   - left join, order by 와같이 count와 무관한 작업을 하는경우 제거하는것이 성능상 좋다. 

   - myisam이외의 스토리지 엔진을 사용하는 테이블(inno db 등) 직접 데이터나 인덱스를 읽어야만 레코드 건수를 가져올 수 있기 때문에 큰테이블의  count(1) 은 가급적 주의해야한다. 

   - count(column1) 이라고 사용하면 null 이 아닌 레코드 건수만 반환하므로 쿼리작동을 확인하는것이 좋다.

 

 주석

-- 이것은 단일행 주석 

/* 이것은 블록 주석 */

 = 기타 프로그래밍 언어와 유사

728x90