본문 바로가기

SQL

[mysql_mariadb] 내장함수_foreignkey수정

* 함수의 종류

1. 제어 흐름 함수

2. 문자열 함수

3. 수학함수

4. 날짜/시간 함수

5. 전체 텍스트 검색함수

6. 형 변환 함수

7. XML함수

8. 비트함수

9. 보안/압축함수

10. 정보함수

11. 공간 분석 함수

12. 기타함수

 

1. 제어 흐름 함수 : 프로그램의 흐름을 제어한다.

3. if(수식, , 거짓)

> 수식이 참 또는 거짓인지 결과에 따라 2중 분기한다.

 

3. ifnull(수식1, 수식2)

> 수식1null이 아니면 수식1이 반환, 수식1null이면 수식2가 반환된다.

 

3. nullif(수식1, 수식2)

> 수식1이 수식2와 같으면 null을 반환, 다르면 수식1을 반환

 

3~8. Case ~ when ~ else ~ end

> case는 내장함수는 아니며 연산자로 분류된다. 다중 분기에 활용될 수 있으므로 내장함수와 함께 알아두자.

 

 

2. 문자열 함수 : 문자열을 조작한다

 

* ASCII(아스키코드),CHAR(숫자)

> 문자의 아스키 코드값을 돌려주거나 숫자의 아스키 코드값에 해당하는 문자를 돌려준다.

> BLOB은 워크벤치 버그임. 우클릭 Open Value in Viewer 클릭하면 정상적으로 보임.(A)

 

* bit_length(문자열), char_length(문자열), length(문자열)

> 할당된 Bit 크기 또는 문자 크기를 반환한다.

> bit_length

- 영문 = 할당된 비트크기 3글자 * 8비트(1바이트)

- 한글 = 할당된 비트크기 3글자 * 8비트(1바이트) * 3바이트(한글은 1글자당 3바이트)

> char_length : 문자의 개수 반환

> length : 할당된 바이트수 반환

- UTF8은 영문은 한글자당 1Byte, 한글은 한글자당 3Byte

 

* concat(문자열1,문자열2,…), concat_ws(문자열1,문자열2,…)

> concat012번 문서에서 여러 번해봤다. 걍 문자열을 연결시킴.

> concat_ws : 구분자와 함께 문자열을 이어준다.

 

1. elt(위치, 문자열1, 문자열2, …) : 위치번째에 해당하는 문자열을 반환.

2. field(찾을 문자열, 문자열1, 문자열2, …) : 찾을 문자열의 위치를 찾아서 반환.

3. find_in_set(찾을 문자열, 문자열 리스트) : 찾을 문자열을 리스트에서 찾아 반환. 리스트는 ,로 구분되어 있어야함.

4. instr(기준 문자열, 부분 문자열) : 기준문자열에서 부분문자열을 찾아서 그 시작 위치를 반환.

5. locate(부분 문자열, 기준 문자열) : instr과 동일하지만 파라미터의 순서 반대(position()과 동일함)

 

* format(숫자, 소수점 자릿수) : 숫자를 소수점 아래 자릿수까지 표현하며, 1000단위 콤마

 

* bin(숫자), hex(숫자), oct(숫자) : 2진수, 16진수, 8진수의 값을 반환한다.

 

* insert(기준 문자열, 위치, 길이, 삽입할 문자열) : 문자열의 위치부터 길이만큼을 지우고 삽입할 문자열을 끼워 넣는다.

 

* left(문자열, 길이), right(문자열, 길이) : 왼쪽 또는 오른쪽에서 문자열의 길이만큼 반환한다.

 

* ucase(문자열), lcase(문자열) : 소문자를 대문자로, 대문자를 소문자로 변경한다.

 

* upper(문자열), lower(문자열) : 소문자를 대문자로, 대문자를 소문자로 변경한다. 위와 동일

 

* lpad(문자열, 길이, 채울문자열), rpad(문자열, 길이, 채울문자열) : 문자열의 길이만큼 늘린 후에 빈 곳을 채울 문자열로 채운.

 

* Ltrim(문자열), rtrim(문자열) : 문자열의 왼쪽/오른쪽 공백을 제거. 중간의 공백은 제거되지 않음

 

* trim(문자열) : 문자열의 앞뒤 공백을 모두 없앤다.

* trim(방향 자를_문자열 from 문자열)

> 방향 : LEADING(), BOTH(양쪽), TRAILING()

 

* repeat(문자열, 횟수) : 문자열을 횟수만큼 반복한다.

 

* replace(문자열, 원래 문자열, 바꿀 문자열) : 문자열에서 원래 문자열을 찾아서 바꿀 문자열로 바꿔준다.

 

* reverse(문자열) : 문자열의 순서를 거꾸로 만든다.

 

* space(길이) : 길이만큼의 공백을 반환한다.

 

* substring(문자열, 시작위치, 길이) 또는 substring(문자열 from 시작위치 for 길이)

- 시작위치부터 길이만큼 문자를 반환한다. 길이가 생략되면 문자열의 끝까지 반환한다.

 

* substring_index(문자열, 구분자, 횟수)

- 문자열에서 구분자가 왼쪽부터 횟수 번째까지 나오면 그 이후의 오른쪽은 버린다. 횟수가 음수면 오른쪽부터 세고 왼쪽을 버린다.

 

 

* 수학함수

* abs(숫자) : 숫자의 절댓값을 계산한다.

* acos(숫자), asin(숫자), atan(숫자), atan2(숫자), sin(숫자), cos(숫자), tan(숫자) : 삼각 함수와 관련된 함수를 제공

 

* ceiling(숫자), floor(숫자), round(숫자) : 올림, 내림, 반올림을 계산한다.

 

* conv(숫자, 원래 진수, 변환할 진수) : 숫자를 원래 진수에서 변환할 진수로 계산한다. 16진수 AA2진수로 변환. 10진수 100 8진수로 변환

 

* degrees(숫자), radians(숫자), pi() : 라디안 값을 각도값으로, 각도값을 라디안 값으로 변환한다. Pi는 파이값인 3.141592를 반환한다.

* exp(x), ln(숫자), log(숫자), log(숫자), log2(숫자), log10(숫자) : 지수와 로그와 관련된 함수를 제공한다.

 

 

* mod(숫자1, 숫자2) 또는 숫자1 % 숫자2 또는 숫자1 mod 숫자2 : 숫자1을 숫자2로 나눈 나머지 값을 구한다.

 

* pow(숫자1, 숫자2), sqrt(숫자) : 거듭제곱값 및 제곱근을 구한다. 23제곱과 루트9의 값을 구한다.

 

* rand()0이상 1미만의 실수를 구한다. 만약 ‘m<=임의의 정수 < n’를 구하고 싶다면 floor(m + rand() * (n-m))을 사용하면 된다. 랜덤

 

* Sign(숫자) : 숫자가 양수, 0, 음수인지를 구한다. 결과는 1,0,-1 셋 중에 하나를 반환한다.

 

* truncate(숫자, 정수) : 숫자를 소수점을 기준으로 정수 위치까지 구하고 나머지는 버린.

 

 

* 날짜 및 시간 함수

* adddate(날짜, 차이), subdate(날짜, 차이) : 날짜를 기준으로 차이를 더하거나 뺀 날짜를 구한다.

* adddate()date_add()는 동일한 함수이며, subdate()date_sub()도 동일한 함수.

 

* addtime(날짜/시간, 시간), subtime(날짜/시간, 시간) : 날짜/시간을 기준으로 시간을 더하거나 뺀 결과를 구한다.

 

* curdate() : 현재 오늘 연--

* curtime() : 현재 오늘 시::

* now()sysdate() : 현재 오늘 --일 시::

* curdate(), current_date(), current_date 는 모두 동일

* curtime(), current_time(), current_time 은 모두 동일

* now(), localtime, localtime(), localtimestamp, localtimestamp() 는 모두 동일

 

날짜 또는 시간에서 연,,,,,,밀리초를 구한다.

 

* date(), time() : datetime 형식에서 연--일 및 시::초만 추출한다.

 

* datediff(날짜1, 날짜2) : 날짜1 – 날짜2의 일수를 결과로 추출한다.

* timediff(날짜1 또는 시간1, 날짜1 또는 시간2) : 시간1-시간2의 결과를 구한다.

 

* dayofweek(날짜), monthname(날짜), dayofyear(날짜) : 현재요일(1:, 2:, ~ 7:), 월 이름, 1년 중 몇 일이 지났는지를 반환한다.

 

* last_day(날짜) : 주어진 날짜의 마지막 날짜를 구한다.

 

* makedate(연도, 정수) : 연도에서 정수만큼 지난 날짜를 구한다.

 

* period_add(연월, 개월수) : 연월에서 개월만큼의 개월이 지난 연월을 구한다. 연월은 YYYY 또는 YYYYMM 형식을 사용한다.

* period_diff(연월1, 연월2) : 연월1-연월2의 개월수를 구한다.

 

* quarter(날짜) : 날짜가 4분기 중에서 몇 분기인지를 구한다.

 

* time_to_sec(시간) : 시간을 초단위로 구한다.

 

* 시스템 정보 함수

 

* current_user(), database() : 현재 사용자와 현재 선택된 데이터베이스를 구한다.

* user(), session_user(), current_user() 는 모두 동일하다.

* database(), schema() 는 모두 동일하다.

 

* found_rows() : 바로 앞의 select문에서 조회된 행의 개수를 구한다.

 

* row_count() : 바로 앞의 insert, update, delete 문에서 입력, 수정, 삭제된 행의 개수를 구한다. Create, drop문은 0을 반환하고 select문은 -1을 반환한다.

 

* version() : 현재 MySQL의 버전을 구한다.

* sleep() : 쿼리의 실행을 초만큼 멈춘다.

* 이 외에도 비트함수, 전체 텍스트 검색 함수, 보안 및 압축 함수, MySQL Enterprise 암호화 함수, 공간 분석 함수, JSON 함수 등이 있다.

 

회원들 중 구매한 이력이 있는 회원이 중복되게 나와야 하지만, distinct를 걸어주면 중복이 제거되어 구매한 이력이 있는 회원들을 중복없이 볼 수 있다.

 

5. exists : 존재하는 알아봐야함.

 

BBK아이디가 구매테이블에 구매한 기록이 있어 foreignkey 제약 조건에 의해 데이터가 변경되지 않을 시 제약조건 비활성화하여 수정 가능.

11. foreign_key_check=0 : 제약조건 비활성화

12. foreign_key_check=1 : 제약조건 활성화